书上说x86指令的操作数可以是立即数, 然后立即数是$加上标准的C语言表示的数, 他说这个数只要在32位之内都行, 那我在想这样一个问题, x86汇编指令长度最多也就是15个字节, 那么15个字节如何在完整表达这个立即数的同时传达出对这个数字进行操作的的信息呢?
书上说x86指令的操作数可以是立即数, 然后立即数是$加上标准的C语言表示的数, 他说这个数只要在32位之内都行, 那我在想这样一个问题, x86汇编指令长度最多也就是15个字节, 那么15个字节如何在完整表达这个立即数的同时传达出对这个数字进行操作的的信息呢?
这部分是汇编的基础知识。你往后看就可以看到了,汇编指令格式:
Instruction prefixes
: 指令前缀,可选项,每个前缀一个字节,可选0个前缀到4个不等。详细信息参考intel manual 2.2节Opcode
: 操作码,这是唯一不可省略的项,1到2个字节,在某些情况下会有额外的三个位作为补充opcode,这三个位是ModR/M中的Reg/Opcode。ModR/M
:一共有三个域,mod,reg/opcode, r/m, reg/opcode 在特定情况下作为opcode的补充操作码,特定情况下作为第二个操作数寄存器。Mod域和R/M域总共5个位,定义了32种寻址方式。可选项。
SIB
:定义ModR/M的寻址方式的补充寻址方式,可选项。Displacement
:偏移,可选,0,1,2,4个字节Immediate
: 立即数,可选,0,1,2,4个字节。一般情况下,远远不会用到15个字节,7个字节都算长的了。
x86asm下立即数最长也就是个dword,才4个字节而已。