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