![](https://i-blog.csdnimg.cn/blog_migrate/f0d074e4d242cdf7d7a579a8f7fe895d.png)
1> R13 --别名--> SP : The Stack Pointer(栈指针寄存器)
SP中存放的是栈的地址
![](https://i-blog.csdnimg.cn/blog_migrate/dfaaa39252419a2b31ffa1b6b629197b.png)
2> R14 --别名--> LR : The Linking Register (链接寄存器)
LR中存放的是程序的返回地址
![](https://i-blog.csdnimg.cn/blog_migrate/88b74ec48802c1c6660e31b6475d368c.png)
3> R15 --别名--> PC :The Program Counter (程序计数寄存器)
PC中存放的是当前取指指令的地址
![](https://i-blog.csdnimg.cn/blog_migrate/5d31f9267a61712b147d68636fbb1301.png)
4> CPSR : Current Program Stated Register 当前程序状态寄存器
存放的是当前程序的运行的状态。 比如:工作模式。
5> SPSR : Saved Program Stated Register 保存程序状态寄存器
用于对CPSR进行备份的
![](https://i-blog.csdnimg.cn/blog_migrate/d64b2045879927f58147884a83606fc2.png)
6> CPSR寄存器详解
![](https://i-blog.csdnimg.cn/blog_migrate/7ff1285588076b3f17babdbe73c61508.png)
N[31] : 指令的运算结果为负数,N位被自动置1,否则清0.
Z[30] : 指令的运算结果为零,Z位被自动置1,否则清0.
C[29] :
加法:产生进位,C位被自动置1,否则清0.
减法:产生借位,C位被自动清0,否则置1.
进位/借位:低32位向高32位进位或者借位。
两个64位数相加,需要拆分成两个32位数进行加法运算,
先算低32位,再算高32位,在进行高32位运算时需要考虑低32位是否有进位。
V[28] : 符号位发生变化,V位被自动置1,否则清0.
I[7] : IRQ屏蔽位
I = 0 不屏蔽IRQ中断
I = 1 屏蔽IRQ中断
F[6] : FIQ屏蔽位
F = 0 不屏蔽FIQ中断
F = 1 屏蔽FIQ中断
T[5] : 状态位T = 0 : ARM状态 --》执行ARM指令集
T = 1 : Thumb状态 ---》执行Thumb指令集
ARM指令集和Thumb指令集区别
ARM指令集:
每条指令占4个字节的空间
Thumb指令集:
每条指令占2个字节的空间
ARM指令集的功能性比Thumb指令集的功能更加完善。
Thumb指令集的指令的密度要比ARM指令集高。
M[4:0] : 模式位
10000 User mode;
10001 FIQ mode;
10011 SVC mode;
10111 Abort mode;
11011 Undfined mode;
11111 System mode;
10110 Monitor mode;
10010 IRQ
其他的保留