2

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

个人电脑 -> 三月

MDR -> 红外线

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

4

1 回答 1

0

首先,LMC是一个虚拟概念。它有几种解释和实现,有时可能是相互矛盾的。因此,哪个答案是正确的可能取决于您正在使用的课程材料。

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

寄存器和内存

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

获取步骤

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

  • 三月 <= PC
  • MDR <= 邮箱[MAR]
  • 红外 <= 耐多药
  • PC <= PC+1(使用计算器)

我们可以讨论最后一步的确切顺序。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 仅用于处理单元和内存之间的通信。

于 2021-04-03T09:07:36.070 回答