ARM 寄存器组成

更新时间:2023-08-31 02:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

R8~R14、SPSR寄存器则被切换到各个模式下的私有寄存器组上,不同的模式下可以访问相应的私有寄存器。表1显示了在每种模式下,哪些寄存器是有效的(阴影部分的寄存器都是私有寄存器)。

表1 ARM状态下的寄存器组织结构

从表1中我们可以看出:

☆ R0~R7、R15、CPSR寄存器组在任何模式下都是共用的,可访问的;

☆ R8~R12寄存器组在快中断模式下(fiq)对应一套私有寄存器组R8_fiq~R12_fiq,在其他模式下共用另一套寄存器组;

☆ R13、R14寄存器在用户(user)和系统(sys)模式下共用一套;其他模式(管理(svc)、中止(abt)、未定义(und)、中断(irq)、快中断(fiq)模式)下都具有两个私有寄存器R13和R14

。这就使得这些模式中的每一种模式

都具有各自的堆栈寄存器指针R13和链接寄存器R14,分别用于堆栈处理和异常退出;

☆ SPSR寄存器可用于保存CPSR的值,在用户和系统模式下不能访问,在其他模式下都有私有的SPSR寄存器。

表1中第二列列举了寄存器在汇编语言中的名称,其中括号中的内容是别称。下面我们对这些寄存器的功能进行介绍。

1、一般通用寄存器 R0~R12

寄存器R0~R12为保存数据或地址值的一般通用寄存器。其中寄存器R0~R7为未分组的寄存器,R8~R12为分组寄存器。

未分组的寄存器意味着对于任何处理器模式,他们中的每一个都对应于相同的32位物理寄存器。他们是完全通用的寄存器,

分组寄存器意味着同一个寄存器名对应多个物理寄存器,具体所对应的物理寄存器取决于当前的处理器模式。参照表2-1,寄存器R8~R12有两个分组物理寄存器。一组用于除FIQ模式之外的所有寄存器模式(R8~R12),另一组用于FIQ模式(R8_fiq~R12_fiq)。、

寄存器R8~R12在ARM体系结构中没有特定的用途。不过对于那些只使用R8~R14来说就足够处理的简单的中断,FIQ所单独使用的这些寄存器可实现快速的中断处理。

2、堆栈指针 R13

寄存器R13(也称为堆栈指针或SP)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式。

寄存器R13通常作为堆栈指针SP。在ARM指令集中,R13大都用在对各个模式下的堆栈操作。每个异常模式都具备私有的R13寄存器,它通常指向由异常模式所专用的堆栈。在入口处,通常将寄存器值保存到这个堆栈。在模式转换前将当前寄存器的值保存到堆栈中,然后从将要切换的模式堆栈中将这些值从堆栈重装到已切换的模式寄存器中,这种处理方法可确保异常发生时的程序状态不会被破坏。

3、链接寄存器 R14

寄存器R14(也称为链接寄存器或LR)有6个分组的物理寄存器,见表2-1。一个用于用户和系统模式,其余5个分别用于5种异常模式,对应的私有寄存器有R14_svc,R14_irq,R14_fiq,R14_abt和R14_und。寄存器R14有三种用途: ☆ 当发生异常时,它被设置为该异常返回地址;

☆ 在执行分支和链接(BL)指令时,它用于保存子程序的返回地址; ☆ 而在其他时候,可以作为一个通用寄存器来对待。

4、程序计数器 R15

寄存器R15(也称为程序计数器或PC)总是用于特殊用途,它总是指向下一条要读取指令的地址。你可以把R15当作通用寄存器使用,但使用时还有与指令有关的限制或特殊情况。如果R15使用的方式超过了这些限制,那么指令将是不可预测的。

由于ARM7采用3级流水线结构,在ARM状态下,读取R15的值是当前执行指令地址 + 8。ARM指令以字为单位,读取R15结果的bit[1:0]总是为0b00。 对R15进行写时,如果这条写指令没有超过对R15使用的限制,那么写入R15的正常结果值被当成一个指令地址,程序会从这个地址处继续执行(相当于执行无条件跳转指令)。因为ARM指令以字为边界,所以写入R15值的bit[1:0]通常为0b00。

5、CPSR和SPSR

所有模式共享一个程序状态寄存器CPSR。在异常模式中,程序状态保存寄存器SPSR可以被访问,每种异常具有自己私有的SPSR。在进入异常时,它保存CPSR的当前值;在异常退出时,可通过它(SPSR)恢复CPSR。

本文来源:https://www.bwwdw.com/article/he5i.html

Top