在我正在学习的课程中,我需要在软件上制作一台基本的计算机。 目前我有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。 如果z = 1
,JEQ intsruction将仅加载PC现在,我的问题是,我如何在我的电脑中实现这一点。我需要额外的一点吗? 目前我创建了一个新位并始终将其设置为0,但JEQ指令除外。让我们称之为'v' 我的loadPC现在通过一个逻辑框,其中输入是'v''z'和'loadPC',输出是一个新的'loadPC' (¬v或z)和(loadPC)。 然而,这种方法看起来并不太优雅,我怎么能以更好的方式做到这一点呢?
答案 0 :(得分:1)
这个问题有点含糊不清。你在问这个怎么做或最佳做法是什么?在大多数教科书中,您会发现有一个多路复用器,其输出到PC寄存器。此多路复用器的输入是当前PC + 4(或任何指令大小)和跳转目标。多路复用器由单个位输入控制。这个输入可以是"是当前指令跳转的逻辑AND"和"是零位/寄存器组"。这很好,因为你总是会在一条指令后更新PC,这不是有条件的,它只是需要决定的值。
祝你好运。P.S。不要使用' v'因为这有时指的是溢出标志。