首页 > 汇编语言 > 浮点数处理与指令编码
阅读:1,407
汇编语言寄存器模式指令简述
在使用寄存器操作数的指令中,ModR/M 字节用一个 3 位的标识符来表示寄存器操作数。下表列岀了寄存器的位编码。操作码字段的位 0 用于选择 8 位或 16 位寄存器:1 表示 16 位寄存器,0 表示 8 位寄存器。
比如,MOV AX, BX 的机器码为 89 D8。寄存器送其他操作数的 16 位 MOV 指令的 Intel 编码为 89/r,其中 /r 表示操作码后面带一个 Mod R/M 字节。
Mod R/M 字节有三个字段(mod. reg 和 r/m)。例如,若 Mod R/M 的值为 D8,则它包含如下字段:
下表列出了更多使用 8 位和 16 位寄存器操作数的例子。
R/M | 寄存器 | R/M | 寄存器 |
---|---|---|---|
000 | AX or AL | 100 | SP or AH |
001 | CX or CL | 101 | BP or CH |
010 | DX or DL | 110 | SI or DH |
011 | BX or BL | 111 | DI or BH |
比如,MOV AX, BX 的机器码为 89 D8。寄存器送其他操作数的 16 位 MOV 指令的 Intel 编码为 89/r,其中 /r 表示操作码后面带一个 Mod R/M 字节。
Mod R/M 字节有三个字段(mod. reg 和 r/m)。例如,若 Mod R/M 的值为 D8,则它包含如下字段:
mod | reg | r/m |
11 | 011 | 000 |
- 位 6〜7 是 mod 字段,指定寻址模式。mod 字段为 11 表示 r/m 字段包含的是一个寄存器编号。
- 位 3〜5 是 eg 字段,指定源操作数。在本例中,BX 就是编号为 011 的寄存器。
- 位 0〜2 是 r/m 字段,指定目的操作数。本例中,AX 是编号为 000 的寄存器。
下表列出了更多使用 8 位和 16 位寄存器操作数的例子。
指令 | 操作码 | mod | reg | r/m |
---|---|---|---|---|
mov ax, dx | 8B | 11 | 000 | 010 |
mov al, dl | 8A | 11 | 000 | 010 |
mov ex, dx | 8B | 11 | 001 | 010 |
mov cl, dl | 8A | 11 | 001 | 010 |