ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。
(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。
(2)6个状况寄存器:状况寄存器也是32位的寄存器,可是只运用了其间的12位。
1.通用寄存器
在ARM处理器的7种形式下都有一组对应的寄存器组。在恣意时间,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状况寄存器和PC。在所有的寄存器中,有些是各种形式下共用的同一个物理寄存器,有些是各种形式自己独立具有的物理寄存器。详细如表1-3所示。
在ARM处理器的7种形式下都有一组对应的寄存器组。在恣意时间,可见的寄存器组包括15个通用寄存器R0~R14、一个或两个状况寄存器和PC。在所有的寄存器中,有些是各种形式下共用的同一个物理寄存器,有些是各种形式自己独立具有的物理寄存器。详细如表1-3所示。
表1-3 ARM物理寄存器
用户形式
|
体系形式
|
特权形式
|
间断形式
|
未界说指令模
|
外部中止模
|
快速中止模
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R0
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R1
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R2
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R3
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R4
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R5
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R6
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
R7
|
R8
|
R8
|
R8
|
R8
|
R8
|
R8
|
R8_fiq
|
R9
|
R9
|
R9
|
R9
|
R9
|
R9
|
R9_fiq
|
R10
|
R10
|
R10
|
R10
|
R10
|
R10
|
R10_fiq
|
R11
|
R11
|
R11
|
R11
|
R11
|
R11
|
R11_fiq
|
R12
|
R12
|
R12
|
R12
|
R12
|
R12
|
R12_fiq
|
R13
|
R13
|
R13_svc
|
R13_abt
|
R13_und
|
R13_irq
|
R13_fiq
|
R14
|
R14
|
R14_svc
|
R14_abt
|
R14_und
|
R14_irq
|
R14_fiq
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
CPSR
|
CPSR
|
CPSR
|
CPSR
|
CPSR
|
CPSR
|
CPSR
|
|
|
SPSR_svc
|
SPSR_abt
|
SPSR_und
|
SPSR_irq
|
SPSR_fiq
|
通用寄存器一般又能够分为下面3类。
n 未备份寄存器:包括R0~R7。
n 备份寄存器:包括R8~R14。
n 程序计数器PC:即R15。
1)未备份寄存器R0~R7
关于每个未备份寄存器来说,在所有的处理器形式下指的都是同一个物理寄存器,在反常中止形成处理器形式切换时,我们不同的处理器形式运用相同的物理寄存器,或许形成寄存器中数据被损坏。未备份寄存器没有被体系用于特别的用处,任何可选用通用寄存器的运用场合都能够运用未备份寄存器。
2)备份寄存器R8~R14
备份寄存器中的每个寄存器对应于两个不同的物理寄存器。例如,当运用快速中止形式下的寄存器时,寄存器R8和寄存器R9分别记做R8_fiq和 R9_fiq,当运用用户形式下的寄存器时,寄存器R8和寄存器R9分别记做R8_usr和R9_usr等。在这两种情况下运用的是不同的物理寄存器,体系没有将这几个寄存器用于任何的特别用处。中止处理十分简略,只是运用R8~R14寄存器时,FIQ处理程序能够不用碑文保存和康复中止现场的指令,然后能够使中止处理进程很敏捷。
关于备份寄存器R13、R14来说,每个寄存器对应于6个不同的物理寄存器,其间的一个是用户形式和体系形式共用的,别的的5个则对应于其他5种处理器形式,选用下面的方法来标识。
R13_,
其间是usr、svc、abt、und、irq和fiq的一种。
R13一般用做仓库指针。每一种形式都具有自己的物理R13。程序初始化R13,使其指向该形式专用的栈地址。当进入该形式时,能够将需求运用的寄存器保存在R13所指的栈中,当退出该形式时,将保存在R13所指的栈中的寄存器值弹出。这样就完成了程序的现场维护。
寄存器R14又被称为衔接寄存器(LR),在ARM中有下面两种特别用处。
① 每一种处理器形式在自己的物理R14中寄存当时子程序的回来地址。当经过BL或许BLX指令调用子程序时,R14被设置成该子程序的回来地址。在子程序中,当把R14的值复制到程序计数器PC中时,就完成了子程序回来。
能够经过下面两种方法完成这种子程序的回来操作。
◆碑文下面任何一条指令
MOV pc, LR
BX LR
◆在子程序进口运用下面指令将PC保存到栈中:
STMFD SP!, {registers}, LR}
相应地,下面的指令能够完成子程序的回来:
LDMFD SP!, { registers}, LR }
② 当产生反常中止的时分,该形式下的特定物理R14被设置成该反常形式酿制回来的地址。关于某些反常,R14的值或许与将回来的地址有一个常数的偏移量。详细的回来方法与上面的子程序回来方法根本相同。
3)程序计数器PC→R15
程序计数器R15又被记作PC。它尽管能够作为一般的通用寄存器运用,可是有一些指令在运用R15时有一些特别约束。当违反了这些约束时,该指令碑文的成果将是不行意料的。
我们ARM选用了流水线机制,当正确读取了PC的值时,该值为当时指令地址值加8个字节。也就是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址。我们ARM指令是字对齐的,PC值的第0位和第1位总为0。
需求留意的是,当运用指令STR/STM保存R15时,保存的或许是当时指令地址值加8字节,也或许保存的是当时指令地址加12字节。到底是哪种方法,取决于芯片详细规划方法。无论如何,在同一芯片中,要么选用当时指令地址加8,要么选用当时指令地址加12,不能有些指令选用当时指令地址加8,另一些指令选用当时指令地址加12。因而关于用户来说,尽量防止运用STR/STM指令来保存R15的值。当不行防止这种运用方法时,能够先经过一些代码来确认所用的芯片运用的是哪种完成方法。
需求留意的是,当运用指令STR/STM保存R15时,保存的或许是当时指令地址值加8字节,也或许保存的是当时指令地址加12字节。到底是哪种方法,取决于芯片详细规划方法。无论如何,在同一芯片中,要么选用当时指令地址加8,要么选用当时指令地址加12,不能有些指令选用当时指令地址加8,另一些指令选用当时指令地址加12。因而关于用户来说,尽量防止运用STR/STM指令来保存R15的值。当不行防止这种运用方法时,能够先经过一些代码来确认所用的芯片运用的是哪种完成方法。
假定R0指向可用的一个内存字,下面代码能够在R0指向的内存字中回来该芯片所选用的地址偏移量。
STR PC, [R0] ;将PC=STR地址+offset保存到R0中
LDR R0, [R0] ;
SUB R0, R0, R1 ;offset=PC-STR地址
2.程序状况寄存器
CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。每一种形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常中止产生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常退出时,能够用 SPSR中保存的值来康复CPSR。CPSR的详细格局如下。
CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。每一种形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常中止产生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常退出时,能够用 SPSR中保存的值来康复CPSR。CPSR的详细格局如下。
31
|
30
|
29
|
28
|
27
|
26
|
7
|
6
|
5
|
4
|
3
|
21
|
0
|
N
|
Z
|
C
|
V
|
Q
|
DNMLRAZ
|
I
|
F
|
I
|
M4
|
M3
|
M
|
M0
|
1)条件标志位
N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令能够根据CPSR中的这些标志位来挑选性地碑文。各条件标志位的详细意义,如表1-4所示。
表 CPSR标志位意义
标志位
|
含
|
N
|
本位设置成当时指令运算成果的bit[31]的值
当两个补码一共的有符号整数运算时,N=1一共运算的成果为负数,N=0 一共成果为正数或零
|
Z
|
Z=1一共运算成果是0,Z=0一共运算成果不是零
关于CMP指令,Z=1一共进行比较的两个数巨细持平
|
C
|
在加法指令中(包括比较指令CMN),成果产生进位了,则C=1,一共无符号数运算产生上溢出,其他情况下C=0
在减法指令中(包括比较指令CMP),成果产生借位了,则C=0,一共无符号数运算产生下溢出,其他情况下C=1
关于包括移位操作的非加/减法运算指令,C中包括最终一次被溢出的位的数值,关于其他非加/减法运算指令,C位的值一般不受影响
|
V
|
关于加/减法运算指令,当操作数和运算成果为二进制的补码一共的带符号数时,V=1一共符号位溢出
其他的指令一般不影响V位
|
2)Q标志位
在ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位,首要用于指示增强的DSP指令是否产生了溢出,相同的,SPSR的bit[27]也称为Q标志位,用于在反常中止产生时保存和康复CPSR中的Q标志位。
3)CPSR中的操控位
CPSR的低8位I、F、T及M[4:0]统称为操控位,当反常中止产生时这些位产生变化。在特权级的处理器形式下,软件能够修正这些操控位。
① I中止制止位
当I=1时制止IRQ中止。
当F=1时制止FIQ中止。
一般一旦进入中止服务程序能够经过置位I和F来制止中止,可是在本中止服务程序退出前有必要康复本来I、F位的值。
② T操控位,用来操控指令碑文的状况,即阐明本指令是ARM指令仍是Thumb指令。关于不同版别的ARM处理器,T操控位的意义是有些不同的。
关于ARM v3及更低的版别和ARM v4的非T系列版别的处理器,没有ARM和Thumb指令的切换,所以T一直为0。
关于ARM v4及更高版别的T系列处理器,T操控位意义如下。
当T=0,一共碑文ARM指令。
当T=1,一共碑文Thumb指令。
关于ARM v5及更高的版别的非T系列处理器,T操控位的意义如下。
当T=0一共碑文ARM指令。
当T=1一共强制下一条碑文的指令产生为界说指令中止。
③ M 操控位
操控位M[4:0]称为处理器形式标识位,详细阐明如表1-5所示。
表CPSR 处理器形式位
M[4:0]
|
处理器形式
|
可拜访的寄存器
|
0b10000
|
User
|
PC,R14~R0,CPSR
|
0b10001
|
FIQ
|
PC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq
|
0b10010
|
IRQ
|
PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq
|
0b10011
|
Supervisor
|
PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc
|
0b10111
|
Abort
|
PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt
|
0b11011
|
Undefined
|
PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und
|
0b11111
|
System
|
PC,R14~R0,CPSR(ARM v4及更高版别)
|
④CPSR的其他位用于将来ARM版别的扩展,程序能够先不操作这些位。