37个通用寄存器示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gxs2q6vS-1635731778473)(en-resource://database/963:1)]
1.每种模式下看到的寄存器不一样 每种模式下最多看到18个寄存器 其他的寄存器名字相同但是当前模式看不见。
2.影子寄存器。如图的r14在arm中有6个r14(也叫sp)的寄存器,每种特定处理器模式下只有一个r14可以被看到,这种设计叫影子寄存器(banked register)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djGVeYNm-1635731778480)(en-resource://database/962:1)]
- ARM共有37个寄存器,都是32位长度
- 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。
CPSR 程序状态寄存器
重要的 判断 程序状态的 具体的32位
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZ7RDR6c-1635731778486)(en-resource://database/964:1)]
- 条件位:
N = Negative result from ALU
Z = Zero result from ALU
C = ALU operation Carried out
V = ALU operation oVerflowed - Q 位:
仅ARM 5TE/J架构支持
指示饱和状态 - J 位
仅ARM 5TE/J架构支持 - J = 1: 处理器处于Jazelle状态
- 中断禁止位:
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ. - T Bit
仅ARM xT架构支持
T = 0: 处理器处于 ARM 状态
T = 1: 处理器处于 Thumb 状态 - Mode位:
处理器模式位 - 对应七种工作模式
补充说明:
- CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)
- CPSR中的I、F位和开中断、关中断有关
- CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置。
PC(r15只能是r15) 程序控制寄存器
- PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)
- 整个CPU中只有一个PC(CPSR也只有一个,但SPSR有5个)。
SPSR:程序状态保存寄存器
SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
SPSR用来进行异常处理,有以下功能:
- 保存ALU中的当前操作信息。
- 控制允许和禁止中断。
- 设置处理器的运行模式。