【问题标题】:Are CPU general purpose registers usually memory mapped?CPU通用寄存器通常是内存映射的吗?
【发布时间】:2019-02-17 20:42:31
【问题描述】:

我对内存映射和内存映射 I/O 感到困惑。 通用寄存器,例如ARM架构中的r0、r1等,一般是内存映射的吗?

【问题讨论】:

  • 内存映射寄存器在 ARM 平台上很常见,因为它们与设备相关。在 x86 上,有一个可编程 I/O 的概念。它最初有两种类型的公共汽车(现在仍然有?)。比较 Von NeumannHarvard。从概念上讲,与程序存储器(指令或数据)相比,您可以为 I/O 使用第三条总线。您需要使用备用总线的 CPU 指令。 ARM 还有一些外围设备/设备使用的带有mcrmrc 的“协处理器”指令。

标签: assembly arm cpu-registers memory-mapping


【解决方案1】:

不,这些寄存器在实际 CPU(或多核 CPU 的 CPU 内核)内。您不能通过加载或存储到任何内存地址来访问它们。

内存映射寄存器是您通过地址或指针访问的东西(在具有指针的语言中)。 I/O 设备通常具有内存映射寄存器,您可以在其中写入或读取特定地址以设置或获取信息或数据。换句话说,它们就像任何其他内存(例如 RAM)一样被访问。


如 cmets 中所述,确实存在具有内存映射 CPU 寄存器的 CPU。它们几乎都是在 1970 年代设计的,现在已成为历史的一部分。如今,您遇到带有内存映射寄存器的主流 CPU(不是微控制器)的机会微乎其微。

一些微控制器架构仍然使用内存映射寄存器,包括像 8051 这样的旧设计,甚至像 PIC microcontrolersAVR 这样的一些更新的设计(一个 8 位 RISC 和 32 个 8 位寄存器)。 AVR MCU 带有至少 128 字节的内部 SRAM,其中低 32 字节也是寄存器文件。

对于 ARM,ARM 架构确实没有具有内存映射的 CPU 寄存器。外围设备,包括与 CPU 位于同一 SoC 上的外围设备,是另一回事:I/O 寄存器根本不是一回事,因为除了加载或存储之外,它们也不能通过寄存器编号作为指令的操作数访问。 (甚至不在内核内部运行您的指令。)

【讨论】:

  • 我同意这个答案。根据我对数十种 CPU 架构的经验,内存映射寄存器非常少见。 PDP-11 有它们,TI-9900 也有,但没有其他人想到。请注意,这两种架构都来自 1970 年代。
  • 还有 8 位 PIC 设备,它们的 RAM 非常少,以至于从程序员的角度来看,通常所有的 RAM 都被视为寄存器。但这种寄存器和 RAM 之间缺乏明确区分的情况非常罕见。
  • 已经存在并且正在将通用处理器进行内存映射的处理器是的。手臂不是其中之一。所以我们可以看到 OP 的困惑。
  • 8051 也可以,不要认为它是 AVR,所以可能是 8051 但必须检查......是的,我希望这种功能至少是那个时代的东西对于通用处理器...
  • Mitch Alsup 的 My 66000 将寄存器映射到内存地址。虽然没有硬件实现,但 ISA 设计是现代的。 (我认为 ISA 仍然是 1.0 之前的版本。)
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 2011-12-31
  • 2020-11-05
  • 2018-01-14
相关资源
最近更新 更多