先说一下寄存器编号
0 1 2 3 4 5 6 7
EAX ECX EDX EBX ESP EBP ESI EDI
intel指令格式如下图所示:
Mod为00、01和10时,R/M=000(eax)时,有效地址分别是[eax]、disp8[eax]和disp32[eax],Mode为11时,操作数是寄存器EAX。Mod与R/M共5位,能构成32种组合。
Opcode是操作码,1或2个字节,有时Reg/Opcode也可以扩展用来表示操作信息。
R/M为100时表示ModR/M后带有SIB;R/M为101时表示SIB后是一个disp32,如果没有SIB,直接跟在在ModR/M后
Scale为00、01、10、11指示index放大0、2、4、8倍
index为index寄存器序号
base为base寄存器序号
下面举例说明:
add eax, eax 指令码:03 C0,Opcode为03,Mod为11,R/M为000
add eax, 1 指令码:83 C001,Opcode为03,Mod为11,R/M为000,由于83表示,表示还带一个imm8,就是最后的01
从中不难看出,寄存