汇编语言寄存器模式指令简述

在使用寄存器操作数的指令中,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

  • 位 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