对于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处取值到寄存器
&a
从&b处取值到寄存器
&b
计算a+b
把结果送到&a
这也对应了4调汇编指令。而对于x86,add的操作数有一个可以是存储器。
对于复杂指令,可以通过“微程序”来实现,一步搞定。
最后更新于10天前
int a,b; a = a + b;