装配师错误

时间:2014-11-25 18:45:39

标签: assembly divide-by-zero

请解释一下,为什么我为此代码得到“除以零”错误:

“mov ax,300

mov bl,2

idiv bl“

它应该如下:al = ax div source,ah = ax mod source

1 个答案:

答案 0 :(得分:2)

idiv是已签名的分部,正如您所说的那样在al中产生商数。这是一个8位寄存器,300/2=150在使用带符号算术时不适合8位(因为最大值为127)。有点误导,你得到divide by zero溢出(它实际上称为#DE divide error)。这当然写在指令集参考中。

如果您对未签名的计算感到满意,则可以使用div bl,在这种情况下150适合al,您将不会收到错误。