为什么将 Mem[MA] 放在 MB 中然后从 MB 复制到 IR 而不是直接从 Mem[MA] 到 IR?

Why place of Mem[MA] in MB then copy from MB to IR rather than going straight from Mem[MA] to IR?

在fetch-execute循环的fetch阶段,为什么地址在MA(内存地址寄存器)的cell的内容放在MB(内存缓冲区)然后复制到IR(指令寄存器),而不是将MA地址的内容直接放在IR中?

理论上,可以将取指内存数据直接发送到 IR(或同时发送到 MB 和 IR)——这需要额外的硬件:电线和多路复用器。

您可能会注意到该体系结构(取决于它是哪个体系结构)使用很少(一个或两个)总线,这将有效地添加另一条总线。所以,我认为我们只能说简单就是原因。在处理器如此简单的时代,集成电路的晶体管数量非常有限。

如今,为了提高效率,即使是简单的处理器也会将指令(通常是高速缓存)内存与数据(通常是高速缓存)内存分开。这种独立性实现了许多改进。 MIPS,甚至非流水线单周期处理器,例如:

首先,PC(程序计数器)寄存器在取指令方面取代了 MA,IR 取代了 MB(就像你建议的那样直接加载到该寄存器),但我们还要注意IR 可以从一个真正的寄存器减少到输出在周期内稳定的线,因此可以直接由解码单元处理。 (稳定性是通过不与数据存储器硬件共享指令存储器硬件获得的;而只有一个存储器接口,数据必须被复制并存储在某个地方,这样接口就可以为代码和数据共享。)

这既节省了您所指的周期:将数据从 MB 传输到 IR,又节省了首先在 MB 寄存器中捕获数据之前的周期。 (一般来说,注册一些数据是需要一个周期的,所以如果不用注册就可以送线就好了,其他因素都一样。)

(同样取决于您正在查看的体系结构,MIPS 上的 PC 使用专用的增量单元(加法器)而不是尝试共享主 ALU and/or 用于该增量的总线 — 这也可能节省一两个周期。)

其次,与此同时,数据内存可以 运行 与指令内存(一个不错的胜利)同时执行从内存加载数据或将数据存储到内存,同时获取下一条指令。数据端也放弃了MB寄存器作为临时停放地,而是可以直接将内存数据加载到处理器寄存器(加载指令指定的寄存器)中。

拥有两个专用存储器创造了一种独立性,减少了对寄存器捕获的需求,同时还允许并行性,当然需要更多的设计硬件。