一、
1、ARM 共有37个32位的寄存器,其中:31个通用寄存器,6个状态寄存器。
2、这些寄存器不能同时被访问,ARM的工作状态和运行模式决定了哪些集训器可以访问哪些不能被访问。
3、但,任何时候:15个通用寄存器 R0~R14 、 程序计数器PC 和 一个状态寄存器都是可以被访问的。
二、
1、ARM 状态下的通用寄存器和程序计数器
R0 ~ R12 ,13个
R8_fiq ~ R14_fiq ,7个
R13、R13_svc 、R13_abt、R13_irq、R13_und ,5个
R14、R14_svc、R14_abt、R14_irq、R14_und,5个
R15
13+7+10+1 = 31
2、ARM状态下的程序状态寄存器
三、寄存器分组
1、不分组寄存器(不同工作模式下,他们都可以用)
R0~R7
2、分组寄存器(不同工作模式下,他们可能不一样)
R8~R14
分组寄存器中的几个特殊寄存器
(1)fiq 快速中断模式下,全部使用独立的分组寄存器
(2)R13 用作 堆栈指针 sp
(3)R14 用作子程序链接寄存器,LR(link register)用来指向函数的返回地址
R13 和 R14 不同工作模式下各不相同
3、程序计数器 R15 PC
四、状态寄存器 :CPSR 和 SPSR
1、ARM 所有工作模式下都可以访问程序状态寄存器CPSR。CPSR 包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息
2、SPSR 用于在异常模式下保存当前CPSR的值,为了方便在异常返回后,恢复异常发生时的工作状态
图见:
ARM的状态寄存器 只使用了32位中的12位,他们分别是: 低位的8个控制位(5个模式位+T+F+I)和高位的4个条件码标志位(N+Z+C+V)