每个asm指令的大小是多少?

时间:2009-09-09 13:58:07

标签: assembly x86

每个asm指令的大小是多少?每条指令占用多少字节? 8个字节?四个用于操作码,四个用于参数?例如,当你在mov中有一个操作码和2个参数时会发生什么?它们在内存中是否具有固定大小或它们是否有所不同? EIP是否与此有关,它的值总是加1,完全独立于它经过的指令类型?

我问这是因为当我正在阅读http://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames时,我偶然发现,看起来调用指令相当于push和jmp指令。

call MYFUNCTION
mov my_var, eax

相同
push [eip + 2];
jmp MYFUNCTION;
mov my_var, eax

当我们在堆栈上推动[eip + 2]时,我们指向的值是什么?到“jmp MYFUNCTION”旁边的行,移动my_var eax,对吗?

ps:MSVC ++在第一行标记错误,因为它表示eip未定义。它适用于eax,esp,ebp等。我做错了什么?

2 个答案:

答案 0 :(得分:16)

机器指令的大小取决于处理器体系结构 - 有固定大小指令的体系结构,但您显然是指IA-32和Intel 64,它们的指令长度变化很大。当然,指令指针总是按处理指令的长度递增。

您可以从英特尔下载IA-32 and Intel 64 manuals - 它们几乎包含您可以了解的有关架构的所有信息。您可以在中找到操作码映射和指令集格式 Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z第623至768页。

答案 1 :(得分:2)

机器代码大小取决于处理器的体系结构。

例如,在IA-32上,指令大小从1到6个字节(或更多)不等。