0

所以在这里我面临一个问题。我的指令集中只有 25 条指令。(没有乘法、除法、减法、递增指令)。现在,我正在尝试执行二进制除法。我的问题是,我怎么知道除数是否小于被除数以便将它们都减去(以 2 的补码形式)?

指令系统: 在此处输入图像描述

4

2 回答 2

2

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

看来你需要一个compare指示。

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

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

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

于 2013-09-29T15:35:44.483 回答
2

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

同样,你没有减法。将其替换为添加一个数字和另一个数字的负数。负数是补数加二,就像费鲁乔说的那样。

编辑:如果 AC 为正/负,SPA/SNA 通过跳过下一个命令来工作。因此,如果您想要一个带有非平凡主体的 if 语句,您需要在 Sxx 后跟一个 BUN(无条件分支)。如果条件为真,则跳过分支,如果条件为假,则执行分支。

请注意,这是对传统组装逻辑的反转。通常,它是“如果条件为真则分支”;在这台机器上,它是“如果条件为假则分支”。

郑重声明,你的指令集是故意的。现实生活中的 CPU 比这对程序员更友好,即使是 RISC 也是如此。

于 2013-09-29T15:45:43.453 回答