寄存器是什么
概念
寄存器是处理器内部的存储器,没有地址
作用
一般用于暂时存放参与运算的数据和运算结果
分类
包括通用寄存器、专用寄存器、控制寄存器
C语言中 register 关键词 定义变量
- 快快快!就是快!
- 不能取地址
- 局部变量
- 只能是整型不能浮点型
不同模式的寄存器使用
cortex-A多了监控模式,共原本37+新增3=40个寄存器
专用寄存器
R15(PC,Program Counter)——程序计数器
用于存储当前取址指令的地址
除了会自动改变以外,还可以通过汇编去人为更改
R14(LR,Link Register)——链接寄存器
一般有以下两种用途:
- 执行跳转指令(BL/BLX)时,LR会自动保存跳转指令下一条指令的地址程序需要返回时将LR的值复制到PC即可实现
- 产生异常时,对应异常模式下的LR会自动保存被异常打断的指令的下一条指令的地址,异常处理结束后将LR的值复制到PC可实现程序返回
R13(SP,Stack Pointer)——栈指针
用于存储当前模式下的栈顶地址
CPSR寄存器
CPSR(Current Program Status Register),当前程序状态寄存器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0PC6aHF-1669439675257)(…/00images/当前程序状态寄存器CPSR.png)]
CPSR寄存器分为四个域
- [31:24]为条件域用F表示
- [23:16]为状态域用S表示
- [15:8]为预留域用X表示
- [8:0]为控制域用C表示
Bit[4:0] 模式位
[10000] User
[10001] FIQ
[10010] IRQ
[10011] SVC
[10111] Abort
[11011] Undef
[11111] System
[10110] Monitor
Bit[5] 状态位(默认为ARM)
[0] ARM状态
[1] Thumb状态
Bit[6] FIQ禁止位
[0]开启FIQ
[1]禁止FIQ
Bit[7] IRQ禁止位
[0]开启IRQ
[1]禁止IRQ
Bit[28] 溢出标记
当运算器中进行加法运算且产生符号位进位时该位自动置1,否则为0
当运算器中进行减法运算且产生符号位借位时该位自动置0,否则为1
Bit[29] 进位或借位扩展
当运算器中进行加法运算且产生进位时该位自动置1,否则为0
当运算器中进行减法运算且产生借位时该位自动置0,否则为1
Bit[30] 零
当运算器中产生了0的结果该位自动置1,否则为0
Bit[31] 负数位
当运算器中产生了负数的结果该位自动置1,否则为0
xPSR寄存器
在cortex-M3中CPSR寄存器叫做xPSR寄存器(包括APSR应用,IPSR中断,EPSR执行)。