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. classpath: VS classpath*:

    同名资源存在时,classpath: 只从第一个符合条件的classpath中加载资源,而classpath*: 会从所有的classpath中加载符合条件的资源 classpath*:需要遍历所有的 ...

  2. ASP.NET Identity 简介

    翻译自:http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity ,略有改动. 背景:A ...

  3. Couchbase的安装步骤

    本指南将在几分钟内让你上手,探索关联APP,在命令行shell 中删除一些实例查询,并尝试查询工作台. 下载Couchbase Server 下载地址:http://www.couchbase.com ...

  4. the pipeline of call SNP

    ######################################## ############### Mapping ################ ################## ...

  5. 【bzoj4514】 Sdoi2016—数字配对

    http://www.lydsy.com/JudgeOnline/problem.php?id=4514 (题目链接) 题意 n个数,每个数值为a[i],有b[i]个,权值为c[i].若两个数能配对当 ...

  6. Theano: CNMeM is disabled, CuDNN not available

    Problem Theano: CNMeM is disabled, CuDNN not available Solution cnmem package: https://github.com/NV ...

  7. 在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题

    今天在写为一些project 写 一些junit  test  的时候,出现下面的异常: java.lang.UnsupportedClassVersionError: moneytest/Money ...

  8. JMS开发步骤和持久化/非持久化Topic消息

    ------------------------------------------------ 开发一个JMS的基本步骤如下: 1.创建一个JMS connection factory 2.通过co ...

  9. JavaScript模板引擎原理,几行代码的事儿

    一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age% ...

  10. 使用http.sys,让delphi 的多层服务飞起来

    核心提示:一直以来,delphi 的网络通讯层都是以indy 为主,虽然indy 的功能非常多,涉及到网络服务的各个方面,但是对于大多数多层服务来说,就是需要一个快速.稳定.高效的传输层.Delphi ...