BY eHWRITTEN ON HALO3 MIN READ

8086默认寄存器

在 8086 和 x86 汇编中,有很多“默认规则”(隐含操作寄存器),这些都是 CPU 设计时固定好的,程序员无法改变。以下是你应该掌握的一些典型例子:   🔸 一、乘法和除法指令(默认寄存器) 指令 操作数 默认被乘数/被除数 结果 备注 mul r8 8位寄存器,如 bl AL × r8 A

在 8086 和 x86 汇编中,有很多“默认规则”(隐含操作寄存器),这些都是 CPU 设计时固定好的,程序员无法改变。以下是你应该掌握的一些典型例子:


  🔸 一、乘法和除法指令(默认寄存器)

指令 操作数 默认被乘数/被除数 结果 备注
mul r8 8位寄存器,如 bl AL × r8 AX 无符号乘法
mul r16 16位寄存器,如 bx AX × r16 DX:AX 无符号乘法
imul r16 同上 同上 同上 有符号乘法
div r8 除数是 r8,被除数是 AX AX ÷ r8 商 → AL,余数 → AH 无符号除法
div r16 除数是 r16,被除数是 DX:AX DX:AX ÷ r16 商 → AX,余数 → DX 无符号除法

  🔸 二、字符串处理指令(默认用 SI、DI、CX)

指令 默认寄存器 功能
movsb SI→源,DI→目标 复制字符串(字节)
stosb DI→目标,AL→源 把 AL 写入目标
lodsb SI→源,读取到 AL 从内存读取一个字节到 AL
scasb ALDI 指向的内容比较 字符串比较
rep movsb CX 控制复制次数 复制 CX 个字节

这些操作都是围绕 DS:SIES:DI 展开的。


  🔸 三、栈操作(默认寄存器)

指令 默认行为
push r16 SP = SP - 2,将 r16 入栈
pop r16 从栈顶读 2 字节给 r16SP = SP + 2
call 自动将返回地址 IP 入栈
ret 从栈中弹出返回地址

这些都使用 SS:SP 作为栈指针。


  🔸 四、输入输出指令(默认寄存器)

指令 默认端口寄存器 数据寄存器
in al, dx DX 指定 I/O 端口地址 数据读入 AL
out dx, al DX 指定 I/O 端口地址 数据从 AL 写出

也就是说,端口地址是放在 DX 里的,数据寄存器是 AL(或 AX)。


  🔸 五、段寄存器默认配对规则(隐式段寄存器)

操作 默认段寄存器
mov ax, [bx] DS:[BX]
mov [si], ax DS:[SI]
mov ax, [bp] SS:[BP] ⚠️ 特例!
stosbmovsb 源:DS:SI,目标:ES:DI

如果你不手动指定段寄存器,比如 mov ax, ds:[bx],CPU就会用默认规则。


1