我必须为每个 Little Man Computer 指令(ADD、SUB、BR、BRP 等)定义步骤,并且在分支指令和 COB(或 Halt 指令)方面遇到问题。我了解每条指令开头的获取部分:
个人电脑 -> 三月
MDR -> 红外线
但我不确定在执行部分添加什么以使指令真正正确。谁能解释一下如何为 BR、BRP、BRZ 和 COB 设置获取执行周期?任何帮助将不胜感激
我必须为每个 Little Man Computer 指令(ADD、SUB、BR、BRP 等)定义步骤,并且在分支指令和 COB(或 Halt 指令)方面遇到问题。我了解每条指令开头的获取部分:
个人电脑 -> 三月
MDR -> 红外线
但我不确定在执行部分添加什么以使指令真正正确。谁能解释一下如何为 BR、BRP、BRZ 和 COB 设置获取执行周期?任何帮助将不胜感激
首先,LMC是一个虚拟概念。它有几种解释和实现,有时可能是相互矛盾的。因此,哪个答案是正确的可能取决于您正在使用的课程材料。
为避免混淆,以下是我们可以使用的定义:
fetch-execution 周期的 fetch 部分总是相同的——我更喜欢在相反的方向写赋值:
我们可以讨论最后一步的确切顺序。PC 的更新可以在步骤 2 和 3 之前或同时进行。
获取执行周期的执行部分取决于 IR 的内容:操作码(1 位,或IN
/的 901 或 902 OUT
)被解释。例如:
BR
(也称为BRA
):
PC <= IR(最后 2 位数字)
BRP
:
如果未设置 N:
PC <= IR(最后 2 位)
BRZ
:
如果设置了 Z 标志:
PC <= IR(最后 2 位数字)
COB
:
程序执行停止。在外部用户触发运行之前,不会有更多的 fetch-execution 循环。
根据您的课程材料,您可能不会提及 N 或 Z 标志。在这种情况下,只需分别用“ACC 为负”和“ACC 为零”替换条件。
请注意,我没有涉及这四个指令的 MAR 或 MDR 寄存器——直接将值从 IR 移动到 PC——因为 MAR 和 MDR 仅用于处理单元和内存之间的通信。