x86和ARM里的地址空间
文章目录
- 一、x86
- 1.1.x86的地址空间
- 1.2.复杂指令集计算机
- 二、ARM
- 2.1.ARM的地址空间
- 2.2.精简指令集计算机
一、x86
1.1.x86的地址空间
在 x86 架构的 CPU 里,内存空间和 IO 空间是不一样的,如果需要访问相同的地址时,使用不同的指令区分内存空间或是 IO 空间,如下图所示:使用 MOV 指令,意味着 CPU 寻到的地址是内存空间;使用 IN AL 指令,寻到的地址是 IO 空间。
1.2.复杂指令集计算机
x86 属于复杂指令集计算机,也叫 CISC(Complex Instruction Set Computing),它所使用的指令比较复杂,例如某些复杂的指令,它会通过“微程序”来实现的。如下图所示,想要计算 a * b,将运算结果存放在变量 a 里面,计算步骤和下面文章的 RISC 指令的四个步骤一样:
- 读内存 a
- 读内存 b
- 计算 a * b
- 把结果写入内存 a
但是对于程序员来说,程序员看不见“微程序”,看起来就像使用了一条指令就能够达到目标。
二、ARM
2.1.ARM的地址空间
在 CPU 的角度上看,内存和其他的外设地址是在同一个地址空间里面,因此它的访问方法是一样的,CPU 只管发送一个地址交给内存控制器,再由内存控制器找到该内存所在的区域。
2.2.精简指令集计算机
ARM 芯片属于精简指令集计算机,也叫 RISC(Reduced Instruction Set Computing),它所用的指令比较简单:
- 对内存只有读写指令
- 对于数据的运算是在 CPU 内部实现
- 使用 RISC 指令的 CPU 复杂度小一点,易于设计
如下图所示,想要计算 a * b,将运算结果存放在变量 a 里面,在 RISC 指令中要使用 4 条汇编指令:
- 读内存 a
- 读内存 b
- 计算 a * b
- 把结果写入内存 a