37个32位寄存器
31个通用6个状况寄存器
ARM寄存器
ARM共有37个32位寄存器,其间31个为通用寄存器,6个为状况寄存器.这些寄存器不能被一起拜访,但在任何时候,通用寄存器R0~R14,程序计数器PC,一个或两个状况寄存器都是可拜访的.
通用寄存器
通用寄存器包含R0~R15,能够分为3类:
(1)未分组寄存器R0~R7
(2)分组寄存器R8~R14
(3)程序计数器PC(R15)
这两个寄存器看届时要特别灵敏
R13 一般用作椎栈指针SP
R14 用作子程序衔接寄存器(Link Register_LR) 也称为LR,指向函数的回来地址
反常形式才有SPSR ,SPSR实际上是CPSR的一个备份。反常来时,保存到SPSR,反常完毕SPSR在装到CPSR
CPSR/SPSR的结构:
N:当用两个补码一共的带符号数进行运算时,N=1一共运算的成果为负数;N=0一共运算的成果为正数或零;
Z:Z=1一共运算的成果为零;Z=0一共运算的成果为非零;
C:能够有4种方法设置C的值:
─加法运算(包含比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,不然C=0。─减法运算(包含比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,不然C=1。
─关于包含移位操作的非加/减运算指令,C为移出值的最终一位。
─关于其他的非加/减运算指令,C的值一般不改动。
V:能够有2种方法设置V的值:
─关于加/减法运算指令,当操作数和运算成果为二进制的补码一共的带符号数时,V=1一共符号位溢出。
─关于其他的非加/减运算指令,C的值一般不改动。
保存位[27 : 8]:当改动PSR中的条件码标志位或许操控位时,保存位不要被改动,在程序中也不要运用保存位来存储数据。保存位将用于ARM版别的扩展。
操控位[7 : 0]:PSR的低8位(包含I、F、T和M[4:0])称为操控位,当产生反常时这些位能够被改动。假如处理器运转特权形式,这些位也能够由程序修改。
I:外部(硬件)间断(IRQ)制止位。1制止 0答应
F:快速间断(FIQ)制止位。1制止 0答应
T:反映处理器的运转状况。
关于ARM体系结构v5及以上的版别的T系列处理器,当该位为1时,程序运转于Thumb状况,不然运转于ARM状况。关于ARM体系结构v5及以上的版别的非T系列处理器,当该位为1时,碑文下一条指令以引起为界说的指令反常;当该位为0时,一共运转于ARM状况。
运转形式位M[4 : 0]:M0、M1、M2、M3、M4是形式位。这些位决议了处理器的运转形式。详细意义如表2-2所示:
表2-2 运转形式位M[4:0]的详细意义
M[4:0] 处理器形式 可拜访的寄存器
0b10000 用户形式 PC,CPSR,R0-R14
0b10001 FIQ形式 PC,CPSR, SPSR_fiq,R14_fiq-R8_fiq, R7~R0
0b10010 IRQ形式 PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0
0b10011 管理形式 PC,CPSR, SPSR_svc,R14_svc,R13_svc,,R12~R0,
0b10111 间断形式 PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0,
0b11011 未界说形式 PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0,
0b11111 体系形式 PC,CPSR(ARM v4及以上版别), R14~R0
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
转载部分
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1.未分组寄存器R0~R7
在所有运转形式下,未分组寄存器都指向同一个物理寄存器,它们未被体系用作特别的用处.因此在间断或反常处理进行运转形式转化时,我们不同的处理器运转形式均运用相同的物理寄存器,所以或许形成寄存器中数据的损坏.
2.分组寄存器R8~R14
关于分组寄存器,它们每一次所拜访的物理寄存器都与当时处理器的运转形式有关.关于R8~R12来说,每个寄存器对应2个不同的物理寄存器,当运用FIQ(快速间断形式)时,拜访寄存器R8_fiq~R12_fiq;当运用除FIQ形式以外的其他形式时,拜访寄存器R8_usr~R12_usr.
关于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其间一个是用户形式与体系形式共用,别的5个物理寄存器对应其他5种不同的运转形式,并选用以下记号来委任不同的物理寄存器:
R13_
R14_
其间mode可为:usr,fiq,irq,svc,abt,und.
寄存器R13在ARM指令中常用作仓库指针,用户也可运用其他的寄存器作为仓库指针,而在Thumb指令拘押,某些指令强制性的要求运用R13作为仓库指针.
寄存器R13在ARM指令中常用作仓库指针,但这仅仅一种习惯用法,用户也可运用其他的寄存器作为仓库指针。而在Thumb指令拘押,某些指令强制性的要求运用R13作为仓库指针。
我们处理器的每种运转形式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种形式下的R13,使其指向该运转形式的栈空间。这
样,当程序的运转进入反常形式时,能够将需求维护的寄存器放入R13所指向的仓库,而当程序从反常形式回来时,则从对应的仓库中康复,选用这种方法能够确保反常产生后程序的正常碑文。
R14称为链接寄存器(Link Register),当碑文子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.
在每一种运转形式下,都可用R14保存子程序的回来地址,当用BL或BLX指令调用子程序时,将PC的当时值给R14,碑文完子程序后,又将R14的值回PC,即可完结子程序的调用回来。以上的描绘可用指令完结。
碑文以下恣意一条指令:
MOV PC, LR
BX LR
在子程序入口处运用以下指令将R14存入仓库:
STMFD SP!,{,LR}
对应的,运用以下指令能够完结子程序回来:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。
3,程序计数器PC(R15)
寄存器R15用作程序计数器(PC),在ARM状况下,位[1:0]为0,位[31:2]用于保存PC,在Thumb状况下,位[0]为0,位[31:1]用于保存PC.
我们ARM体系结构选用了多级流水线技能,关于ARM指令集而言,PC总是指向当时指令的下两条指令的地址,即PC的值为当时指令的地址值加8个字节
程序状况寄存器
4,寄存器R16
寄存器R16用作CPSR(Current
Program Status Register,当时程序状况寄存器),CPSR可在任何运转形式下被拜访,它包含条件标志位、间断制止位、当时处理器形式标志位,以及其他一些相关的操控和状况位。
每一种运转形式下又都有一个专用的物理状况寄存器,称为SPSR(Saved Program Status Register,备份的程序状况寄存器),当反常产生时,SPSR用于保存CPSR的当时值,从反常退出时则可由SPSR来康复CPSR。
我们用户形式和体系形式不属于反常形式,它们没有SPSR,当在这两种形式下拜访SPSR,成果是不知道的
1).条件码标志(condition code flags)
N,Z,C,V均为条件码标志位,它们的内容可被算术或逻辑运算的成果所改动,而且能够决议某条指令是否被碑文.
在ARM状况下,绝大多数的指令都是有条件碑文的,在Thumb状况下,仅有分支指令是有条件碑文的.
N(Number):当用两个补码一共的带符号数进行运转时,N=1一共运转成果为负,N=0一共运转成果为正或零
Z:(Zero):Z=1一共运算成果为零,Z=0一共运转成果非零
C:(Come)加法运算:当运算成果产生了进位时C=1,不然C=0
减法运算:当运算产生了借位,C=0不然C=1
关于包含移位操作的非加/减运算指令 ,C为移出值的最终一位
关于其他的非加/减运算指令C的值一般不改动
V:(oVerflow)关于加/减法运算指令,当操作数和运算成果为二进制的被码一共的带符注意力时,V=1一共符号位溢出.关于其他的非加/减运算指令V的值一般不改动
2).操控位
PSR的低8位(包含I,F,T和M[4:0])称为操控位,当产生反常时这些位能够被改动,假如处理器运转特权形式,这些位也能够由程序修改.
(1)间断制止位I,F
I=1 制止IRQ间断
F=1 制止FIQ间断
每一种运转形式下又都有一个专用的物理状况寄存器称为SPSR(Saved Program Status Register,备份的程序状况寄存器)当反常产生时,SPSR能够保存CPSR的当时值,从反常退出时则可由SPSR来康复CPSR.
我们用户形式和体系形式不属于反常形式,它们没有SPSR当在这两种形式下拜访SPSR时成果是不知道的
Thumb状况下程序能够直接拜访8个通用寄存器(R0~R7),程序计数器(PC),仓库指针(SP:StackPointer),链接寄存器(LP:Link Register)和CPSR,一起在每一种特权形式下都有一组SP,LR和SPSR.