请解释一下,为什么我收到此代码的"除以零"错误:
"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
并且不会出错。