您的位置 首页 动态

ARM寄存器简介

ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。(2)6个…

ARM处理器含有37个寄存器,这些寄存器包括以下两类寄存器。

(1)31个通用寄存器:包括程序计数器PC等,这些寄存器都是32位寄存器。
(2)6个状况寄存器:状况寄存器也是32位的寄存器,可是只运用了其间的12位。
1.通用寄存器
在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的值。当不行防止这种运用方法时,能够先经过一些代码来确认所用的芯片运用的是哪种完成方法。
假定R0指向可用的一个内存字,下面代码能够在R0指向的内存字中回来该芯片所选用的地址偏移量。
SUB R1, PC, #4 ;R1中寄存下面STR指令的地址
STR PC, [R0] ;将PC=STR地址+offset保存到R0中
LDR R0, [R0] ;
SUB R0, R0, R1 ;offset=PC-STR地址
2.程序状况寄存器
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版别的扩展,程序能够先不操作这些位。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/264471.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部