一、ARM处理器形式:
- ARM微处理器支撑7种运转形式,别离为:
用户形式(usr): ARM处理器正常的程序履行状况。快速间断形式(fiq):用于高速数据传输或通道处理。外部间断形式(irq):用于通用的间断处理。管理形式(svc): 操作体系运用的保护形式。软间断和复位数据拜访间断形式(abt): 当数据或指令预取停止时进入该形式,可用于虚拟存储及存储保护。体系形式(sys): 运转具有特权的操作体系使命。未界说指令间断形式(und):当未界说的指令履行时进入该形式,可用于支撑硬件协处理器的软件仿真
- 除用户形式外的其他6种形式都称为特权形式,这些形式下,程序能够拜访一切的体系资源,也能够任一进行处理器形式切换。其间,除体系形式外,其他5种形式又称为反常形式
二、ARM寄存器
(一)ARM作业状况下的寄存器安排
ARM处理器共有37个寄存器。其间包括:
- 31个通用寄存器,包括程序计数器(PC)在内。这些寄存器都是32位寄存器
- 6个32位状况寄存器。
表1各种处理器形式下的寄存器
用户形式
|
体系形式
|
特权形式
|
间断形式
|
未界说指令形式
|
外部间断形式
|
快速间断形式
|
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
|
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_inq
|
R13_fiq
|
R14
|
R14
|
R14_svc
|
R14_abt
|
R14_und
|
R14_inq
|
R14_fiq
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
PC
|
CPSR
|
CPSR
|
CPSR
SPSR_svc
|
CPSR
SPSR_abt
|
CPSR
SPSR_und
|
CPSR
SPSR_inq
|
CPSR
SPSR_fiq
|
- 当发生反常间断时,处理器进入相应的反常形式。在每一种反常形式下都有相应的一组寄存器,供相应的反常处理程序运用,这样就能够确保在进入反常形式时,用户形式下的寄存器(保存了程序运转状况)不被损坏。
- 体系形式不是经过反常进入的,他和用户形式具有彻底相同的寄存器
1、通用寄存器
通用寄存器一般分为以下三类:
未备份寄存器:R0——R7
备份寄存器:R8——R14
程序计数器PC,即R15
未备份寄存器R0——R7:
R0~R7。在一切的处理器形式下指的都是同一个物理寄存器。在反常间断形成处理器形式切换时,因为不同的处理器形式运用相同的物理寄存器,或许形成寄存器中数据被损坏。
备份寄存器R8~R14:
(1)寄存器R8~R12
每个寄存器对应两个不同的物理寄存器。例如,当运用快速间断形式下的寄存器时,寄存器R8和寄存器R9别离记作R8_fiq、R9_fiq;当运用用户形式下的寄存器时,寄存器R8和寄存器R9别离记作R8_usr、R9_usr等。在这两种状况下运用的是不同的物理寄存器。体系没有将这几个寄存器用于任何的特别用处,可是当间断处理十分简略,仅仅运用R8~R14寄存器时,FIQ处理程序能够不用履行保存和康复间断现场的指令,然后能够使间断处理进程十分敏捷。关于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其间的一个是用户形式和体系形式共用的;别的的5个对应于其他5种处理器形式。
(2)寄存器R13在ARM中常用作栈指针(Stack Point,SP)
- 在ARM指令会集,这仅仅一种习气的用法,并没有任何指令强制性的运用R13作为栈指针,用户也能够运用其他的寄存器作为栈指针;而在Thumb指令会集,有一些指令强制性地运用R13作为栈指针。
- 每一种反常形式具有自己的物理的R13。应用程序初始化该R13,使其指向该反常形式专用的栈地址。当进入反常形式时,能够将需求运用的寄存器保存在R13所指的栈中;当退出反常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使反常处理程序不会损坏被其间断程序的运转现场。
(3)寄存器R14又被称为衔接寄存器(Link Register,LR)
- 在ARM体系中具有下面两种特别的效果:每一种处理器形式自己的物理R14中寄存在当时子程序的回来地址。当经过BL或BLX指令调用子程序时,R14被设置成该子程序的回来地址。在子程序中,当把R14的值到程序计数器PC中时,子程序即回来。
- 当反常间断发生时,该反常形式特定的物理R14被设置成该反常形式即将回来的地址,关于有些反常形式,R14的值或许与将回来的地址有一个常数的偏移量。详细的回来办法与上面的子程序回来办法根本相同。
- R14寄存器也能够作为通用寄存器运用。
程序计数器R15(PC)
- 程序计数器R15又被记作PC。它尽管能够作为一般的通用寄存器运用,可是有一些指令在运用R15时有一些特别约束。当违反了这些约束时,该指令履行的成果将是不行意料的。
-
因为ARM选用了流水线机制,当正确读取了PC的值时,该值为当时指令地址值加8个字节。也就是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址。(因为ARM运用RISC精简指令集,ARM的一条指令所占内存为32位,4个字节。所以当一条指令正确读取时,该寄存器指向当时指令地址加8,即指向下两条指令的地址)
-
当成功地向R15中写入一个地址数值时,程序将跳到该地址履行。因为ARM指令是字对齐的,所以PC值的第0位和第1位总为0。需求留意的是,当运用指令STR/STM保存R15时,保存的或许是当时指令地址值加8字节,也或许保存的是当时指令地址加12字节。到底是哪种办法,取决于芯片详细规划办法。无论如何,在同一芯片中,要么选用当时指令地址加8,要么选用当时指令地址加12,不能有些指令选用当时指令地址加8,另一些指令选用当时指令地址加12。因而关于用户来说,尽量防止运用STR/STM指令来保存R15的值。当不行防止这种运用办法时,能够先经过一些代码来确认所用的芯片运用的是哪种完成办法。
-
关于ARM版别4以及更高的版别,程序有必要确保写入R15寄存器的地址值的bits[1:0]为0b00;不然将会发生不行预知的成果。
-
关于Thumb指令集来说,指令是半字对齐的。处理器将疏忽bit[0],即写入R15的地址值首要与0XFFFFFFFE做与操作,再写入R15中。
-
还有—些指令关于R15的用法有一些特别的要求。比方,指令BX运用bit[0]来确认是ARM指令,仍是Thumb指令。这种读取PC值和写入PC值的不对称的操作需求特别留意。
注:PC指向的地址是取指单元要取指令的地址,而不是当时履行的指令。
2、程序状况寄存器
CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。它包括了条件标志位、间断制止位、当时处理器形式标志以及其他的一些操控和状况位。每一种处理器形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常间断发生时,这个寄存器用于寄存当时程序状况寄存器(CPSR)的内容。在反常间断程序退出时,能够用SPSR中保存的值来康复CPSR。
因为用户形式和体系形式不是反常间断形式,所以它们没有SPSR。当在用户形式或体系形式中拜访SPSR,将会发生不行预知的成果。
CPSR的格局如下所示。SPSR格局与CPSR格局相同。
31
|
30
|
29
|
28
|
27
|
26
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
N
|
Z
|
C
|
V
|
Q
|
DNM(RAZ)
|
I
|
F
|
T
|
M4
|
M3
|
M2
|
M1
|
M0
|
1.条件标志位
N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)统称为条件标志位。大部分的ARM指令能够依据CPSR中的这些条件标志位来挑选性地履行。
在ARM状况下,绝大多数的指令都是有条件履行的。
在Thumb状况下,仅有分支指令是有条件履行的。
N Negative 关于有符号运算,假如成果是负数则置位Z Zero 假如成果是零则置位C Carry 关于无符号运算,假如发生进位则置位V Overflow 关于有符号运算,假如发生溢出则置位I IRQ 间断禁用F FIQ 快速间断禁用
标志位
|
意义
|
N
|
本位设置成当时指令运算成果的bit[31]的值
当两个补码标明的有符号整数运算时,N=1标明运算的成果为负数;N=0标明成果为正数或零
|
Z
|
Z=1标明运算的成果为零;Z=0标明运算的成果不为零。
关于CMP指令,Z=1标明进行比较的两个数巨细持平。
|
C |
下面分4种状况评论C的设置办法:
在加法指令中(包括比较指令CMN),当成果发生了进位,则C=1,标明无符号数运算发生上溢出;其他状况下C=0。
在减法指令中(包括比较指令CMP),当运算中发生借位则C=0标明无符号数运算发生下溢出;其他状况下C=1。
关于包括移位操作的非加/减法运算指令,C中包括最终一次溢出的位数数值。
关于其他非加/减法运算指令,C位的值一般不受影响。
|
V
|
关于加/减法运算指令,当操作数和运算成果为二进制的补码标明的带符号数时V=1标明符号位溢出。
一般其他的指令不影响V位,详细可参阅各指令的阐明。
|
2.Q标志位
在ARMv5的E系列处理器中,CPSR的bit[27]称为Q标志位,首要用于指示增强的DSP指令是否发生了溢出。相同的SPSR中的bit[27]也称为Q标志位,用于在反常间断发生时保存和康复CPSR中的Q标志位。
在ARM v5曾经的版别及ARM v5的非E系列的处理器中,Q标志位没有被界说。CPSR的bit[27]归于DNM(RAZ)。
3.CPSR中的操控位
CPSR的低8位I、F、T及M[4:0]统称为操控位。当反常间断发生时这些位发生变化。在特权级的处理器形式下,软件能够修正这些操控位。
1)间断制止位
- 当I=1时制止IRQ间断。
- 当F=1时制止FIQ间断。
2)T操控位
T操控位用于操控指令履行的状况,即阐明本指令是ARM指令,仍是Thumb指令。对与不同版别的ARM处理器,T操控位的意义不同。
关于ARMv4以及更高版别的T系列的ARM处理器,
- T=0标明履行ARM指令。
- T=1标明履行Thumb指令。
关于ARMv5以及更高的版别的非T系列的ARM处理器,T操控位意义如下:
- T=0标明履行ARM指令。
- T=1标明强制下一条履行的指令发生未界说指令间断。
3)M操控位
操控位M[4:0]操控处理器形式,详细意义如表3所示。
表3操控位M[4:0]的意义
M[4:0]
|
处理器形式
|
可拜访的寄存器
|
0b10000
|
User
|
PC,R14一R0,CPSR
|
0b10001
|
FIQ
|
PC,R14_fiq-R8_flq,R7~R0,CPSR,SPSR_nq
|
0b10010
|
1RQ
|
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
|
4.CPSR中的其他位
CPSR中的其他位用于将来ARM版别的扩展。应用软件不要操作这些位,以免与ARM将来版别的扩展抵触。
(二)Thumb作业状况下的寄存器安排
Thumb状况下的寄存器集是ARM状况下寄存器集的一个子集,程序能够直接拜访8个通用寄存器(R7~R0)、程序计数器(PC)、仓库指针(SP)、 衔接寄存器(LR)和CPSR。一起,在每一种特权形式下都有一组SP、LR和SPSR。图2.4标明Thumb状况下的寄存器安排。
Thumb状况下的寄存器安排与ARM状况下的寄存器安排的联系:
─ Thumb状况下和ARM状况下的R0~R7是相同的。
─ Thumb状况下和ARM状况下的CPSR和一切的SPSR是相同的。
─ Thumb状况下的SP对应于ARM状况下的R13。
─ Thumb状况下的LR对应于ARM状况下的R14。
─ Thumb状况下的程序计数器对应于ARM状况下R15
以上的对应联系如图2.5所示:
拜访THUMB状况下的高位寄存器(Hi-registers):
在Thumb状况下,高位寄存器R8~R15并不是规范寄存器集的一部分,但可运用汇编语言程序受约束的拜访这些寄存器,将其用作快速的暂存器。运用带特别变量的MOV指令,数据能够在低位寄存器和高位寄存器之间进行传送;高位寄存器的值能够运用CMP和ADD指令进行比较或加上低位寄存器中的值。