通用寄存器
通用寄存器可以分为下面3类
- 未备份寄存器(The unbanked registers),包括R0~R7
- 备份寄存器(The banked registers),包括R8~R14。
- 程序计数器PC,即R15。
R0 - R7
- 未备份寄存器 可用做通用寄存器
R8 - R12
- 备份寄存器 可用做通用寄存器
- R13 R14也是备份寄存器
R13 (SP)
- 常用做栈指针 Stack Pointer, SP
R14 (LR)
- 连接寄存器 Link Register, LR
- 当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。
R15 (PC)
- 程序计数器 Program Counter, PC
- ARM采用流水线机制,当正确读取了PC的值时,该值为当前指令地址值加8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。
- ARM指令是字对齐的,PC值的第0位和第1位总为0。当使用指令STR/STM保存R15时,保存的可能是当前指令地址值加8或12字节(取决于不同芯片)
程序状态寄存器
CPSR
- 当前程序状态寄存器
- 包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位
SPSR
- 备份程序状态寄存器
- 特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
条件标志位
- N(Negative) N=1 负数
- Z(Zero) Z=1 零
- C(Carry) C=1 进位
V(oVerflow) V=1 符号位溢出
以下指令会影响CPSR的条件标志位
- 比较指令,如: CMP、CMN、TEQ、TST等。
- 当一些算术逻辑运算的目标寄存器不是PC时,这些指令会影响CPSR的条件标志位。
- MSR与MRS指令可以对CPSR/SPSR进行操作。
- LDM指令可以将SPSR复制到CPSR中。
CPSR中的控制位
CPSR的低8位I、F、T及M[4:0]统称为控制位 当异常中断发生时这些位发生变化
中断禁止位
当I=1时禁止IRQ中断,当F=1时禁止FIQ中断。T控制位
T=0表示执行ARM指令。T=1表示执行Thumb指令(armv4)。 T=1表示强制下一条执行的指令产生未定义指令中断(armv5)。M控制位
控制位M[4:0]控制处理器模式。
ARM体系中的存储空间
ARM体系使用单一的平板地址空间。
- 地址空间的大小为2^32个8位字节。
- 这些字节单元的地址是一个无符号的32位数值,其取值范围为0到2^32-1。
- ARM的地址空间也可以看作是2^32个32位的字单元。
- 这些字单元的地址可以被4整除,也就是说该地址的低两位为0b00。
- 地址为A的字数据包括地址为A,A+1,A+2,A+3 4个字节单元的内容。
在ARM版本4及以上的版本中,ARM的地址空间也可以看作是2^31个16位的半字单元。
- 这些半字单元的地址可以被2整除,也就是说该地址的最低位为0b0。
- 地址为A的半字数据包括地址为A,A+1两个字节单元的内容。
ARM存储器格式
- big-endian
- little-endian