为什么内存位置也称为寄存器?

Why are memory locations also called registers?

在嵌入式系统和系统编程中,术语寄存器用于指代

  1. a CPU 微控制器内部的寄存器,例如ARM 微控制器中的 R1、R2、PC,以及
  2. 内存地址 space 内的某些 'special' 个位置。

术语 'register' 以这种方式超载背后是否有原因或历史?

两者都是寄存器,即具有特殊用途的一小块内存。 CPU 寄存器(自然)不是内存映射的,因为可以使用 CPU 指令访问它们。而 CPU 内核之外控制外围硬件的寄存器通常映射到特定地址。

简单地说,1. 和 2. 之间唯一真正的区别在于您访问它们的方式。但是有各种各样的寄存器:CPU 寄存器可以是与给定硬件相关的非常特殊的东西,不一定只是通用的 "accumulators" 用来保存程序计算的结果。

processor registers 的维基百科页面看起来非常适合阅读此主题。

从功能上讲,寄存器是一个可以存储值的元素(例如 D 型触发器或等效的多位数组)。

除了用于保存操作数和 ALU 计算结果的传统 CPU 寄存器外,还可以有 特殊功能寄存器 (片上或片外)专用用于其他目的。例如,实现串行端口的 UART 外设可能有一个寄存器来保存从其时钟导出波特率的除数,一个用于传出数据,一个用于接收数据,一个是模式设置的位图。

在具有内存映射的机器上I/O特殊功能寄存器出现在内存中space并通过内存访问指令访问(尽管有时有限制,例如只有特定的访问宽度是合法的)。相反,在 I/O 映射的 机器上,有专门的指令用于访问 I/O 端口地址,并且(至少在双用途外部总线上)指示访问是对内存还是 I/O space.

的控制信号

更令人困惑的是,有一些遗留处理器设计,如 8051,其中 CPU 寄存器也可以作为普通内存位置进行访问。在许多其他机器中,虽然 CPU 寄存器存储在寄存器文件而不是内存中,但它们在功能上在指令字的位域中具有 "addresses",它指定哪个寄存器是操作数或结果 - RISC带有编号寄存器的架构使这一点特别明显。

I/O 或 特殊功能寄存器 通常是 内存映射 但它们仍然是 寄存器 在某种意义上它们不是通用存储器,而是 I/O 外设控制和状态寄存器。

与内存映射随机存取 read/write 或只读存储器不同,寄存器通常具有定义的 power-on/reset 状态等特性,并且可能是 r/w、r/o,或 w/o 在单个位级别。此外,它们的值可能会独立于写入它们的任何值而改变,因为它们也可以由关联的外围设备写入;这通常是相互的——处理器在外围设备读取时写入,反之亦然;通常在位级别而不是字级别。一个地址可以引用两个寄存器,一个是只读的,另一个是只写的。