ARM指令集
ARM支持三种指令集:
- ARM指令集:32位指令集(每个指令通过32位表示,即机器码为4字节),比较庞大和复杂
- Thumb指令集:16位指令集,指令更精简,但是代码密度高,且性能更低
- cortex-A系列及以上的处理器支持Thumb-2指令集,16和32位混合指令集
CPU组成
- ALU单元:运算器
- 控制器
- CPU内存寄存器
- CPU内部总线(控制、数据、地址)
ARM三级流水线
ARM处理器模式
不同的ARM系列模式不同,Cortex-M系列有7种模式、Cortex-A系列有9种模式
模式 | 功能 |
---|---|
USER | 大部分模式运行时的非特权模式 |
FIQ | 进入FIQ中断异常 |
IRQ | 进入IRQ中断异常 |
SVC | 超级特权模式,管理调用指令或者reset的时候 |
… | … |
除了user模式其余的都是特权模式
ARM寄存器介绍
arm寄存器(ARMv7):
ARM处理器一般共有37个寄存器,包括31个通用寄存器和6个状态寄存器。
其中R0-R12除了FIQ模式自己独有(R8-R12)寄存器外所有ARM模式下共享,PC和APSR\CPSR也是所有模式共享,使用ARM指令集R0-R12都能访问,使用Thumb只能访问R0-R7寄存器
- R0-R11,12个寄存器为通用寄存器
- R12(FP),指向帧底
- R13(SP),指向栈顶
- R14(LR),连接寄存器
- R15(PC),程序计数器,总是指向下面要运行的两条指令的地址,即当前指令地址+8
- APSR\CPSR,程序状态寄存器,在USER模式下叫APSR,应用程序寄存器,在其他模式下叫CPSR,叫当前程序寄存器
- SPSR,存储程序状态寄存器,保存中断前的CPSR寄存器
- CPSR程序状态寄存器,他其实就是当前运行的的ARM指令
N: 当两个表示的有符号整数运算时,1表示运算结果为负数,0表示结果为正或零。
Z:1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。
C:进位置标志位
GE[3:0]:SIMD指令使用。也不知道是啥
E:大端模式还是小端模式
A:是否禁用掉abort模式
I:1 表示禁止外部(硬件)中断(IRQ)
F:1 表示禁止快速中断(FIQ)
T:1表示为thumb状态0为arm状态
M[4:0]:用来设置处理器的工作模式,即上面介绍过的USER、FIQ等。