ARM寄存器组

寄存器:

中央处理器内的组成部分,有限存储容量的高速存贮部件,用来暂存指令、数据和地址。
CPU的控制部件中,包含的寄存器有SP(堆栈指针寄存器)和PC(程序计数器)。
以ARM Cortex-A8架构为例,共有37个寄存器,包括31个通用32位寄存器,6个状态寄存器,如图所示:

以下分别对通用寄存器与状态寄存器进行介绍。

通用寄存器:
R0~R7:
真正的通用寄存器(所有运行模式下都指向同一个物理寄存器)
R8~R14:
R8~R12每个寄存器对应2个不同的物理寄存器(公用和快速中断模式)
R13~R14每个寄存器对应6个不同的物理寄存器(用户模式和系统模式公用)
R13(SP):堆栈指针(习惯用法,也可以用其他寄存器的,但一般不这样做)
R14(LR):链接寄存器
                      LR的两种特殊用法:
                                                              ①保存子程序返回地址(编译程序时可预知)
                                                      执行BL或BLX等跳转指令时,自动把PC-4(子程序返回地址)放进LR中,即下一条指令。
                                                       子程序中通过 mov PC,LR 实现返回。 
                                                              ②异常(中断)发生时,保存返回地址(不可预知的,因为不知道在哪会被打断)
                                                      对于有些异常模式,LR的值可能与将返回的地址有一个常数的偏移量。
                                                      比如在外部中断发生时,硬件自动完成LR=PC-4,我们要手动完成LR=LR-4
R15(PC):
位【1:0】为0     位【31:2】用于保存PC
          PC指向正在取指的指令
          译码地址:PC-4
          执行地址:PC-8

状态寄存器:
CPSR(Current Program Status Register):
当前程序状态寄存,用来保存当前程序状态,所有处理模式下都可以访问。
SPSR(Saved Program Status Register):
保存程序状态寄存器。
①保存ALU中的当前操作信息:异常发生→保存CPSR的值→返回→复制回CPSR
②控制允许和禁止中断:修改SPSR的值
③设置处理器的运行模式:修改SPSR的值
CPSR与SPSR的关系:



©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页