用户模式 | 系统模式 | 特权模式 | 中止模式 | 未定义指令模式 | 外部中断模式 | 快速中断模式 |
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 |
通用寄存器
未备份寄存器
备份寄存器
程序计数器R15
程序状态寄存器
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 |
条件标志位
标志位 | 含 义 |
N | 本位设置成当前指令运算结果的bit[31)的值 当两个补码表示的有符号整数运算时,N=I表示运算的结果为负数;N=0表示结果为正数或零 |
Z | Z=1表示运算的结果为零;Z=0表示运算的结果不为零。 对于CMP指令,Z=1表示进行比较的两个数大小相等。 下面分4种情况讨论C的设置方法: 在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生上溢出;其他情况下C=0。 在减法指令中(包括比较指令CMP),当运算中发生借位则C=0表示无符号数运算发生下溢出;其他情况下C=1。 对于包含移位操作的非加/减法运算指令,C中包含最后一次溢出的位数数值。 对于其他非加/减法运算指令,C位的值通常不受影响。 |
V | 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时V=1表示符号位溢出。 通常其他的指令不影响V位,具体可参考各指令的说明。 |
Q标志位
CPSR中的控制位
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 |
| | |
CPSR中的其他位
ARM体系中的存储空间
ARM存储器格式
ARM处理器包含多少寄存器?每种模式下又有那些寄存器?这些寄存器的作用又是什么?带着这些问题我们来学习ARM寄存器吧!相信看完这篇文章后你会有所收获。
ARM处理器共有37个寄存器。
它包含31个通用寄存器和6个状态寄存器。
=======================================================================================
Usr System Supervisor Abort Undefined IRQ FIQ
----------------------------------------------------------------------------------------------------------------
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
=======================================================================================
1.通用寄存器的分类:
a.未备份寄存器,包括R0-R7
对每个未备份寄存器来说,在所有的模式下都是指同一个物理寄存器(例如:Usr下的R0与FIQ下的R0是同一个寄存器)。在异常程序中断造成模式切换 时,由于不同模式使用的是相同的物理寄存器。这可能导致数据遭到破坏。未备份寄存器没有被系统作为别的用途,任何场合均可采用未备份寄存器。
b.备份寄存器,包括R8-R14
对于备份寄存器R8-R12来说,除FIQ模式下其它模式均使用相同的物理寄存器。在FIQ模式下R8_fiq,R9_fiq,
R10_fiq,R11_fiq,R12_fiq。它有自己的物理寄存器。
对于R13和R14寄存器每种模式都有自己的物理寄存器(System与Usr的寄存器相同)当异常中断发生时,系统使用相应模式下的物理寄存器,从而可以避免数据遭到破坏。
R13也称为SP堆栈指针。
R14也称为LR寄存器
c.程序计数器,PC
PC寄存器存储指令地址,由于ARM采用流水机制执行指令,故PC寄存器总是存储下一条指令的地址。
由于ARM是按照字对齐故PC被读取后的值的bit[1:0]总是0b00(thumb的bit[0]是0b0)。
2.程序状态寄存器
程序状态寄存器包含当前程序状态寄存器和备份状态寄存器。
a.CPSR(程序状态寄存器)
CPSR在任何处理器模式下都可以被访问。其结构如下:
31 30 29 28 --- 7 6 - 4 3 2 1 0
N Z C V I F M4 M3 M2 M1 M0
N(Negative)、Z(Zero)、C(Carry)以及V(oVerflow)称为条件标志位。ARM指令根据CPSR的条件标志位来选择地执行。
CPSR条件标志位
=======================================================================================
条件标志位 含义
----------------------------------------------------------------------------------------------------------------
N N=1 表示运算结果为负数,N=0 表示运算结果为正数。
Z Z=1 表示运算结果为0, Z=0 表示运算结果为非零。
C C=1 表示运算结果产生了进位。
V V=1 运算结果的符号位发生了溢出。
Q 在ARMv5 E系列版本中Q=1 表示DSP指令溢出。
在ARMv5以前的版本中没有Q标志位。
=======================================================================================
以下指令会影响CPSR的条件标志位
(1)比较指令,如: CMP、CMN、TEQ、TST等。
(2)当一些算术逻辑运算的目标寄存器不是PC时,这些指令会影响CPSR的条件标志位。
(3)MSR与MRS指令可以对CPSR/SPSR进行操作。
(4)LDM指令可以将SPSR复制到CPSR中。
CPSR的控制位
=======================================================================================
控制位 含义
----------------------------------------------------------------------------------------------------------------
I I=1 禁用IRO中断
F F=1 禁用FIQ中断
T ARMv4以上T版本T=0 执行ARM指令,T=1执行Thumb指令。
ARMv5以上非T版本T=0 执行ARM指令,T=1表示下一条指令产生未定义指令中断。M[4:0] 控制处理器模式
0b10000 User
0b10001 FIQ
0b10010 IRQ
0b10011 Supervisor
0b10111 Abort
0b11011 Undefined
0b11111 System
=======================================================================================
b.SPSR(备份状态寄存器)
SPSR的结构与CPSR的结构相同,SPSR是用来备份CPSR的。
现在你对ARM处理器的寄存器有一些了解了吧?
来源:http://www.cppblog.com/platox/archive/2010/10/27/131526.html