【发布时间】:2019-01-02 03:41:36
【问题描述】:
intel 指令中,idiv(integer divsion) 表示有符号除法。
我得到了idiv 的结果,但我不太明白结果。
- 示例
0xffff0000 idiv 0xffff1100
- 我的错误预测
据我所知,quotient 应该是 0,remainder 应该是 0xffff0000,因为......
0xffff0000 / 0xffff1100 = 0
0xffff0000 % 0xffff1100 = 0xffff0000
- 然而,结果是……
在idiv
eax 0xffff0000 # dividend
esi 0xffff1100 # divisor
edx 0x0
idiv之后
eax 0xfffeedcc # quotient
edx 0x7400 29696 # remainder
- 问题。
结果是我无法预料的价值。
有人可以解释一下签名部门(idiv)吗?
- 附加。
以下是有关 idiv 的更多信息。idiv 使用 eax 寄存器作为源寄存器。
作为执行的结果,商存储在 eax 中,余数存储在 edx 中。
【问题讨论】:
-
您说“8086 指令”,但随后您使用非 8086 寄存器的“eax”和“edx”。请澄清。另请注意,idiv 指令使用 (e)dx 寄存器作为您未指定的源寄存器。
-
@RaymondChen 谢谢你的建议。我编辑了我的问题以便更清楚。
-
@Jiwon - 问题仍然没有显示 edx 在 idiv 之前的内容。
标签: assembly x86 division integer-division signed-integer