请解释一下,为什么我为此代码得到“除以零”错误:
“mov ax,300
mov bl,2
idiv bl“
它应该如下:al = ax div source,ah = ax mod source
答案 0 :(得分:2)
idiv
是已签名的分部,正如您所说的那样在al
中产生商数。这是一个8位寄存器,300/2=150
在使用带符号算术时不适合8位(因为最大值为127
)。有点误导,你得到divide by zero
溢出(它实际上称为#DE divide error
)。这当然写在指令集参考中。
如果您对未签名的计算感到满意,则可以使用div bl
,在这种情况下150
适合al
,您将不会收到错误。