我正在尝试执行简单的整数除法(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
那是因为 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 中实现此运算符非常痛苦。:)
解决方案是在DIV A之前添加ENTA 0(设置寄存器rA = 0)。我真的不知道您必须重置保存商的寄存器的原因......