assembly - 与汇编语言相关的 MDR、MAR 寄存器

标签 assembly x86 cpu-architecture

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

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

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

汇编语言指南中提到的寄存器均未提及 MDR 和 MAR。

题目如下:

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

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

ARM/MIPS有多少个寄存器?

非常感谢您。

最佳答案

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 处理器使用寄存器重命名(其中机器指令被即时翻译成 uops 并可能重新排序),因此拥有更多的实际硬件寄存器以允许并行处理更多指令。

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

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

关于assembly - 与汇编语言相关的 MDR、MAR 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20548769/

相关文章:

architecture - 关于i7的分支预测

linux - 使用 Kdbg 调试汇编代码

algorithm - 如何打印二叉搜索树?

assembly - X86指令在实模式下关闭计算机?

x86 - 处理器如何处理条件?

x86 - 分支目标预测与分支预测结合?

assembly - 在 NASM 中声明常量绝对 64 位地址

assembly - 使用 Windows WinAPI 函数写入控制台 Unicode (UTF-16) 文本?

c - 过程链接表的用途是什么?

x86 - L1高速缓存 Controller 的顺序以处理来自CPU的内存请求