版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/86593828
第二字节(BYTE2)
第二字节是ModR/M字节,基本用途是指示指令的两个操作数,以及该字节之后是否还有其他字节(位移量字节和立即数字节)。由于主要用于用于操作数寻址,所以又称为“寻址字节”。
Mod域(即BYTE2[7:6],寻址模式域)有2个比特位,共4种组合,用于指示操作数的来源,即其中一个来自与存储器,或者两个都来自于寄存器。具体编码格式参见下表:
Mod编码(二进制) |
释义 |
00 |
存储器模式,无位移量字节;如果R/M=110,则有一个16位的位移量 |
01 |
存储器模式,8位位移量字节(1个字节) |
10 |
存储器模式,16位位移量字节(2个字节) |
11 |
寄存器模式(无位移量) |
REG域(BYTE2[5:3],即寄存器域)用来指示一个寄存器,可以是源操作数,也可以是目的操作数,由第一字节的D标志位指示。具体编码格式如下:
REG |
W=0 |
W=1 |
000 |
AL |
AX |
001 |
CL |
CX |
010 |
DL |
DX |
011 |
BL |
BX |
100 |
AH |
SP |
101 |
CH |
BP |
110 |
DH |
SI |
111 |
BH |
DI |
在一些指令中,主要是立即数到存储器的指令变体,REG域用作操作码的扩展位,用来标识操作的类型。例如,
Todo:添加指令示例
R/M域(BYTE2[2:0],即寄存器/存储器域),用来指示另一个操作数,可以在存储器中,也可以在寄存器中。R/M域编码含义依赖于MOD域的设定。如果MOD=11(寄存器到寄存器模式),则R/M域标识第二个寄存器操作数。如果MOD是存储器模式(即00,01,10),则R/M指示如何如何计算存储器操作数的有效地址。