参考:<ARM架构与编程> 韦东山

初探ARM

一、RISC与CISC对比

1、RISC指令集介绍

ARM芯片属于精简指令集计算机(RISC:Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:
① 对内存只有读、写指令
② 对于数据的运算是在CPU内部实现
③ 使用RISC指令的CPU复杂度小一点,易于设计

2、CISC指令集介绍

x86属于复杂指令集计算机(CISC:Complex Instruction SetComputing),它所用的指令比较复杂,比如某些复杂的指令,它是通过“微程序”来实现的。

3、执行指令时的差别

arm ESR解析 arm risc_微程序


对于上图所示的乘法运算a = a * b,

在RISC中要使用4条汇编指令:

① 读内存a

② 读内存b

③ 计算a*b

④ 把结果写入内存

而在CISC指令集中执行乘法指令时,实际上会去执行一个“微程序”,
在“微程序”里,
一样是去执行这4不操作:
① 读内存a
② 读内存b
③ 计算a*b
④ 把结果写入内存
但是对于程序员来说,他看不到“微程序”,他好像用一条指令就搞定了这一切

总结:

  1. RISC-V 和 ARM 都使用加载-存储架构。意思是数据从内存中加载,在CPU中处理,然后返回到内存中。
  2. CISC的指令能力强,单多数指令使用率低却增加了CPU的复杂度,指令是可变长格式;
  3. RISC的指令大部分为单周期指令,指令长度固定,操作寄存器,对于内存只有Load/Store操作
  4. CISC支持多种寻址方式;RISC支持的寻址方式
  5. CISC通过微程序控制技术实现;
  6. RISC增加了通用寄存器,硬布线逻辑控制为主,采用流水线
  7. CISC的研制周期长
  8. 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;  // 读寄存器