【发布时间】:2021-07-28 17:46:08
【问题描述】:
结果差异的原因是什么:
mov eax, 0
mov al, 2
mov ah, 4
mul ah; eax == 0x08
和:
mov eax, 0
mov al, 2
mov ah, 4
mul al; eax == 0x10
【问题讨论】:
-
最后一条指令使用不同的寄存器。
-
imul和mul指令的单操作数形式隐式乘以给定大小的 A 寄存器,rax或eax或ax或al。当您将ah指定为显式操作数时,隐式操作数为al。al寄存器是一个不同的寄存器,但也是字节大小的。所以mul al将显式al乘以隐式操作数al。 -
您最后的评论是错误的。
al等于 2 导致ax等于 4,而不是 10 小时。 -
@ScottHunter 这很明显。
-
@ecm 这是我得到的结果。