04_ARM汇编自学笔记模型之ARM 状态下的寄存器组织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