【问题标题】:What is the minimum assembly instructions needed?需要的最低组装说明是多少?
【发布时间】:2012-06-26 05:30:31
【问题描述】:

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

我在想:

  • ALU 运算(add、sub、mul、div)

  • 加载注册,[地址]

  • 商店注册,[地址]

  • 分支-if 操作。如果不相等,则可能有分支,如果>,如果

你怎么看?

【问题讨论】:

  • 好吧,您描述的是基于寄存器的机器,总是有基于堆栈的机器......它可以简单得多。只是您的标准算术/逻辑运算符,带有一些 PUSH/POP,当然还有 JUMP/JUMPT/JUMPF ......哦和固定的指令长度。
  • 我们被教导 8085 微处理器,它没有任何 div 和 multiply 的本机实现..:)
  • 想知道这是否属于programmers.stackexchange.com?
  • 我认为这是经典的 RISC 与 CISC 问题。只需看一些简单的 RISC,例如DLX。您的集合太小而无法运行任意操作系统(例如 Linux 或 MINIX),但它可以用于没有 I/O 的简单程序。

标签: hardware computer-architecture instruction-set


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您不需要任何可以从其他指令构建的指令。

    因此,不需要mul 或div,因为您可以通过重复的加法或减法来做到这一点,如果您有neg(否定)并且数字将换行,则不需要sub,例如使用二进制补码。

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

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

    而且,如果没有本机 push 和 pop,您可能需要使用专用寄存器(和内存位置,因为您似乎没有寄存器到寄存器的移动)来实现自己的堆栈。

    现在这不是一个非常漂亮的架构,但它应该可以运行。正如 Matrix 架构师所说,“我们已经准备好接受不同的生存水平”。


    顺便说一下,看看 RCA1802 CPU(从以前的日子开始)。它没有专门的程序计数器或堆栈指针,而是在软件中实现所有这些(有关详细信息,请参阅here)。

    【讨论】:

      【解决方案3】:

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

      我建议遵循以下说明- 加、补、逻辑 AND、OR 和加载存储。 有条件和无条件跳转。

      其他大部分指令都可以用上面的指令来执行。


      编辑:仅列出汇编指令(基于 8085):

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2019-05-12
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 2014-10-08
        相关资源
        最近更新 更多