【发布时间】:2014-11-25 18:45:38
【问题描述】:
请解释一下,为什么我收到此代码的“除以零”错误:
"mov ax,300
mov bl,2
idiv bl"
应该是这样的:al = ax div source, ah = ax mod source
【问题讨论】:
请解释一下,为什么我收到此代码的“除以零”错误:
"mov ax,300
mov bl,2
idiv bl"
应该是这样的:al = ax div source, ah = ax mod source
【问题讨论】:
idiv 是有符号的除法,如您所说,它在al 中产生商。那是一个 8 位寄存器,300/2=150 在使用有符号算术时不适合 8 位(因为最大值是 127)。有点误导,你也得到divide by zero 溢出(它实际上称为#DE divide error)。这当然是写在指令集参考里了。
如果您对无符号计算感到满意,可以使用 div bl,在这种情况下,150 适合 al,您不会收到错误。
【讨论】: