首页 理论教育 ARM体系结构通用寄存器及其特殊作用

ARM体系结构通用寄存器及其特殊作用

时间:2023-10-19 理论教育 版权反馈
【摘要】:R14寄存器在ARM体系结构中具有两种特殊的作用,每一种ARM处理器工作模式用自己的R14存放当前子程序的返回地址。另外,R14也可以用作通用寄存器。R15虽然可以作为一般的通用寄存器使用,但是有一些指令在使用R15时有一些特殊限制。

ARM体系结构通用寄存器及其特殊作用

1.未分组寄存器

在所有运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途。因此在中断或异常处理进行工作模式切换时,由于不同的工作模式均使用相同的物理寄存器,因此可能造成寄存器中数据的破坏,需要对数据进行保护。

2.分组寄存器

对于分组寄存器,它们每一次所访问的物理寄存器都与当前处理器的运行模式有关。对于R8~R12来说,每个寄存器对应2个不同的物理寄存器,当使用快速中断模式时,访问寄存器R8_fiq~R12_fiq;当使用除快速中断模式以外的其他工作模式时,访问寄存器

R8_usr~R12_usr。

对于寄存器R13和R14来说,每个寄存器对应7个不同的物理寄存器,其中一个是用户模式与系统模式共用,另外6个物理寄存器对应其他6种不同的运行模式,并采用以下记号区分不同的物理寄存器,名字形式如下:

(1)R13_<mode>;

(2)R14_<mode>。

其中,<mode>可以是以下几种工作模式之一:usr、sys、svc、abt、und、irp、fiq及mon。

除了保存数据,ARM体系结构中习惯将几个寄存器用作其他特殊功能,如下所述:

(1)R13寄存器在ARM处理器中常用作栈指针。当然,这只是一种习惯用法,并没有任何指令强制性地使用R13作为栈指针,用户完全可以使用其他寄存器作为栈指针。而在Thumb指令集中,有一些指令强制性地将R13作为栈指针,如栈操作指令。(www.xing528.com)

由于ARM处理器的每种工作模式均有独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种工作模式下的R13,使其指向该工作模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的栈空间,而当程序从异常模式返回时,则从对应的栈中恢复,采用这种方式可以保证异常发生后程序正常执行。

(2)R14寄存器在ARM体系结构中具有两种特殊的作用,每一种ARM处理器工作模式用自己的R14存放当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址,而在子程序返回时,把R14的值复制到程序计数器(PC)。典型的做法是使用下列两种方法之一:

①返回时执行下面任何一条指令:

②在子程序入口处使用下面的指令将PC保存到栈中。

在子程序返回时,使用如下相应的配套指令返回:

当异常中断发生时,该异常模式特定的物理寄存器R14被设置成该异常模式的返回地址,对于有些模式R14的值可能与返回地址有一个常数的偏移量(如数据异常使用“SUB PC,LR,#8”返回)。具体的返回方式与上面的子程序返回方式基本相同,但使用的指令稍有不同,以保证当异常出现时正在执行的程序的状态被完整保存。另外,R14也可以用作通用寄存器。

3.程序计数器(R15)

寄存器R15用作程序计数器(PC)。在ARM状态下,由于ARM指令是字节对齐的,所以PC的第0位和第1位总为0;在Thumb状态下,PC的第0位为0。R15虽然可以作为一般的通用寄存器使用,但是有一些指令在使用R15时有一些特殊限制。违反这些限制时,该指令执行结果将是不可预料的。

由于ARM体系结构采用流水线机制(以3级流水线为例),PC总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。人们习惯将“正在执行的指令作为参考点”,称之为当前第1条指令,因此PC总是指向第3条指令。在ARM状态下,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即PC值=当前程序执行位置+8;

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈