ARM内部寄存器
文章目录
- 一、介绍
- 二、CPU 的寄存器
- 2.1.R0 ~ R15
- 2.2.程序状态寄存器(M3 / M4)
- 2.3.程序状态寄存器(A7)
一、介绍
CPU内部的寄存器是超高速、容量极小的临时存储单元,专用于存放当前正在执行的指令和运算数据。CPU 访问内部的寄存器时,不需要寻址,直接进行访问。CPU 计算的时候,在某个内存将变量读进来,做运算,再写回去,读进来和做运算的操作,实际上是将变量的值,读到CPU 内部的寄存器里面进行保存和运算。
二、CPU 的寄存器
2.1.R0 ~ R15
如下图所示,ALU 是逻辑运算单元,R0 ~ R15 是 CPU 内部的寄存器,R0 ~ R12 这 13 个寄存器是通用的寄存器,另外 3 个寄存器有别的用途:
- R13:SP(Stack Pointer),栈指针,永远指着栈这个储物区最顶上的那个位置,该指针有两个实体:SP_process 和 SP_main,一般使用 SP_main,运行 RTOS 时使用 SP_process
- R14:LR(Link Register),用来保存返回地址的寄存器
- R15:PC(Program Counter),程序计数器,表示当前指令地址,写入新址即可跳转
下面展开说明一下 R15:R15(PC)里面存放着 CPU 接下来要执行的那条指令在内存中的地址
- 取指令:CPU根据 R15 里记录的地址,从内存中取出对应的指令
- 执行指令:CPU执行这条指令
- 自动更新:执行完后,R15里的地址会自动增加,指向下一条指令的地址。这样,程序就能一条接一条地顺序执行下去
- 跳转:当遇到条件判断、循环或者函数调用时,执行跳转指令会直接改变 R15 里的地址,让 CPU 跳到新的地方去执行,从而实现复杂的程序逻辑
2.2.程序状态寄存器(M3 / M4)
CPU 内部除了 16 个寄存器之外,还有一个程序状态寄存器(PSR),简单来说,PSR(程序状态寄存器)是 CPU 的“状态仪表盘”,它用一个寄存器记录了 CPU 刚刚执行完操作后的各种关键状态。例如,有两个数进行比较,比较的结果就存放在 PSR 里面。
xPSR 的 x 是一个可修改的值,实际上对应 3 个寄存器:
- APSR:Application PSR,应用 PSR
- IPSR:Interrupt PSR,中断 PSR
- EPSR:Exectution PSR,执行 PSR
下面表格是 xPSR ,32 个位里,三个寄存器相应的功能位相互错开。对于访问这三个寄存器,可以单独访问:
- MRS R0, APSR ;读 APSR
- MRS R0, IPSR ;读 IPSR
- MSR APSR, R0 ;写 APSR
也可以一次性访问:
- MRS R0, PSR ;读组合程序状态
- MSR PSR, R0 ;写组合程序状态
2.3.程序状态寄存器(A7)
A7 内核的程序状态寄存器成为当前程序状态寄存器,它里面的内容和 M3 / M4 内核的大差不差
下图是 A7 的程序状态寄存器:
为了提高效率,A7 内核的 CPU 有多种工作模式,有用户模式、系统模式、快中断模式、中断模式等等,例如,在快中断模式下,它有自己专用的寄存器 R8 ~ R14, 这样不会影响到其他寄存器的工作,同时又可以处理中断,这样就可以提高中断的效率。