这儿特别要留意差异的是ARM本身寄存器和它的一些外设的寄存器的差异。
ARM本身是一致架构的,也就意味着37个寄存器不管在哪个公司的芯片里边都会呈现。可是各家公司会对ARM进行外设的扩展,所以就呈现了很多外设寄存器,必定要与这37个寄存器差异开来!!!
1、备份寄存器(R8-R14)
关于R8-R12来说,除在快速中止形式下,每个形式对应相同物理寄存器,所以在FIQ形式下可不必维护和康复中止现场。
关于R13-R14来说,每个寄存器对应6个不同的物理寄存器,其间一个是用户形式和体系形式共用的。
寄存器R13常用做栈指针SP,除用户和体系形式外,其他形式在运用时的姓名构成为R13_。
寄存器R14又被称为衔接寄存器(LR),除用户和体系形式外,其他形式在运用时的姓名构成为 R14_。
R14有下面两种特别用处:
A、每个处理器形式自己的物理R14中寄存在当时子程序的回来地址。当经过BL或BLX指令调用子程序时,R14被设置成该子程序的回来地址。
B、当反常中止产生时,该反常形式下的R14被设置成保存该形式根据PC的回来地址,关于有些反常形式,R14的值有或许与将回来的地址有个常数的偏移量,不同形式偏移量还有所不同(在ARM 的反常处理里有具体介绍)。
2、不分组寄存器(R0-R7)
不分组也便是说说,在一切的处理器形式下指的都时同一物理寄存器。在反常中止形成处理器形式切换时,因为不同的处理器形式运用一个姓名相同的物理寄存器,便是运用的同一个寄存器,这样或许形成寄存器中数据被损坏,所以在进行形式切换时有必要加以维护。
3、程序计数器R15
关于用户来说,尽量防止运用STR/STM指令来保存R15的值。当成功向R15写入一个地址数值时,程序将跳转到该地址履行。
在ARM状况下指令总是字对齐的,所以PC的PC[1:0]位恒为零,在想PC写入地址时必定要留意将PC[1:0]设为零。
ARM选用的是3级流水线结构,所以PC指向的是当时履行指令的下两条指令,PC-8为当时指令地址。
4、程序状况寄存器
CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。一起除了用户和体系形式以外,每中处理器形式下都有一个专用的物理状况寄存器,称为 SPSR(备份程序状况寄存器)。当特定的反常中止产生时,这个寄存器用于寄存当时程序状况寄存器的内容。当在用户形式和体系形式中拜访SPSR,将会产生不行预知的成果。
CPSR和SPSR的格局相同,如下:
0:M0
1:M1
2:M2
3:M3
4:M4
5:T(=1 Thumb履行)
6:F(=1是制止)
7:I(=1是制止)
留意:M0~M4并不是一切的组合都界说了有用的处理形式,假如过错设置,将会引起无法意料的过错。
27:Q 在ARM V5的E系列处理器中,CPSR的bit[27]称为q标识位,首要用于指示增强的dsp指令是否产生了溢出。相同的spsr的bit[27]位也称为q 标识位,用于在反常中止产生时保存和康复CPSR中的Q标识位。
在ARM V5曾经的版别及ARM V5的非E系列的处理器中,Q标识位没有被界说
28:V 关于加减运算指令,当操作数和运算成果为二进制的补码表明的带符号数时,V=1表明符号为溢出;一般其他指令不影响V位。
关于其他指令,V统常不产生改变。
29:C 下面分四种状况评论C的设置办法:
在加法指令中(包括比较指令CMN),当成果产生了进位,则C=1,表明无符号运算产生上溢出;其他状况C=0。
在减法指令中(包括减法指令CMP),当运算中产生借位,则C=0,表明无符号运管用产生下溢出;其他状况下C=1。
关于包括移位操作的非加减运算指令,C中包括最终一次移出位的数值。
关于其他非加减运算指令,C位的值一般不受影响。
30:Z z=”1表明运算的成果为零”;z=0表明运算的成果不为零。关于CMP指令,Z=1表明进行比较的两个数巨细持平。
31:N 当两个表明的有符号整数运算时,n=1表明运算成果为负数,n=0表明成果为正书或零。
MRS:状况寄存器到通用寄存器的传送指令。
MSR:通用寄存器到状况寄存器的传送指令