CPU的内存地址空间

本文是对王爽老师的《汇编语言》1.15节的个人总结。

一 具体内容

一个嵌入式系统或PC系统中,都会有各种各样的存储器,如下所示,
CPU的内存地址空间
这些存储器在物理上都是独立的,但在以下2点上都是相同的,

  • 都和CPU总线相连
  • CPU对他们进行读或写的时候都是通过控制总线发出内存读写命令

也就是说,CPU在操控它们的时候,把它们都当做内存来对待,把它们总的看作一个由若干存储单元组成的逻辑存储器,这个逻辑存储器就是我们所说的内存地址空间。如下所示,
CPU的内存地址空间
每个独立的物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。CPU在这段地址空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

内存地址空间的大小受CPU地址总线宽度的限制。32位的地址总线宽度,可以寻址的最大内存地址空间是4GB,也就是可以定位4G个内存单元(一个内存单元是一个字节)。

我们基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个内存单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。

二 例子解释

假设我们有一个CPU,其地址总线宽度是3(也就是有3根地址线),连接了3个设备A、B和C。如下所示,
CPU的内存地址空间
其中,

  • A设备有2字节的存储空间,需要占用CPU2字节地址空间
  • B设备有3字节的存储空间,需要占用CPU3字节地址空间
  • C设备有3字节的存储空间,需要占用CPU3字节地址空间

我们从CPU的角度去看,CPU有3根地址线,那么其可寻址的内存地址空间是8字节,那么对应于A、B和C设备来说,

  • CPU地址0X0 ~ 0X1的2字节空间是对应A设备的地址空间
  • CPU地址0X2 ~ 0x4的3字节空间是对应B设备的地址空间
  • CPU地址0X5 ~ 0X7的3字节空间是对应C设备的地址空间

如果CPU想读取设备B存储空间中的第1个字节(前面有个第0字节),那么CPU需要在地址线上写入3来选中设备B中的这个内存单元,然后通过控制总线让设备B把自身存储空间中的第一个字节中的值通过地址线发给CPU。

ps:可能会对上图有所疑惑,为啥左侧是3根线,右侧是8根线,可以对照一下数电里学的三-八译码器,原理一样的。

如果有写的不对的地方,希望能留言指正,谢谢阅读。