回顾指令结构
经典变长指令-ModRM
硬编码 | 汇编 |
---|---|
0x88 | MOV Eb, Gb |
0x89 | MOV Ev, Gv |
0x8A | MOV Gb, Eb |
0x8B | MOV Gv, Ev |
- G:通用寄存器
- E:寄存器/内存
- b:字节
- v:Word、doubleword or quadword
当指令中出现内存操作对象的时候,就需要在操作码后面附加一个字节来进行补充说明,这个字节被称为ModR/M。
该字节的8个位被分成了三个部分:
其中,Reg/Opcode(第3、4、5位,共3个字节)描述指令中的G部分,即寄存器。
寄存器宽度 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
---|---|---|---|---|---|---|---|---|
32 | EAX | ECX | EDX | EBX | ESP | EBP | ESI | EDI |
8 | AL | CL | DL | BL | AH | CH | DH | BH |
Mod(第6、7位)和R/M(第0、1、2位)共同描述指令中的E部分,即寄存器/内存。