【问题标题】:MDR, MAR Registers, in Relation to Assembly Language与汇编语言相关的 MDR、MAR 寄存器
【发布时间】:2013-12-12 16:25:36
【问题描述】:

过去几周我一直在阅读有关汇编编程和计算机体系结构的内容,但我遇到了几个我似乎无法找到答案的问题。

在阅读 CPU 构建等内容时,您会了解 MAR 和 MDR 寄存器,以及它们如何控制内存和 CPU 之间的数据流。

另外,在汇编语言中(这里指IA-32),我们了解到x86架构有8个通用寄存器(EAX、ESP、EDI等)、6个段寄存器和2个控制寄存器(1个标志寄存器和指令指针)。总共有 16 个寄存器。

汇编语言指南中提到的寄存器都没有提到 MDR 和 MAR。

问题如下:

MAR / MDR 如何适应汇编语言的寄存器列表?

x86 实际上有超过 16 个寄存器吗?

ARM/MIPS 有多少个寄存器?

非常感谢您。

【问题讨论】:

  • 大部分是 x86 registers: MBR/MDR and instruction registers 的副本。我的回答集中在现代 x86 不能有单个 MDR/MAR 的事实,因为这对于具有许多加载和存储缓冲区的超标量流水线微体系结构没有意义。

标签: assembly x86 computer-architecture


【解决方案1】:

MAR/MDR 寄存器是一种特殊的实现技术,可用于 CPU 直接控制内存总线。因此,它们仅与简单处理器相关——您命名的所有处理器在 CPU 和内存之间都有缓存,因此要复杂得多。

然而,要理解的关键是芯片支持的汇编/机器语言只是一种语言。很少有 CPU 直接执行该语言——大多数都涉及某种解释器或翻译器,它们将指令分解为更简单的执行步骤。与实际实现汇编语言的 CPU 最接近的是早期 MIPS 处理器,这是 RISC 设计理念的一部分。但即便如此,后来的版本也开始改变了。

  1. MAR / MDR 如何适应汇编语言的寄存器列表?

他们没有。对于诸如 6800(内部使用 MAR/MDR)之类的处理器,它们不能直接从汇编语言中访问。相反,这种类型的处理器使用微码指令来实现汇编指令,这些微码指令将数据移入和移出 MAR、MDR 和其他寄存器(A、B、X 和 S,在汇编代码中可见)。 8088 可能使用了相同的技术——8086 必然更复杂,因为它具有 16 位数据总线,但仍包含 8 位指令。

  1. x86 实际上有超过 16 个寄存器吗?

最新的 x86 处理器使用寄存器重命名(其中机器指令被即时转换为微指令并可能重新排序),因此具有更多实际的硬件寄存器以允许并行处理更多指令。

  1. ARM/MIPS 有多少个寄存器?

原来的 ARM 有 16 个(包括 PC),而原来的 MIPS 有 31 个(加上 PC)。后来的版本增加了浮点寄存器。 ARM 此外还有一些“影子”寄存器(用于处理中断的备用寄存器),并且两者都有 MSR 寄存器(与“普通”寄存器不同——您不将它们用于计算,而是用于控制事物) .

【讨论】:

  • ARM 的新 V8 提供了 31 个通用寄存器。
【解决方案2】:

尝试联系this。 它有点老了,但它很好地解释了处理器的基本内部结构。

【讨论】:

  • 你的“这个”链接被我的广告拦截器屏蔽了……如果你要引用一本书,至少要给出书名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2018-08-26
  • 1970-01-01
  • 2021-03-25
  • 2018-01-10
  • 2012-01-19
相关资源
最近更新 更多