二、ARM寄存器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/life_hello/article/details/79974711
1、寄存器
ARM微处理器共有37个32位寄存器,其中31个位通用寄存器,6个为状态寄存器。但是这些寄存器不能同时被访问,具体哪些寄存器是可以访问的,取决于ARM处理器的工作状态及具体的运行模式。
但在任何时候,通用寄存器R14~R0、程序计数器PC(即R15)、一个状态寄存器都是可以访问的。

2、寄存器(ARM状态)
在ARM工作状态下,任一时刻都可以访问16个通用寄存器和一到两个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器,具体如图:

3、寄存器(Thumb状态)
Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。具体如图:

4、寄存器对应
Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:
Thumb状态下和ARM状态下的R0~R7是相同的。
Thumb状态下和ARM状态下的CPSR和SPSR是相同的。
Thumb状态下的SP对应于ARM状态下的R13
Thumb状态下的LR对应于ARM状态下的R14
Thumb状态下的程序计数器PC对应于ARM状态下R15

5、通用寄存器
-----------------------------------------------------
    R0~R15
     R13_svc、R13_abt、R13_und、R13_irq、R13_fiq
    R14_svcR14_abtR14_undR14_irqR14_fiq
------------------------------------------------------------
    1. 不分组寄存器(The unbanked registers)
R0 - R7
    2. 分组寄存器(The banked registers)
R8 - R14
    3. 程序计数器: R15(PC)

(1)不分组寄存器
R0 - R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。
未分组寄存器没有被系统用于特殊的用途,任何可采用通用寄存器的应用场合都可以使用不分组寄存器。
(2)分组寄存器
> 分组寄存器R8 - R12
1、FIQ模式分组寄存器R8 - R12
2、FIQ以外的分组寄存器R8 - R12
> 分组寄存器R13、R4
1、寄存器R13通常用作堆栈指针SP。
2、寄存器R14用作子程序链接寄存器(Link Register - LR),也称为LR,指向函数的返回地址。
(3)程序计数器
寄存器R15被用作程序计数器,也称为PC。其值等于正在执行的指令的地址+8(因为在取地址和执行之间多了一个译码的阶段)。

6、状态寄存器
-----------------------------------------------------
    CPSR
     SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq

------------------------------------------------------------

ARM所有工作模式下都可以访问程序状态寄存器CPSR

CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。

CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR
当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。






阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页