手册:ARM Architecture Reference Manual.pdf
章节:Programmers’ Model-->A2.3 Registers
ARM处理器总共有37个寄存器:
1、31个通用寄存器
2、6个程序状态寄存器
---------------------------------------
1、31个通用寄存器:
R0-R14共15个寄存器,加上PC指针共16个寄存器。
注意有后缀的寄存器,例如:R13_<mode>
R13_svc 表示SVC模式下面的R13寄存器。同理其他带后缀的寄存器。
再来把各种模式下的寄存器数一遍。通用寄存器共31个。
2、程序状态寄存器:
CPSR加上带后缀的共6个程序状态寄存器。
-------------------------------------------------------------
R0-R15被划分为三类:
1、不分组寄存器,R0-R7,不管在什么工作模式下面,用的是同一个寄存器。
2、分组寄存器,R8-R14,不同工作模式下面,用的可能是不同的寄存器。
3、PC指针,Register 15,R15,即程序计数器。
-----------------------------------------------------
在通用寄存器下面,有3个特殊的寄存器:
1、R13 用来充当SP堆栈指针。在程序中R13通常用来充当堆栈指针。
2、R14用来充当链接寄存器LR。有两个特殊的功能:
在每种工作模式下,保存函数的返回地址。
当程序发生异常时,比如中断发生时,去执行中断处理函数,中断处理函数执行完成,返回地址也是被保存在R14中。
3、R15程序计数器,PC指针。
------------------------------------------------------------
程序状态寄存器: 手册 A2.5Program status registers
ARM所有工作模式下都可以访问程序状态寄存器寄存器CPSR。
CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。
CPSR在每种"异常模式"下都有一个对应的
物理寄存器——程序状态保存寄存器
SPSR。当异常出现时,SPSR用于保存
CPSR的值,以便异常返回后恢复异常发生时的工作状态。
格式,意义:
比较重要的几个字段:
N Z I F M
N:比较两个数字大小时
a-b 如果a<b 结果为负数,则N=1
如果a>b,则N=0
Z: a-b ,如果a==b 则 Z=1,否则为0
I:如果为1,不能产生普通中断
F:如果为1,不能产生快速中断
M:0 1 2 3 4 ,共占了5位,表明处理器不能的工作模式,
想知道处理器现在的工作模式就访问CPSR寄存器,如果M位是10000,则表示为User模式
也可以设置M位,改为System模式,则把M设置为11111