0

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

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

2 回答 2

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 中实现此运算符非常痛苦。:)

于 2015-09-30T18:42:35.233 回答
0

解决方案是在DIV A之前添加ENTA 0(设置寄存器rA = 0)。我真的不知道您必须重置保存商的寄存器的原因......

于 2015-09-24T19:39:32.757 回答