小议ARM寄存器
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寄存器的更多相关文章
- ARM寄存器学习,王明学learn
ARM寄存器学习 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式. ...
- ARM 寄存器的介绍
ARM 寄存器 31个通用, 32个程序状态寄存器 怎么算的呢: (R0--R15) 16 + 7 + 8 =31 通用 程序状态寄存器: 6 个 共 37 个. 不分组寄存器: ...
- R0-R37它是Arm 寄存器,那是,CPU内部。和GPIO注册所有外设。换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO寄存器只有一个特定的芯片。
R0-R37它是Arm 寄存器.那是,CPU内部.和GPIO注册所有外设. 换句话说,要是arm的cpu,它包含了其他芯片公司将有R0-R37,和GPIO有. 版权声明:本文博主原创文章.博客,未经同 ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
: 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...
- ARM寄存器介绍
ARM处理器共有37个寄存器.其中包括:31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器.以及6个32位状态寄存器.但目前只使用了其中12位.ARM处理器共有7种不同的处理器模 ...
- ARM 寄存器
ARM总共有37个寄存器 ARM寄存器物理分类 通用寄存器:1:不分组寄存器(R0--R7) 2:分组寄存器(R8-R14) 3:程序计数器(R15)(注意:又名pc指针) 程序状态寄存器:1:CPS ...
- Arm寄存器介绍及汇编基础
一.ARM处理器支持7种工作模式 ① 用户模式(USR): 用于正常执行程序(The normal ARM program execution state) ② 快速中断模式(FIQ): 用于高速数据 ...
- arm寄存器解析
寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖. 要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成 ...
- ARM 寄存器 和 工作模式了解
一. ARM 工作模式 1. ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2. 用户模式:非特权模式,大部分任务执行在这种模式 ...
随机推荐
- resin启动报错:guava-15.0.jar!/META-INF/beans.xml:5: <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> is an unexpected top-level tag. 异常
项目完成,经过本地的测试,最后在部署的时候,发现服务器resin启动失败,报错信息如下:
- LCA最近公共祖先 ST+RMQ在线算法
对于一类题目,是一棵树或者森林,有多次查询,求2点间的距离,可以用LCA来解决. 这一类的问题有2中解决方法.第一种就是tarjan的离线算法,还有一中是基于ST算法的在线算法.复杂度都是O( ...
- Lua和C++交互详细总结
转自:http://cn.cocos2d-x.org/tutorial/show?id=1474 一.Lua堆栈 要理解Lua和C++交互,首先要理解Lua堆栈. 简单来说,Lua和C/C++语言通信 ...
- shiro登陆后没有返回设置的successUrl?
第一次学习shiro的时候,并没有发现很大的问题.但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页 ...
- BZOJ 2179: FFT快速傅立叶
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2923 Solved: 1498[Submit][Status][Di ...
- 【BZOJ-3039&1057】玉蟾宫&棋盘制作 悬线法
3039: 玉蟾宫 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 753 Solved: 444[Submit][Status][Discuss] D ...
- 【bzoj4517】 Sdoi2016—排列计数
http://www.lydsy.com/JudgeOnline/problem.php?id=4517 (题目链接) 题意 求n个数中正好m个数位置不变的排列数. Solution $${错排公式: ...
- PostgreSQL Apt Repository
PostgreSQL Apt Repository If the version included in your version of Ubuntu is not the one you want, ...
- mysql-5.7日志设置
环境 Windows10企业版X64 mysql安装目录:D:\mysql-5.7.15-winx64. 在mysql安装目录下手工新建一个log目录:mysql\log. mysql\my.ini内 ...
- elasticsearch snapshot
一.Repositories 在elasticsearch.yml文件中增加path.repo路径配置: $ vim /etc/elasticsearch/elasticsearch.yml path ...