Fetch - LMC 指令的执行周期

问题描述

我必须为每个 Little Man Computer 指令(ADD、SUB、BR、BRP 等)定义步骤,而且我在分支指令和 COB(或 Halt 指令)方面遇到了问题。我理解每条指令开始的提取部分:

PC -> MAR

耐多药 -> IR

但我不确定在执行部分添加什么才能使指令真正正确。谁能解释一下如何为 BR、BRP、BRZ 和 COB 设置获取执行周期?任何帮助将不胜感激

解决方法

首先,LMC 是一个虚拟概念。它有多种解释和实现,有时可能会发生冲突。因此,哪个答案是正确的可能取决于您使用的课​​程材料。

为了避免混淆,我们可以使用以下定义:

寄存器和内存

  • MAILBOX:这是处理单元之外的内存。它有 100 个条目,用于存储 3 位数字。
  • PC:程序计数器(两位数)
  • MAR:内存地址寄存器:临时保存邮箱的 2 位地址,用于获取或存储 MDR 中的值。
  • MDR:内存数据寄存器:临时保存传入或传出邮箱的 3 位数据。
  • IR:指令寄存器:包括操作码(1 位或 3 位数字),有时还有 2 位数字地址
  • ACC:累加器:一个 3 位数的值
  • N:否定标志:打开或关闭。这方面在原始 LMC 中没有明确定义。一些模拟器允许 ACC 保持负值,因此不需要额外的标志,而其他模拟器将认为 ACC 严格限制为仅三位数字,不支持负号。由于真正的 CPU 通常有一个 N(egative)标志,我认为可以合理地将这个标志想象成一个单独的东西。
  • Z:零标志:打开或关闭。这是ACC是否具有零值的指示。这是否真的应该作为一个单独的标志存在比 N 标志更值得商榷,但我只是在这里列出它作为一种可能性。

获取步骤

fetch-execution 周期的 fetch 部分总是相同的——我更喜欢在相反的方向写赋值:

  • MAR
  • MDR
  • IR
  • PC

我们可以讨论最后一步的确切顺序。 PC 的更新可以在第 2 步和第 3 步之前或同时进行。

执行步骤

获取-执行周期的执行部分取决于 IR 的内容:操作码(1 位数字,或者 IN/OUT 的 901 或 902)被解释。例如:

  • BR(也称为 BRA):

    PC

  • BRP

    如果未设置 N:
    PC

  • BRZ

    如果设置了 Z 标志:
    PC

  • COB

    程序执行停止。在外部用户触发运行之前,不会再有提取执行周期。

根据您的课程材料,您可能不需要提及 N 或 Z 标志。在这种情况下,只需将条件分别替换为“ACC 为负”和“ACC 为零”。

请注意,我没有涉及这四个指令的 MAR 或 MDR 寄存器——将值从 IR 直接移动到 PC——因为 MAR 和 MDR 仅用于处理单元和内存之间的通信。