地址空间

对于ARM处理器,访问寄存器的时候,如果使用的是C语言,使用指针去操作寄存器。

unsigned int *p = 0x40010800;

*p |= (1<<2) 

这种方式和读取一个变量没有差别。

在ARM架构里,内存、IO的操作是一样的。即内存和外设在同一个地址空间。

对于x86CPU来说,存储空间和IO是独立编址的,访问存储器和IO的指令不一样。

MOV  AX, [0x3D0]

IN   AL, [0x3D0]

对于同一个地址,访问的东西是不一样的。

对于ARM体系,举个例子,如果有个EMMC控制器,接着一个EMMC Flash,容量为4G。

CPU想去访问Flash,地址无法直接到这里,CPU地址空间和EMMC控制器的地址空间不一样。

ARM芯片是精简指令集计算机,指令比较简单,主要特点:

  • 对内存只有读写指令

  • 数据运算在CPU内部实现

  • CPU复杂度小一点,容易实现

比如说对于一个运算

RISC要这么几步

  • &a处取值到寄存器

  • &b处取值到寄存器

  • 计算a+b

  • 把结果送到&a

这也对应了4调汇编指令。而对于x86,add的操作数有一个可以是存储器。

对于复杂指令,可以通过“微程序”来实现,一步搞定。

最后更新于