ARM的37个寄存器详解

来源:互联网 发布:中国对外贸易数据分析 编辑:程序博客网 时间:2024/06/11 12:13

这里写图片描述
ARM共有37个寄存器,都是32位长度
37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。

这里写图片描述

注意:System模式使用User模式寄存器。当ARM从用户模式(User)切换到快速中断模式(FIQ),寄存器r0~r7,r15是不变的,FIQ的寄存器r8~r14切换User模式下的同名寄存器。其它几种模式之间切换同理。

ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其它寄存器虽然名字相同但是在当前模式不可见。

对r13这个名字来说,在ARM中共有6个名叫r13(又叫sp)的寄存器,但是在每种特定处理器模式下,只有一个r13是当前可见的,其它的r13必须切换到它的对应模式下才能看到。这种设计叫影子寄存器。

寄存器的作用:

r13(sp)是堆栈(程序工作现场)指针,如果7种模式都是采用同一个堆栈指针的话,在某一个模式中,堆栈出现了问题,则会导致7种模式都奔溃,故7种模式的栈都是不同的。

r14(lr)是存储返回地址的。在用户模式跳到中断模式,然后再调回用户模式,就可以用该返回地址。中断模式下的函数调用也可以用到该返回地址。

r15(pc)是程序控制计数器,记录当前程序处理到哪里。所以CPU只有一个程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)

cpsr是程序状态寄存器,用来记录CPU运行状态,每个CPU都有一个

spsr是用来保存cpsr的

CPSR状态寄存器

这里写图片描述

中断禁止位:
I:普通中断
F:快速中断

条件位(自动运算):
N:ALU运算结果负位
Z:ALU运算结果负位
C:进位标志位
V:有溢出

CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)
CPSR中的I,F位和开中断、关中断有关

CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot代码中会使用汇编进行设置