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

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

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注