微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM微处理器的编程模型之:ARM寄存器组织

ARM微处理器的编程模型之:ARM寄存器组织

时间:09-13 来源:互联网 点击:

3.3 ARM寄存器组织

ARM处理器有37个32位长的寄存器。

· 1个用作PC(Program Counter)。

· 1个用作CPSR(Current Program Status Register)。

· 5个用作SPSR(Saved Program Status Registers)。

· 30个用作通用寄存器。

注意

以上37个寄存器中,1个CPSR和5个SPSR通称为状态寄存器,虽然这些寄存器是32位的,但目前只使用了其中的12位。除了这6个状态寄存器外,其余的31个寄存器又称为通用寄存器。

ARM处理器共有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器组。表3.2显示了ARM的寄存器组织概要。

表3.2 寄存器组织概要

User

FIQ

IRQ

SVC

Undef

Abort

R0

User mode
R0~R7,R15,and CPSR

User mode
R0~R12,R15

and CPSR

User mode
R0~R12,R15

and CPSR

User mode R0~R12,R15

and CPSR

User mode R0~R12,R15

and CPSR

R1

R2

R3

R4

R5

R6

R7

R8

R8

R9

R9

R10

R10

续表

User

FIQ

IRQ

SVC

Undef

Abort

R11

R11

R12

R12

R13(SP)

R13(SP)

R13

R13

R13

R13

R14(LR)

R14(LR)

R14

R14

R14

R14

R15(PC)

CPSR

SPSR

SPSR

SPSR

SPSR

SPSR

注意

System模式使用和User模式相同的寄存器集

当前处理器的模式决定着哪组寄存器可操作,任何模式都可以存取。

· 相应的r0~r12。

· 相应的r13(the stack pointer, sp)和r14(the link register, lr)。

· 相应的r15(the program counter, pc)。

· 相应的CPSR(current program status register, cpsr)。

特权模式(除System模式)还可以存取。

· 相应的SPSR(saved program status register)。

3.3.1 通用寄存器

通用寄存器根据其分组与否和使用目的分为以下3类。

· 未分组寄存器(The unbanked registers),包括r0~r7。

· 分组寄存器(The banked register),包括r8~r14。

· 程序计数器(Program Counter),即r15。

1.未分组寄存器

未分组寄存器包括r0~r7。顾名思义,在所有处理器模式下对于每一个未分组寄存器来说,指的都是同一个物理寄存器。未分组寄存器没有被系统用于特殊的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。但由于其通用性,在异常中断所引起的处理器模式切换时,其使用的是相同的物理寄存器,所以也就很容易使寄存器中的数据被破坏。

2. 分组寄存器

r8~r14是分组寄存器,它们每一个访问的物理寄存器取决于当前的处理器模式。

对于这些分组寄存器r8~r12来说,每个寄存器对应两个不同的物理寄存器。一组用于除FIQ模式外的所有处理器模式,而另一组则专门用于FIQ模式。这样的结构设计有利于加快FIQ的处理速度。不同模式下寄存器的使用,要使用寄存器名后缀加以区分,例如,当使用FIQ模式下的寄存器时,寄存器r8和寄存器r9分别记做r8_fiq, r9_fiq;当使用用户模式下的寄存器时,寄存器r8和r9分别记做r8_usr, r9_usr等。在ARM体系结构中,r8~r12没有任何指定的其他的用途,所以当FIQ中断到达时,不用保存这些通用寄存器,也就是说FIQ处理程序可以不必执行保存和恢复中断现场的指令,从而可以使中断处理过程非常迅速。所以FIQ模式常被用来处理一些时间紧急的任务,如DMA处理。

对于分组寄存器r13和r14来说,每个寄存器对应6个不同的物理寄存器。其中的一个是用户模式和系统模式公用的,而另外5个分别用于5种异常模式。访问时需要指定它们的模式。名字形式如下:

· r13_mode>

· r14_mode>

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

r13寄存器在ARM中常用作堆栈指针,称为SP。当然,这只是一种习惯用法,并没有任何指令强制性的使用r13作为堆栈指针,用户完全可以使用其他寄存器作为堆栈指针。而在Thumb指令集中,有一些指令强制性的将r13作为堆栈指针,如堆栈操作指令。

每一种异常模式拥有自己的r13。异常处理程序负责初始化自己的r13,使其指向该异常模式专用的栈地址。在异常处理程序入口处,将用到的其他寄存器的值保存在堆栈中,返回时,重新将这些值加载到寄存器。通过这种保护程序现场的方法,异常不会破坏被其中断的程序现场。

寄存器r14又被称为连接寄存器(Link Register,LR),在ARM体系结构中具有下面两种特殊的作用。

(1)每一种处理器模式用自己的r14存放当前子程序的返回地址。当通过BL或BLX指令调用子程序时,r14被设置成该子程序的返回地址。在子程序返回时,把r14的值复制到程序计数器PC。典型的做法是使用下列两种方法之一。

· 执行下面任何一条指令。

MOV PC, LR

BX LR

· 在子程序入口处使用下面的指令将PC

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top