寄存器总览

手册: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

原文地址:https://www.cnblogs.com/zhangxuan/p/4862656.html