arm处理器共有37个寄存器:
1) 31个通用寄存器,包括程序计数器(pc)。这些寄存器都是32位的;
2)6个状态寄存器。这些寄存器也是32位的,但是只使用了其中的12位。
arm通用寄存器
通用寄存器(r0-r15)可分为三类:不分组寄存器r0~r7;分组寄存器r8~r14;程序计数器pc。
1)不分组寄存器r0~r7
不分组寄存器r0~r7在所有处理器模式下,它们每一个都访问一样的32位寄存器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
2)分组寄存器r8~r14
分组寄存器r8~r14对应的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。
寄存器r8~r12各有两组物理寄存器:一组为fiq模式,另一组为除了fiq以外的所有模式。寄存器r8~r12没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器r13,r14各对应6个分组的物理寄存器,1个用于用户模式和系统模式,其它5个分别用于5种异常模式。寄存器r13通常用做堆栈指针,称为sp;寄存器r14用作子程序链接寄存器,也称为lr。
3)程序计数器pc
寄存器r15用做程序计数器(pc)。
arm程序状态寄存器
在所有处理器模式下都可以访问当前的程序状态寄存器cpsr。cpsr包含条件码标志,中断禁止位,当前处理器模式以及其它状态和控制信息。每种异常模式都有一个程序状态保存寄存器spsr。当异常出现时,spsr用于保存cpsr的状态。
cpsr和spsr的格式如表所示:
cpsr和spsr的格式
31
30
29
28
27
26~8
7
6
5
4
3
2
1
n
z
c
v
q
dnm ( raz )
i
f
t
m
1)条件码标志:
n,z,c,v大多数指令可以检测这些条件码标志以决定程序指令如何执行。
2)控制位:
最低8位i,f,t和m位用做控制位。当异常出现时改变控制位。当处理器在特权模式下也可以由软件改变。
中断禁止位:i置1则禁止irq中断;f置1则禁止fiq中断。
t位:t=0指示arm执行;t=1指示thumb执行。在这些体系结构系统中,可自由地使用能在arm和thumb状态之间切换的指令。
模式位:m0,m1,m2,m3和m4(m[4:0])是模式位,这些位决定处理器的工作模式,如表所示。
表arm工作模式m[4:0]
m[4:0]
模式
可访问的寄-存器
0b10000
用户
pc,r14~r0,cpsr
0b10001
fiq
pc,r14_fiq~r8_fiq,r7~r0,cpsr,spsr_fiq
0b10010
irq
pc,r14_irq~r8_fiq,r12~r0,cpsr,spsr_irq
0b10011
管理
pc,r14_svc~r8_svc,r12~r0,cpsr,spsr_svc
0b10111
中止
pc,r14_abt~r8_abt,r12~r0,cpsr,spsr_abt
0b11011
未定义
pc,r14_und~r8_und,r12~r0,cpsr,spsr_und
0b11111
系统
3)其他位
程序状态寄存器的其他位保留,用作以后的扩展。
arm核工作在用户模式,r0~r15可用。
存储器格式
arm体系结构将存储器看作是从零地址开始的字节的线性组合。字节零到字节三放置第一个字(word),字节四到字节七存储第二个字,以此类推。
arm体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。
大端格式
在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节则存放在高地址中
小端格式
在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节则存放在低地址中