所以在这里我面临一个问题。我的指令集中只有 25 条指令。(没有乘法、除法、减法、递增指令)。现在,我正在尝试执行二进制除法。我的问题是,我怎么知道除数是否小于被除数以便将它们都减去(以 2 的补码形式)?
指令系统:
所以在这里我面临一个问题。我的指令集中只有 25 条指令。(没有乘法、除法、减法、递增指令)。现在,我正在尝试执行二进制除法。我的问题是,我怎么知道除数是否小于被除数以便将它们都减去(以 2 的补码形式)?
指令系统:
许多指令可以分解为更简单的指令。
看来你需要一个compare
指示。
如果您没有compare
指令,您可以使用 a 模拟它subtract
并在减法后检查处理器标志的状态。
您没有subtract
指令,因此您可以通过添加减去值的负数来模拟它。
如果您没有negate
指令,您可以通过翻转所有位的值并加 1 以二进制补码算法模拟它。
我假设 AC 是一个寄存器(累加器)。所以你需要的是一个 SPA 命令,而 AC 有两个数字相减的结果。或 SNA,取决于您从什么中减去什么。
同样,你没有减法。将其替换为添加一个数字和另一个数字的负数。负数是补数加二,就像费鲁乔说的那样。
编辑:如果 AC 为正/负,SPA/SNA 通过跳过下一个命令来工作。因此,如果您想要一个带有非平凡主体的 if 语句,您需要在 Sxx 后跟一个 BUN(无条件分支)。如果条件为真,则跳过分支,如果条件为假,则执行分支。
请注意,这是对传统组装逻辑的反转。通常,它是“如果条件为真则分支”;在这台机器上,它是“如果条件为假则分支”。
郑重声明,你的指令集是故意的。现实生活中的 CPU 比这对程序员更友好,即使是 RISC 也是如此。