Intel 64/x86_64/IA-32/x86处理器 - 指令格式(5) - 8086/16位指令寻址字节

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, 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个字节)

扫描二维码关注公众号,回复: 5091968 查看本文章

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指示如何如何计算存储器操作数的有效地址。

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/86593828