【问题标题】:Fetch - execute cycle for LMC instructionsFetch - LMC 指令的执行周期
【发布时间】:2021-04-02 15:39:39
【问题描述】:

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

PC -> 三月

MDR -> 红外

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

【问题讨论】:

  • 自从您提出问题后,您还没有回来...对下面的答案有任何反馈吗?
  • 您能留下一些反馈吗?任何事物?我的回答没有用吗?

标签: little-man-computer


【解决方案1】:

首先,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 部分总是相同的——我更喜欢写相反方向的赋值:

  • 三月
  • MDR
  • 红外
  • PC

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

执行步骤

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

  • BR(也叫BRA):

    PC

  • BRP:

    如果未设置 N:
    PC

  • BRZ:

    如果设置了 Z 标志:
    PC

  • COB:

    程序执行停止。在外部用户触发运行之前,不会有更多的 fetch-execution 循环。

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

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

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 2013-08-15
    • 2019-10-06
    • 2014-07-26
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多