【问题标题】:Assembly division error装配分割错误
【发布时间】:2014-11-25 18:45:38
【问题描述】:

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

"mov ax,300

mov bl,2

idiv bl"

应该是这样的:al = ax div source, ah = ax mod source

【问题讨论】:

    标签: assembly divide-by-zero


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多