Intel 64/x86_64/IA-32/x86处理器 - 指令格式(6) - 8086/16位指令位移量字节/立即数字节

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/86593900

第三~六字节(BYTE3~BYTE6)

这4个字节是指令的可选字节,通常用来指示存储器操作数的位移量,和/或立即操作数的值。

位移量字节可以是单字节或者双字节。只要有可能,程序语言翻译器(例如汇编器)总是试图生成单字节的位移量。MOD域指示后续有几个字节的位移量。遵循Intel的规范,如果是双字节位移量,则第3字节存储低位字节,第4字节存储高位字节,即低位字节存储在存储器的低地址处,高位字节存储在高地址处。如果是单字节位移量,8086处理器自动地将其符号扩展为16位位移量,然后在用于有效地址计算。

立即数总是在任何的位移量之后出现。立即数的存储规则同位移量。

示例:

Intel的指令文档规格

如下的汇编代码

MOV ax, 1234H

MOV bx, 5678H

 

经汇编器翻译以后会生成的机器指令

b8 34 12

bb 78 56

 

将以上指令用二进制格式表示如下

1011 1000 0011 0100 0001 0010

1011 1011 1001 1010 0111 1000

 

MOV ax, 1234H指令分解如下

第一字节:操作码:1011, W位:1,REG域:000(即AX)

第二字节:立即数低位字节34H

第三字节:立即数高位字节12H

 

MOV bx, 5678H指令分解如下

第一字节:操作码1011,W位:1,REG域:011(即BX)

第二字节与第三字节:立即数5678H。

 

REG域的寄存器代码如下表所示

REG

8位寄存器

16位寄存器

32位寄存器

0 (000)

AL

AX

EAX

1 (001)

CL

CX

ECX

2 (010)

DL

DX

EDX

3 (011)

BL

BX

EBX

4 (100)

AH

SP

ESP

5 (101)

CH

BP

EBP

6 (110)

DH

SI

ESI

7 (111)

BH

DI

EDI

 

 

 

猜你喜欢

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