【问题标题】:Basic computer. How to implement jump equal基础电脑。如何实现跳转相等
【发布时间】:2014-04-27 17:52:17
【问题描述】:

在我正在学习的课程中,我需要在软件上制作一台基本的计算机。 目前我有一个 RAM、ROM、程序计数器 (PC)、ALU、REG A、REG B、MUX A、MUX B 和一个控制单元。 现在,在 ROM 上,我有一个指令列表,其中每个位被发送到不同的部分,例如,MUX、REG、ALU(只能加减)、loadPC(跳转到指令)。 该 ROM 每条指令有 25 位,有 255 条指令。它类似于汇编中的编码,但更简单。 还有一点需要注意的是,在 ALU 输出中,我有一个“z”位,当 ALU 结果为 0 时,该位仅为 1。

现在,根据我理解的跳转,我需要将 Literal 设置为我想要跳转的内存并将 loadPC 设置为 1。 我想看看 B == 5 所以在汇编中这将是 CMP B,5 JEQ(插入内存跳转)

CMP实际上是B-5,如果B==5,那么结果是0,那么z = 1。 JEQ 指令仅在 z = 1 时才加载 PC

现在,我的问题是,如何在我的计算机中实现它。我需要额外的一点吗? 目前我创建了一个新位并将其始终设置为 0,除了在 JEQ 指令中。让我们称这个位为'v' 我的 loadPC 现在通过一个逻辑框,其中输入是“v”“z”和“loadPC”,输出是一个新的“loadPC” (¬v 或 z)和(loadPC)。 但是这种方法似乎不太优雅,我怎样才能以更好的方式做到这一点?

【问题讨论】:

    标签: assembly cpu-architecture


    【解决方案1】:

    这个问题有点模棱两可。您是在问如何做到这一点或最佳做法是什么?在大多数教科书中,您会发现有一个多路复用器,其输出到 PC 寄存器。该多路复用器的输入是当前 PC+4(或任何指令大小)和跳转目标。多路复用器由单个位输入控制。该输入可以是“当前指令是跳转”和“是零位/寄存器集”的逻辑与。这很好,因为您总是会在一条指令之后更新 PC,这不是有条件的,它只是需要确定的值。

    祝你好运。

    附:不要使用“v”,因为它有时指的是溢出标志。

    【讨论】: