我正在研究计算机系统和操作系统,我一直对何时将内存地址传输到内存地址寄存器 (MAR) 感到困惑。当指令寄存器 (IR) 收到操作码指令和要执行操作的内存地址时,它是否必须先将此信息发送到 MAR,然后才能访问 IR 指向的内存位置?或者 IR 是否有足够的信息直接指向内存位置?为什么需要 MAR?
答案1
... 是否必须先将该信息发送到 MAR,然后才能访问 IR 指向的内存位置?
是的。这就是内存子系统的工作原理。
或者 IR 是否有足够的信息来直接指向内存位置?
您无法绕过 MAR。
根据特定指令和 CPU 架构,指令甚至可能不包含完整的内存地址。指令
可能仅包含相对偏移量(或索引),因此需要使用基址(即另一个寄存器(例如 PC)的内容)进行计算。
指令操作数可以将另一个寄存器的内容指定为内存地址。
为什么你需要 MAR?
它是一个用于保存来自地址总线的值的锁存器。
为了驱动存储设备的行线和列线,地址总线上的值不能保证在内存访问期间保持稳定。
因此需要从地址总线“捕获”该值。
请注意,IR 不是 CPU 中唯一需要访问主内存的寄存器。PC(程序计数器)指定下一条指令的内存位置。
请注意,CPU 并不是计算机中唯一可以访问主内存的组件。内存仲裁单元可能会授予其他设备(例如 DMA 控制器或总线主控器)对主内存的访问权限。
因此,您所设想的简单的 IR 到内存连接的功能将非常有限。