在使用寄存器操作数的指令中,ModR/M 字节用一个 3 位的标识符来表示寄存器操作数。下表列岀了寄存器的位编码。操作码字段的位 0 用于选择 8 位或 16 位寄存器:1 表示 16 位寄存器,0 表示 8 位寄存器。
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 |
下表列出了更多使用 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 |