ARM寄存器组织
寄存器
什么是寄存器?
寄存器是CPU内部的存储器。
特点
:
读写快,因为其在CPU内部。
没有地址
C语言中register
修饰的局部变量类型大小小于等于int型可以放在寄存器中。不可 &a
取地址。
因为ARM不支持浮点型运算符,因此只能用int以下的类型。局部变量在函数运行完后会销毁不占用寄存器资源。寄存器中没有地址。
通用寄存器
:想存什么就存什么
专用寄存器
:规定必须存什么,如PC寄存器只能存指令地址
控制寄存器
:用于切换CPU的模式
ARM寄存器
不同的工作模式下能用的寄存器不同。
ARM一共有40个寄存器。
专用寄存器
R15寄存器
:就是PC寄存器。
用于存放取址指令的地址。
取完后会自动加4.
能用程序指定要取的指令地址。
R14寄存器
:(LR)链接寄存器。
- 当在执行一个程序时遇到一个函数要跳转到这个函数所在的地址去时(跳转)。LR会自动保存跳转指令下一条指令的地址,待那个函数执行完后再将LR的值复制到PC寄存器即可。
- 在程序被异常中断时,LR会自动保存中断的下一条指令的地址,待异常处理结束再将LR的值复制到PC寄存器。
R13寄存器
:(SP)栈指针
栈就是一段内存,用来存放临时变量的。比如局部变量、参数、返回值等执行完会销毁的变量。
存放这些变量时通过指针来获取地址,这个指针就是栈指针。
存放一个变量后,栈指针后移,因此其在不停移动。
控制寄存器
CPSR
:用来控制切换工作模式的
共32位。
0~4位:模式位。用来控制工作模式。详见下图。
5位:状态位。ARM或Thumb指令状态。
6~7位:开关FRQ、IRQ模式
31位:N位。运算器中产生负数的结果该位自动置1,否则为0
30位:Z位。运算器中产生了0的结果该位自动置1,否则为0
29位:C位。针对无符号数,加法进位置1,减法借位置0
28位:V位。针对有符号数,加法符号位进位置1,减法符号位错位置0