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

  ARM共有7种不同的处理器模式,在每一组处理器模式下都有一组相应的寄存器组。  在所有的运行模式下,未分组寄存器R0 ~  R7都指向同一个物理寄存器,他们未被系统用作特殊的用途,所以R0,R1,R2,R3,R4,R5,R6,R7都可以放心使用。

  但是由于不同的处理器运行模式(包括7中不同运行模式:用户模式usr,系统模式,特权模式,中止模式,未定义指令模式,中断模式,快速中断模式)均使用相同的物理寄存器,可能会造成寄存器中的数据的破坏,所以在切换不同模式时要注意保存当前寄存器的值。

  R0~R7为低地址寄存器,可以指定通用寄存器的所有指令访问,R8~R12为高地址寄存器,只能被指定通用寄存器的所有32位指令访问,而不能被16位指令访问。R8 ~ R12又称备份寄存器。对于R8 ~ R12来说每个寄存器对应两个不同的物理寄存器,对于R13和R14每个寄存器对应6个不同的物理寄存器。R13常用作堆栈指针寄存器,由于处理器的每种运行模式均有自己独立的物理寄存器R13(注:用户模式和系统模式下共享一个物理寄存器),所以用户在应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该模式下的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指的堆中,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。

  R14也称作子程序链接寄存器或者链接寄存器LR(Link Register).主要用于存放子程序的返回地址。

  R15寄存器R15常用作程序计数器,自作PC。注意:由于ARM采用流水线机制,程序计数器PC的值不是指向当前正在执行的指令,对于ARM指令集而言,PC总是指向当前指令的下 两条指令的 地址。即PC的值为当前指令的地址+ 8个字节。

  R16寄存器为当前程序状态寄存器(Current Program Status Register)CPSR 可以在任何模式下被访问。包括条件标志位,中断禁止位,当前处理器模式及其他状态和控制信息。每种异常模式都有一个程序状态寄存器,称为SPSR(Saved Program Status Register,属于备份的程序状态寄存器。)当异常发生时,SPSR用于保存CPSR的当前值,当从异常模退出时则可由SPSR来恢复CPSR.由于用户模式和系统模式不属于异常模式,所以它们没有SPSR.

总结:

  这样看来的话:R0 ~R7放心使用,R8~R12小心使用(而且只能被指定通用寄存器的32位指令访问,不能被16位指令访问),在快速中断模式下,访问的是R8_fiq ~ R12_fiq .在其余模式下访问的就是R8_usr ~ R12_usr.  R13,R14,R15,R16 ,系统都用于特殊用户就不要使用了。  但是在任何时候都可以访问这些寄存器,获取相应的信息。

参考:ARM嵌入式系统开发完全入门与主流实践。封景刚,吴宝江编著

小议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.  用户模式:非特权模式,大部分任务执行在这种模式 ...

随机推荐

  1. 结构体里的“位域”(bit-field)结构

    首先看一个题目: #include <iostream> using namespace std; #include <string.h> typedef struct AA{ ...

  2. CentOS 6.5安装在VMWare中Bridge模式下网卡eth0不能自动激活的问题

    VMWare 12.5.2 CentOS 6.5 basic VMWare网卡配置选择Bridge方式 问题: 默认情况下ifconfig命令只能看到网络设备lo,看不到eth0,也没有分配合理的IP ...

  3. sp_executeSql 用法

    今天遇到了一个难题 就是把 一个拼接sql语句 的返回值 赋值给一个变量 经研究 要用sp_executeSql这个存储过程 据说是从sql 2005才开始有的 代码如下: declare @str ...

  4. Windows简单几步实现系统自动关机设置

    首先按win+R快捷键打开“运行输入框”,也可以在电脑左下角打开“运行” 然后输入“Taskschd.msc” 接下来,就会弹出如下“任务计划程序” 点击操作,创建基本任务. 名称”和“描述”随便填一 ...

  5. NGUI Tween动画Scale与Transform冲突

    NGUI中我们要同时完成Scale与Transform的效果,会发现动画并不是同我们想的那样运行的. 原因就是Tween Scale与Tween Transform的冲突调用. Tween Scale ...

  6. jedis池的作用

    一.jedis池的介绍 相信大家都用过线程池或者是jdbc的连接池,使用池可以减少系统在使用所需对象时创建对象的开销,从而提高系统性能和效率.jedis池也是如此,那么我们该如何使用jedis池呢? ...

  7. Linux快速体验

    目录结构: /:根目录,根目录下一般只存放子目录,不存放文件./bin: 存放可执行的二进制文件,如常用的命令ls. tar.mv. cat等./boot: 存放linux系统启动时需要的一些文件./ ...

  8. Html:form表单

    1:onsubmit 事件:会在表单中的确认按钮被点击时发生. <form action="" method="post" name="form ...

  9. [NHibernate]代码生成器的使用

    目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...

  10. java8入门 错误:找不到或者无法加载主类

    如果你也遇上的这个问题,但是如果你的Java版本不是6以上,这个解决方案可能就不适合你... 最近在跟着李兴华老湿的视频<<编程开发入门Java 8>>的学习Java... 但 ...