装配体划分错误



请解释一下,为什么我收到此代码的"除以零"错误:

"MOV AX,300

移动 BL,2

伊迪夫"

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

idiv是有符号除法,如您所说,它会产生al商。这是一个 8 位寄存器和 300/2=150,在使用有符号算术时不适合 8 位(因为最大值为 127 )。有点误导的是,你也会因为溢出而divide by zero(它实际上被称为#DE divide error)。这当然写在指令集参考中。

如果您对无符号计算感到满意,则可以使用div bl,在这种情况下,150适合al并且不会出错。

最新更新