ARM 处理器拥有 37 个寄存器。 这些寄存器按部分重叠组方式加以排列。 每个处理器模式都有一个不同的寄存器组。 编组的寄存器为处理处理器异常和特权操作提供了快速的上下文切换。

提供了下列寄存器:三十个 32 位通用寄存器、程序计数器 (pc)、应用程序状态寄存器 (APSR)、保存的程序状态寄存器 (SPSR)

  • 三十个 32 位通用寄存器

在任一时刻都存在十五个通用寄存器,它们分别是 r0-r12、sp、lr。
sp (或 r13)是堆栈指针。 C 和 C++ 编译器始终将 sp 用作堆栈指针。 建议您不要将 sp 用作通用寄存器。
在用户模式下, lr (或 r14)用作链接寄存器 (lr),用于存储调用子例程时的返回地址。 如果返回地址存储在堆栈上,则也可将 r14 用作通用寄存器。
在异常处理模式下, lr 存放异常的返回地址;如果在一个异常内执行了子例程调用,则 lr 存放子例程的返回地址。如果返回地址存储在堆栈上,则可将 lr 用作通用寄存器。

其中:未备份寄存器(The unbanked registers) , R0~R7。当处理器模式切换时, 未备份寄存器指的是同一个物理寄存器, 所有可能造成寄存器中数据被破坏. 
备份寄存器(The banked registers) , R8~R14。

对于R8~R12, 每个寄存器对应2个不同的物理寄存器。如:快速模式下,R8对应R8_fiq;用户模式下,R8对应R8_usr. 这两种情况下, 使用的是不同的物理寄存器. 
对于R13,R14, 每个寄存器对应6个不同的物理寄存器。其中用户模式和系统模式下是共用一个物理寄存器。其它5种处理器模式分别使用: R13_<mode>, R14_<mode>来表式. 
R13在ARM中常用作栈指针. 每一种异常模式拥有自己的物理R13. 应用程序去初始化该R13, 使其指向该异常模式专用的栈地址. 
R14又称连接寄存器(Link Register, LR), 在ARM中有以下2个作用
1) 每种模式有自己的物理R14,  存放当前子程序的返回地址.  当通过BL或BLX指令调用子程序时, R14被设置成该子程序的返回地址.  子程序中, 当把R14的值复制到程序计数器PC中时, 子程序返回.

例: 
MOV PC , LR    #把R14的值复制到程序计数器PC中
BX LR             #
STMFD SP! , { <registers>,LR }   #在子程序入口将PC保存到栈中
LDMFD SP!, { <registers>,PC }    #子程序返回

2) 异常中断发生时, 该异常模式特定的物理R14被设置成该异常模式将要返回的地址.

  • 程序计数器 (pc)

程序计数器被当作 pc (或 r15)进行访问。 在 ARM 状态下,它对每个指令以一个字(四字节)为增量递增,在 Thumb 状态下则按所执行指令的大小递增。 跳转指令将目标地址加载到 pc 中。 您也可以使用数据操作指令来直接加载 PC。
例如,若要从子例程返回,可以使用以下指令将链接寄存器复制到 PC 中:
MOV pc,lr
在执行期间, pc 不包含当前执行的指令的地址。 在 ARM 状态下,当前执行的指令的地址通常是 pc–8,而在 Thumb 状态下通常是 pc–4。

  • 应用程序状态寄存器 (APSR)

APSR 存放算术逻辑单元 (ALU) 状态标记的副本。 这些标记用于确定是否执行条件指令。可在所有模式下使用 MSR 和 MRS 指令访问这些标记。

  • 当前程序状态寄存器 (CPSR)

CPSR 存放下列内容:
• APSR 标记
• 当前处理器模式
• 中断禁用标记
• 当前处理器状态(ARM、Thumb、ThumbEE 或 Jazelle)
• IT 块的执行状态位
执行状态位控制 IT 块中的条件执行(请参阅第4-114 页的IT),并且仅可用于ARMv6T2 及更高版本。
在所有模式下均可访问的标记只有 APSR 标记。 对于 CPSR 的其余位,只能在特权模式下使用 MSR 和 MRS 指令访问它们。

  • 保存的程序状态寄存器 (SPSR)

当发生异常时,使用 SPSR 来存储 CPSR。 在每种异常处理模式下,可访问一个SPSR。 用户模式和系统模式没有 SPSR,因为二者不是异常处理模式。

arm寄存器的更多相关文章

  1. ARM寄存器学习,王明学learn

    ARM寄存器学习 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式. ...

  2. ARM 寄存器的介绍

    ARM  寄存器  31个通用, 32个程序状态寄存器 怎么算的呢: (R0--R15)   16  +  7 + 8  =31 通用 程序状态寄存器:    6 个 共  37 个. 不分组寄存器: ...

  3. R0-R37它是Arm 寄存器,那是,CPU内部。和GPIO注册所有外设。换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO寄存器只有一个特定的芯片。

    R0-R37它是Arm 寄存器.那是,CPU内部.和GPIO注册所有外设. 换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO有. 版权声明:本文博主原创文章.博客,未经同 ...

  4. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    : 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...

  5. ARM寄存器介绍

    ARM处理器共有37个寄存器.其中包括:31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器.以及6个32位状态寄存器.但目前只使用了其中12位.ARM处理器共有7种不同的处理器模 ...

  6. ARM 寄存器

    ARM总共有37个寄存器 ARM寄存器物理分类 通用寄存器:1:不分组寄存器(R0--R7) 2:分组寄存器(R8-R14) 3:程序计数器(R15)(注意:又名pc指针) 程序状态寄存器:1:CPS ...

  7. Arm寄存器介绍及汇编基础

    一.ARM处理器支持7种工作模式 ① 用户模式(USR): 用于正常执行程序(The normal ARM program execution state) ② 快速中断模式(FIQ): 用于高速数据 ...

  8. arm寄存器解析

    寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖. 要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成 ...

  9. ARM 寄存器 和 工作模式了解

    一. ARM 工作模式 1.   ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2.  用户模式:非特权模式,大部分任务执行在这种模式 ...

  10. 小议ARM寄存器

    ARM微处理器一共有37个32位寄存器,其中包括31个通用寄存器和6个状态寄存器,但是这些寄存处不能同时访问.但是通用寄存器R14 - R0 ,程序计数器PC(即R15),程序状态寄存器都是可以任何时 ...

随机推荐

  1. log4j2日志模板

    log4j2.xml <?xml version="1.0" encoding="UTF-8"?> <!--设置log4j2的自身log级别为 ...

  2. 线段树-sum/max/min/区间更新

    写一个板子. #include <cstdio> #include <algorithm> using namespace std; +; #define ROOT 1, 1, ...

  3. P1177 【模板】快速排序(学完归并和堆排之后的二更)

    P1177 [模板]快速排序 不用说,连题目上都标了是一道模板,那今天就来对能用到的许多排序方式进行一个总结: 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理 ...

  4. iptables防火墙规则积累

    1.内网IP地址端口映射:    通过访问本机地址的3389端口,可以访问到192.168.1.139的远程桌面服务: -A PREROUTING -p tcp -m tcp --dport 3389 ...

  5. Unity 案例

    Unity 案例-用Unity 开发的产品 水电站管理.监控.培训系统 石油加工管理系统 房地产开发 污水处理系统 陆海空军事训练 城市和社区监控,管理系统 虚拟展馆 家庭自动化系统 石油加工管理系统 ...

  6. django环境部署 crm和路飞学城

    环境依赖 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-de ...

  7. HTML页面只能使用微信浏览器打开

    看到一个项目,刚开始还以为是APP,只能用微信打开.仔细看了下原来是个web项目,只是禁用了其他浏览器打开,只能用微信浏览器打开.加上前端页面用了类似mui的模板,就更像APP了. 百度了下,参考 h ...

  8. Python高级笔记(四) -- 多继承_方法解析顺序表MRO

    1. 多继承以及MRO顺序 1.1 单独调用父类的方法 # -*- encoding=utf-8 -*- class Parent(object): def __init__(self, name): ...

  9. expdp/impdp使用

    Oracle11G数据泵expdp/impdp使用并行与压缩技术备份与恢复 环境准备创建directory对象create or replace directory expdp_dir as '/ex ...

  10. 第十一节:WebApi的版本管理的几种方式

    一. 背景和方案 1. 多版本管理的概念 Android .IOS等 App 存在着多版本客户端共存的问题:App 最新版已经升级到了5.0 了,但是有的用户手机上还运行着 4.8.3.9 甚至2.2 ...