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 M0N(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处理器的寄存器有一些了解了吧?