ARM 状态下的寄存器组织
通用寄存器包括R0~R15,可以分为三类:
─ 未分组寄存器R0~R7:未分组寄存器都指向同一个物理寄存器
─ 分组寄存器R8~R14:每一次所访问的物理寄存器与处理器当前的运行模式有关,对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,R8_f i q~R12_f i q;当使用f i q模式时,访问寄存器,当使用除f i q模式以外的其他模式时,访问寄存器R8_usr~R12_usr。对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式
─ 程序计数器PC(R15):在ARM状态下,PC的0和1位是0,在Thumb状态下,PC的0位是0。PC 总是指向当前指令的下两条指令的地址,即 PC 的值为当前指令的地址值加 8 个字节。
寄存器R16用作CPSR(CurrentProgram Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
寄存器R13在ARM指令中常用作堆栈指针
R14也称作子程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。保存子程序的返回地址。当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。
访问THUMB状态下的高位寄存器(Hi-regi st ers):
在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制的访问这些寄存器,将其用作快速的暂存器。使用带特殊变量的MOV指令,数据可以在低位寄存器和高位寄存器之间进行传送;高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值。
Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:
─ Thumb状态下和ARM状态下的R0~R7是相同的。
─ Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的。
─ Thumb状态下的SP对应于ARM状态下的R13。
─ Thumb状态下的LR对应于ARM状态下的R14。
─ Thumb状态下的程序计数器对应于ARM状态下R15