1

我在这里有点新,所以我想先弄清楚基础知识,所以我正在研究 MARIE 组装,我注意到 MAR 有时只是 PC 的值,但为负 1,这背后有什么原因吗?这只是巧合吗?

现在查看它,我还注意到 IR 和 MBR 有时具有相同的值;为什么呢?

4

1 回答 1

3

这不是巧合。您所看到的是(a)不同指令类型和(b)模拟器暂停显示这些寄存器的值的组合,可能在指令之间。

MAR(内存地址寄存器)是该处理器与内存就读取/加载或写入/存储位置进行通信的唯一方式。

MBR — 内存缓冲寄存器 — 用于保存在内存传输操作期间正在读取或写入的数据。

MAR 既用于指令提取,也用于任何数据加载或数据存储操作。

取指令序列涉及

  • 三月 := 电脑
  • MBR := 内存[MAR]
  • 红外:= MBR

处理器通过将 PC 值复制到 MAR 并发出读取信号来获取指令——存储器通过读取该内存位置并将其内容放入 MBR 来响应。然后,处理器将 MBR 中的指令复制到 IR 中以进行指令解码。

在指令执行过程中,PC 前进,通常指向下一条指令。

如果一条指令不执行数据加载或数据存储操作(例如 SkipCond、Input、Output 的情况),那么在指令完成后,您将看到 MAR 保留了该指令的 PC,而 PC已经提前了,通常是 1。此外,IR 和 MBR 将保持相同的值 - 这是机器代码指令。MAR 和 MBR 反映指令取指。

但是,如果指令确实执行了数据加载或数据存储操作,那么在指令完成后,您将看到 MAR 保存数据存储器的地址,而 MBR 保存传输的数据值。这些指令仍然执行指令获取——如果您在执行这些指令期间在正确的时间点观察寄存器,您将看到 IR=MBR 和 MAR=PC,但作为完成这些指令的一部分,MAR 和 MBR被重用于数据存储器访问。


所有指令都是从内存中获取的,但有些指令还会进行数据加载/存储。

底线是 MAR 和 MBR 保持在最近的内存操作(无论是指令提取还是数据加载/存储)中使用的值,即使在该内存操作完成之后(直到它们被重新用于下一个指令提取)。


在其他一些处理器上,有一个单独的指令存储器和单独的数据存储器,因此实际上有两个 MAR 和两个 MBR,而 PC指令存储器的 MAR。这些可能是缓存,然后统一到共享主内存。

(单独的存储器称为哈佛架构;像MARIE这样没有指令预取缓冲区或指令缓存的简单架构可以直接将PC用作MAR。如果PC在获取后更新到下一条指令,则它可以在执行时获取下一条指令当前使用 PC 作为 MAR。)

于 2020-12-18T16:22:03.483 回答