分类: 嵌入式
2014-04-15 19:57:32
用户模式(usr): ARM处理器正常的程序执行状态。快速中断模式(fiq):用于高速数据传输或通道处理。外部中断模式(irq):用于通用的中断处理。管理模式(svc): 操作系统使用的保护模式。软中断和复位数据访问中止模式(abt): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。系统模式(sys): 运行具有特权的操作系统任务。未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
用户模式
|
系统模式
|
特权模式
|
中止模式
|
未定义指令模式
|
外部中断模式
|
快速中断模式
|
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
|
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
|
在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位,具体可参考各指令的说明。
|
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
|
|
|
|
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指令进行比较或加上低位寄存器中的值。