首页 理论教育ARM嵌入式系统原理与应用:寄存器组介绍

ARM嵌入式系统原理与应用:寄存器组介绍

【摘要】:Cortex-A8处理器有40个32位寄存器,分为33个通用寄存器和7个程序状态寄存器。表2.4ARM状态下Cortex-A8寄存器组②R13是堆栈指针寄存器,用于指向堆栈区的栈顶。表2.5程序状态寄存器位格式条件代码标志位N、Z、C和V位都是条件代码标志。

Cortex-A8处理器有40个32位寄存器,分为33个通用寄存器和7个程序状态寄存器。7个程序状态寄存器包括1个当前程序状态寄存器(CPSR)和6个备份程序状态寄存器(SPSR)。ARM正常状态下有16个数据寄存器和1~2个状态寄存器可随时被访问,可被访问的寄存器依赖于处理器当前的工作模式。每种工作模式下处理器可访问的寄存器名称见表2.4。

1.通用寄存器组

表2.4中,R0~R15是通用寄存器。其中R0~R7是不分组的通用寄存器,R8~R15是分组的通用寄存器。这些寄存器用来保存数据或表示地址

(1)不分组的通用寄存器R0~R7。在所有处理器模式下对于每一个不分组寄存器来说,指的都是同一个物理寄存器。

(2)分组的通用寄存器R8~R15。

①R8~R12:对应两个不同的物理寄存器,由表2.4可知,它们分别为快速中断模式下的相应寄存器及除快速模式外的其他7中模式下的相应寄存器。快速中断下的R8_fig~R12_fig,当FIQ中断到达时,不用保存这些通用寄存器,即程序可以不执行保存和恢复现场的指令,从而可以使中断处理过程非常迅速。

表2.4 ARM状态下Cortex-A8寄存器组

②R13是堆栈指针寄存器(Stack Pointer,SP),用于指向堆栈区的栈顶。每种工作模式具有各自私有的堆栈区和堆栈指针寄存器。

③R14是链接寄存器(Link Register,LR),用于存储子程序返回主程序的链接地址。当处理器执行一条调用指令(BL或BLX)时,R14用于存储主程序的断点地址,供子程序返回主程序;其他时间,R14可以作为一个通用寄存器使用。每种工作模式具有各自私有的链接寄存器。

④R15(PC)5是程序计数器,用于存放下一条指令所在存储单元的地址。由于ARM指令集中的一条指令代码为4字节,因此在取指时指令代码的存储地址应满足字对齐。

2.状态寄存器组

由表2.4可知,Cortex-A8处理器的程序状态寄存器包含1个当前程序状态寄存器CPSR和6个备份程序状态寄存器SPSR。

程序状态寄存器(CPSR和SPSR)的主要用途:保存所执行的最后一条逻辑或算术运算指令运行结果的相关信息,控制开启/禁用中断,设置处理器工作模式。程序状态寄存器位格式见表2.5。

表2.5 程序状态寄存器位格式

(1)条件代码标志位

N、Z、C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。各标志位的含义如表2.6所示。

表2.6 各标志位的含义

(www.chuimin.cn)

(2)状态控制位

IT[1:0]、IT[7:2]、J、E、A被称为状态控制位,各位具体含义如表2.7所示。

表2.7 状态控制位含义

(3)控制位

I、F、T、M[4:0]是控制位,其含义如表2.8所示。

表2.8 控制位含义

表2.9 工作模式与M[4:0]的内容对应关系

(4)使用MSR指令修改CPSR寄存器

在ARMv6以前架构版本中,MSR指令可在所有模式下修改标志位字节,即CPSR[31~24]。但CPSR中其他三个字节内容只有在特权模式下可以修改。

ARMv6的改进之处有以下几个方面。

①CPSR寄存器中指定标志位在任何模式下可自由修改,通过MSR指令或借助其他指令执行结果,来改写或直接修改整个CPSR寄存器内容或其中指定标志位内容。这些位包含N、Z、C、V、Q、GE[3:0]、E。

②J和T位的内容不可以使用MSR指令,仅能依据其他指令执行结果来修改。如果使用MSR指令并尝试修改这些位内容,结果不可预知。

③I、F和M[4:0]等位的内容在用户模式下受到保护,仅可在特权模式下改写。用户模式下可以通过执行指令进入处理器的异常模式,在异常模式下来改写这些位的内容。

④只有在安全特权模式下,才可以通过直接写CPSR模式标志位来进入监视模式。如果内核目前处于安全用户模式、非安全用户模式或非安全特权模式,此时设置进入监视模式的修改将被忽略。内核不可以将SPSR寄存器中在非安全模式下发生变化的模式标志位内容复制到CPSR。

⑤DNM(CPSR[23~20])为保留位。当改变CPSR标志或控制位时,确保不改变这些保留标志位的内容以便和未来高版本处理器兼容。