所需的最小装配说明是什么?

时间:2012-06-26 05:30:31

标签: hardware computer-architecture instruction-set

如果您要构建一个用于运行任意程序的处理器,那么您可以使用的最小指令集(ISA)是什么?

我在想:

  • ALU-ops(add,sub,mul,div)

  • 加载reg,[地址]

  • 商店注册,[地址]

  • 分支 - 如果操作。如果不相等,可以有分支,如果>,如果< (branchif reg1,reg2,LABEL)

您怎么看?

3 个答案:

答案 0 :(得分:5)

从技术上讲,您只需要One Instruction。它需要做数学和条件分支。例如如果为负,则减去并分支。

答案 1 :(得分:1)

您不需要任何可以根据其他说明构建的指令。

所以,不需要muldiv,因为你可以通过重复加法或减法来做到这一点,如果你有sub则不需要neg(否定)并且数字将换行,例如两个补码。

当然,你可以使用两个分支指令,一个用于相等,一个用于少于 - 所有其他可以从这些组合构建。

因为您没有I / O指令,所以您可能需要使用内存映射I / O,其中通过内存访问与其他设备进行通信。

而且,如果没有原生pushpop,您可能需要使用专用寄存器(以及内存位置)实现自己的堆栈,因为您似乎没有注册到 - 注册移动)。

现在这不是一个非常好的漂亮的架构,但它应该起作用。正如Matrix Architect所说,“我们准备接受的生存水平”。


顺便说一下,看看RCA1802 CPU(从昔日开始)。它有 no 专用程序计数器或堆栈指针,而是在软件中实现所有这些(详见here)。

答案 2 :(得分:1)

在8085编程时,我觉得有几种方法可以做同样的事情。因此,如果是这种情况,您就知道您的指令集不是最小的。

我建议遵循以下指示─ 添加,补充,逻辑AND,OR和加载存储。 有条件的和无条件的跳跃。

大多数其他说明可以按照上述说明执行。


编辑:只是列出装配说明(基于8085):

我将考虑一个模型,其中有3个寄存器。使用A = B + C

等操作

ADD B,C(A = B + C)
CMA(A = A')
或B,C(A = B或C) JMP xxxx(将PC设置为xxxx)
LDA xxxx(加载A,内容为xxxx地址)
STA xxxx
JZ xxxx(如果设置了零标志则跳转)

注意:我意识到在寄存器之间复制数据的附加指令非常有用。但可以省略。请提出一个不能没有它的案例。