【发布时间】:2020-12-18 08:54:35
【问题描述】:
我在这里有点新,所以我想先弄清楚基础知识,所以我正在研究 MARIE 组装,我注意到 MAR 有时只是 PC 的值,但负 1,是否有背后的原因还是只是巧合?
现在查看它,我还注意到 IR 和 MBR 有时具有相同的值;为什么会这样?
【问题讨论】:
标签: assembly cpu-architecture marie
我在这里有点新,所以我想先弄清楚基础知识,所以我正在研究 MARIE 组装,我注意到 MAR 有时只是 PC 的值,但负 1,是否有背后的原因还是只是巧合?
现在查看它,我还注意到 IR 和 MBR 有时具有相同的值;为什么会这样?
【问题讨论】:
标签: assembly cpu-architecture marie
这不是巧合。您所看到的是(a)不同指令类型和(b)模拟器暂停显示这些寄存器的值的组合,可能在指令之间。
MAR(内存地址寄存器)是该处理器与内存就读取/加载或写入/存储位置进行通信的唯一方式。
MBR — 内存缓冲寄存器 — 用于保存在内存传输操作期间正在读取或写入的数据。
MAR 用于指令获取和任何数据加载或数据存储操作。
取指令序列涉及
处理器通过将 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。这些可能是缓存,然后统一到共享主内存。
(单独的内存称为Harvard architecture;像MARIE这样没有指令预取缓冲区或指令缓存的简单内存可以直接将PC用作MAR。如果PC在获取后更新到下一条指令,则可以获取使用 PC 作为 MAR 执行当前指令时的下一条指令。)
【讨论】: