ARM微处理器的编程模型之:ARM寄存器组织
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 | User mode and CPSR | User mode 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
微处理器 连接寄存器 ARM 分组寄存器 程序计数器 相关文章:
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)