1

为了好玩,我正在设计一个带有 4 位指令的 8 位处理器架构,并且遇到了 4 位指令的一些限制。

我想包括SHR(右移)和SHL(左移)指令,但我似乎没有空间放置它们。我目前有JGE(jump if greater or equal), JLE(jump if less or equal), JFE(jump if equal), and JNE(jump if not equal),我想知道这四个是否都是必要的。

所有这四个跳转条件对于干净的代码都是必需的,还是我可以安全地放弃JFEand JNEfor SHRand SHL

编辑:我确实有JMP,而且不是绝对的。

4

3 回答 3

4

除了 Carl Norum 的回答之外,如果您支持无条件跳转指令 (JMP),那么一旦您拥有 JFE,您就不需要它的补充 JNE,因为您可以将其编码为 JMP 的 JFE。同样,如果您有 JG、JFE 和 JMP,则不需要 JLE。

对于移位,如果您的指令带有一个参数并且该参数允许值大于您的字长,您可以对左移和右移使用相同的指令,并让参数值确定它是一个还是另一个。

于 2013-01-22T19:19:28.550 回答
3

如果“干净”是指“易于阅读”,则说明越多越好。好吧,无论如何。

在实践中,您只需要一个条件跳转指令。

例如, Brainfuck只有 8 条“指令”。它有两次跳跃——一次向前跳跃,一次向后跳跃,但如果你的处理器使用绝对跳跃,那可能是一样的。

您是否正在为您的处理器编写汇编程序?如果是这样,您可以添加管理不同跳转形式的宏指令,并将它们转换为您的芯片实际支持的任何低级操作。

于 2013-01-22T18:53:49.153 回答
3

这是删除 JFE 和 JNE 的一种方法。

此代码将根据测试是否相等(分支到 absolute_equal)或不(分支到 absolute_not_equal)分支到不同的位置。

   JGE maybe_equal
   JLE definitely_not_equal
maybe_equal:
   JLE definitely_equal
   JGE definitely_not_equal

我将由您决定这是否算作干净的代码......

于 2013-01-22T19:20:21.300 回答