CPU 如何访问内存

C 语言把变量名和函数名都转换成了汇编语言里的标号,而汇编语言的标号,就是机器更好理解的符号。符号具体包括符号类型、符号名称和符号地址这几个属性。其中,符号地址是由一个叫链接器的东西生成的。

汇编语言的标号,就表示为一段内存地址的开始。例如:加载字指令 lw 指令,它会从一个地址指向的内存单元中,把数据加载到寄存器上;储存字指令 sw 指令则是跟 lw 指令相反,把寄存器里的数据存到特定内存单元当中。这些指令里源寄存器和立即数组成的数据,其实就叫内存地址。

结合这些信息,我们就能推出这个结论:CPU 正是通过内存地址来访问内存的。这个地址本质上是一个整数数据。而这个整数代表了一个内存单元的索引号,CPU 访问内存的时候,硬件的地址译码器会负责把索引号,转换成相应的地址信号和片选信号,帮助 CPU“寻路”,找到特定的内存单元位置。

比如上图中,CPU 发出了 0x00000004 地址,这时经过地址译码,访问的就不是某个内存单元了,而是系统寄存器;如果 CPU 发出的地址在 0xC0000000 到 0xE0000000 之间,就会访问到设备上的内存,而 CPU 发出的地址是 0x60000000 到 0xBFFFFFFF 之间和 0x100000000 到 0x19FFFFFFF 之间,才能访问到主存,也就是内存。还有一些地址并没有对应到具体的设备,即为无效地址,如果 CPU 访问了无效地址,就会得到无效数据或者收到硬件错误的反馈。现在,我们已经清楚地知道了,CPU 把一个整数数据当成地址,放在地址总线上,由地址译码器选择该地址正确索引的设备或者内存进行访问。从另一个角度看,数据在物理电路上,是由不同的电子信号的组合来表示的。正是有了这些电子信号组合,才能做到索引相应的设备和内存。CPU 通过什么访问内存,以及地址的本质是什么,我们已经找到答案了,用一句话概括就是:CPU 通过地址访问内存,地址的本质是整数数据,而整数数据的本质是电子信号的组合。

此文章为5月Day21学习笔记,内容来源于极客时间《计算机基础实战课》

猜你喜欢

转载自blog.csdn.net/qq_38526167/article/details/130837615