我正在尝试执行简单的整数除法(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
答案 0 :(得分:1)
这是因为rA不仅用于存储商,还被视为分割数的一部分。如TAOCP第1卷第131页底部所述,在DIV子弹下:“rA和rX的值,被视为带有rA符号的10字节数rAX,除以值V.”它进一步指出:“如果V = 0或者商数量大于5个字节(这相当于| rA |> | | V |的条件),则寄存器A和X充满未定义的信息,并且溢出切换设置为开启。“ 对于代码,rA设置为2,然后存储在取除除数(“V”)的地址。这意味着rA == V,触发刚刚描述的条件。
我记得这一点的原因是,由于在DIV的情况下将rA和rX视为10字节数,因此在MixEmul中实现此算子非常麻烦。 :)
答案 1 :(得分:0)
解决方案是在DIV A之前添加ENTA 0(设置寄存器rA = 0)。我真的不知道你必须重置保存商的寄存器的原因......