划分两个二进制数

时间:2013-09-29 15:23:45

标签: assembly mano-machine

所以这里我遇到了一个问题。我的指令集中只有25个指令。(没有乘法,除法,减法,递增指令)。 现在,我正在尝试进行二元除法。我的问题是,我怎么能知道除数是否小于除数以便将它们都减去(以2的恭维形式)?

说明书: enter image description here

2 个答案:

答案 0 :(得分:2)

许多指令可以分解为更简单的指令。

您似乎需要compare指令。

如果没有compare指令,可以使用subtract进行模拟,并在减去后检查处理器标志的状态。

您没有subtract指令,因此您可以通过添加相减值的负数来模拟它。

如果没有negate指令,可以通过翻转所有位的值并加1来以二进制补码运算来模拟它。

答案 1 :(得分:2)

我假设AC是一个寄存器(累加器)。所以你需要的是SPA命令,而AC有减去两个数字的结果。或者SNA,取决于你从什么中减去。

同样,你没有减法。替换为添加一个数字和另一个数字的负数。正如Ferruccio所说,负面是补充加两个。

编辑:如果AC是正/负,则SPA / SNA通过跳过下一个命令来工作。因此,如果你想拥有一个非常重要的if语句,你需要放置一个Sxx后跟一个BUN(无条件分支)。如果条件为真,则跳过分支,如果条件为假,则执行分支。

请注意,它是传统装配逻辑的反转。通常情况下,如果条件成立则为“分支”;在这台机器上,如果条件是假的,它就是“分支”。

为了记录,你的指令集被故意阻止。现实生活中的CPU比程序员更友好,甚至是RISC类型。