【问题标题】:How does division work in MIXAL assembly?MIXAL 装配中的除法如何工作?
【发布时间】:2015-09-24 16:18:59
【问题描述】:

我正在尝试执行简单的整数除法 (9/2=?),但 MIX 构建器会引发整数溢出错误。难道我做错了什么?代码如下:

ORIG    1000
START   NOP
A   CON 0
B   CON 0
ENTA    2
STA A
ENTX    9
DIV A
STA A
HLT
END START

【问题讨论】:

  • 在 MixEmul 上出现同样的错误...

标签: assembly taocp


【解决方案1】:

那是因为 rA 不仅用于存储商,还被认为是被除数的一部分。如 TAOCP 第 1 卷第 131 页底部的 DIV 项目符号下所述:“rA 和 rX 的值,被视为带有 rA 符号的 10 字节数字 rAX,除以值 V。”它进一步指出:“如果 V = 0 或商的大小超过五个字节(这相当于 |rA| >= |V| 的条件),寄存器 A 和 X 将填充未定义的信息,并且溢出切换已打开。” 对于您的代码,rA 设置为 2,然后存储在从中获取除数(“V”)的地址。这意味着 rA == V,触发刚刚描述的条件。

我记得这一点的原因是,由于在 DIV 的情况下将 rA 和 rX 处理为 10 字节的数字,因此在 MixEmul 中实现此运算符非常痛苦。 :)

【讨论】:

    【解决方案2】:

    解决办法是在DIV A前加ENTA 0(设置寄存器rA=0)。我真的不知道为什么你必须重置保存商的寄存器...

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 2014-11-19
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 2020-11-19
      相关资源
      最近更新 更多