MIXAL 汇编中的除法是如何工作的?

How does division work in MIXAL assembly?

我正在尝试执行简单的整数除法 (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

解决方法是在DIVA之前加上ENTA 0(设置寄存器rA = 0)。我真的不知道你为什么要重置保存商的寄存器的原因......

那是因为rA不仅用来存放商,还被认为是被除数的一部分。正如 TAOCP 第 1 卷第 131 页底部所指定,在 DIV 项目符号下:"The value of rA and rX, treated as a 10-byte number rAX with the sign of rA, is divided by the value V." 它进一步指出:"If V = 0 or if the quotient is more than five bytes in magnitude (this is equivalent to the condition that |rA| >= |V|), registers A and X are filled with undefined information and the overflow toggle is set on." 对于您的代码,rA 设置为 2,然后存储在从中获取除数 ("V") 的地址。这意味着 rA == V,触发了刚刚描述的条件。

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