如何在MIXAL装配中工作?

时间:2015-09-24 16:19:00

标签: assembly mix

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

2 个答案:

答案 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)。我真的不知道你必须重置保存商的寄存器的原因......