参考:<ARM架构与编程> 韦东山
初探ARM
一、RISC与CISC对比
1、RISC指令集介绍
ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:
① 对内存只有读、写指令
② 对于数据的运算是在CPU内部实现
③ 使用RISC指令的CPU复杂度小一点,易于设计
2、CISC指令集介绍
x86属于复杂指令集计算机(CISC:Complex Instruction SetComputing),它所用的指令比较复杂,比如某些复杂的指令,它是通过“微程序”来实现的。
3、执行指令时的差别
对于上图所示的乘法运算a = a * b,
在RISC中要使用4条汇编指令:
① 读内存a
② 读内存b
③ 计算a*b
④ 把结果写入内存
而在CISC指令集中执行乘法指令时,实际上会去执行一个“微程序”,
在“微程序”里,
一样是去执行这4不操作:
① 读内存a
② 读内存b
③ 计算a*b
④ 把结果写入内存
但是对于程序员来说,他看不到“微程序”,他好像用一条指令就搞定了这一切
总结:
- RISC-V 和 ARM 都使用加载-存储架构。意思是数据从内存中加载,在CPU中处理,然后返回到内存中。
- CISC的指令能力强,单多数指令使用率低却增加了CPU的复杂度,指令是可变长格式;
- RISC的指令大部分为单周期指令,指令长度固定,操作寄存器,对于内存只有Load/Store操作
- CISC支持多种寻址方式;RISC支持的寻址方式
- CISC通过微程序控制技术实现;
- RISC增加了通用寄存器,硬布线逻辑控制为主,采用流水线
- CISC的研制周期长
- RISC优化编译,有效支持高级语言
二、ARM中对寄存器的访问
怎么访问寄存器?指针
//1.通过c变量来访问
int a;
unsigned int *p = &a; // p等于“a的地址”
*p = val; // 写这个地址,就是写a
val = *p; // 读这个地址,就是读a
//2.直接通过寄存器地址访问
unsigned int *p = 0x40010800; // p等于某个寄存器的地址
*p = val; // 写这个地址,也就是写这个寄存器
val = *p; // 读寄存器