MDR,MAR注册,与汇编语言有关

Mag*_*nus 2 x86 assembly computer-architecture

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

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

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

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

问题如下:

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

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

ARM/MIPS有多少个寄存器?

非常感谢你提前.

Chr*_*odd 5

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处理器使用寄存器重命名(其中机器指令在运行中被转换为uop并且可能被重新排序),因此具有更多的实际硬件寄存器以允许并行处理更多指令.

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

原来的ARM有16个(包括PC),而原来的MIPS有31个(加上PC).后来的版本添加了浮点寄存器.ARM还有一些"影子"寄存器(用于处理中断的备用寄存器),并且都有MSR寄存器(不像"普通"寄存器 - 你不用它们进行计算,而是用来控制事物) .