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

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

爱面试的程序媛,一个分享面试经验的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,定时分享程序员面试的那点事。

面试如何造火箭?工作如何拧螺丝?都在这个公号哦。

扫描二维码关注公众号,免费领取价值 1000 元的求职面试资料(限时免费)!

当你决定关注「爱面试的程序媛」,你已然超越了90%的程序员!

爱面试的程序媛二维码
微信扫描二维码关注