8.ARM寄存器详细解说

ARM寄存器的简单分类:图1-1:

ARM ESR_EL1寄存器_通用寄存器

图1-1

ARM微处理器中共有37个32位寄存器,其中31个通用寄存器,6个状态寄存器。但是这些寄存器不能被同时访问,在七种模式中,可以访问的寄存器种类不同。但是,通用寄存器R14——R0、程序计数器PC、一个状态寄存器cpsr都是可以被访问的。

具体的情况如下图1-2所示:

ARM ESR_EL1寄存器_通用寄存器_02

图1-2

寄存器分类:

    1、不分组通用寄存器:

R0-R7是不分组寄存器。所谓不分组就是在七种模式下的任意一种模式都访问同一个物理寄存器地址。就是不分组寄存器没有特权模式,任意一种模式都可以使用未分组寄存器。

    2.分组寄存器R8——R12:

FIQ模式分组寄存器R8——R12.

FIQ以外的分组寄存器R8-----R12

    3.分组寄存器R13、R14:

寄存器R13通常用做堆栈指针SP。

寄存器R14用做子程序链接寄存器(Link Register LR),也称为LR,指向函数的返回地址。

    4.程序计数器:

寄存器R15被用做程序计数器,也称为PC。其值等于当前执行的指令的地址+8(因为在取址和执行之间多了一个译码的阶段)。PC总是指向正在运行的后两条指令地址,即是当前执行指令的地址+8.

    5.状态寄存器:

图1-3:

ARM ESR_EL1寄存器_ARM ESR_EL1寄存器_03

图1-3

ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件标志位、中断控制位、当前处理器模式以及其他状态和控制信息。CPSR在每种异常模式下都有一个对应的物理寄存器----程序状态保存寄存器SPSR。当异常发生的时候,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。

CPSR状态寄存器的示意图:图1-4:

ARM ESR_EL1寄存器_程序计数器_04

图1-4

 

 

 

 

 

 

图1-5:

ARM ESR_EL1寄存器_通用寄存器_05

图1-5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ARM框架文档

ARM ESR_EL1寄存器_寄存器_06

31个通用寄存器,6个状态寄存器(一个cpsr,5个spsr)。

ARM ESR_EL1寄存器_寄存器_07

ARM ESR_EL1寄存器_通用寄存器_08

通用31个寄存器,被分为了三类:R0~R7,R8~R14,PC程序计数器(R15)。

 

ARM ESR_EL1寄存器_ARM ESR_EL1寄存器_09

R13常做堆栈指针的。

ARM ESR_EL1寄存器_寄存器_10

R14保存调用子函数的返回地址,和中断的返回地址。

ARM ESR_EL1寄存器_寄存器_11

用于程序计数器,pc指针。

cpsr:

ARM ESR_EL1寄存器_寄存器_12

 

 

 

 

 

 

 

 

 

解释:

ARM ESR_EL1寄存器_ARM ESR_EL1寄存器_13

ARM ESR_EL1寄存器_程序计数器_14

ARM ESR_EL1寄存器_ARM ESR_EL1寄存器_15

 

ARM ESR_EL1寄存器_寄存器_16

ARM ESR_EL1寄存器_程序计数器_17

ARM ESR_EL1寄存器_寄存器_18

ARM ESR_EL1寄存器_通用寄存器_19

ARM ESR_EL1寄存器_ARM ESR_EL1寄存器_20

我是一只菜鸟!FORFISH!