小议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. 用户模式:非特权模式,大部分任务执行在这种模式 ...
随机推荐
- 跳转到某个Activity
跳转 Activity之间的跳转 可以依靠Intent 简单粗暴的办法是 Intent intent= new Intent(*.this, MainActivity.class); startAct ...
- Leetcode 144. Binary Tree Preorder Traversal
参考例子:[8,3,1,6,4,7,10,14,13] 8,3,1 和 6,4 说明从root开始,沿着左臂向下寻找leaf 的过程中应该逐个将node.val push入ans. class Sol ...
- 【bzoj1085】 SCOI2005—骑士精神
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 (题目链接) 题意 给出一个初始局面,问能否在15步内走到最终局面,并输出最少步数. Solu ...
- DOSBOX 自动挂载技巧
DOSBOX下载之后,win10已经不支持debug了(win-XP虚拟机有!),所以需要单独下载,每次使用都需要挂载上去,十分不方便. 解决办法是修改属性文件,每次挂载都自动执行: 把编写好的汇编文 ...
- IBatisNet使用教程
1.是数据持久层,对应.NET方向的有Ibatis.NET,只要用来处理数据库表结构和程序实体之间映射,ado.net是用来处理和数据库直接通信的,取出数据(object,int,string,da ...
- Java并发编程之阻塞队列
1.什么是阻塞队列? 队列是一种数据结构,它有两个基本操作:在队列尾部加入一个元素,从队列头部移除一个元素.阻塞队里与普通的队列的区别在于,普通队列不会对当前线程产生阻塞,在面对类似消费者-生产者模型 ...
- Character类
Character类 用来判断大小写 方法: public static boolean isUpperCase(char ch):判断是否大写 public static boolean isLow ...
- PHP Ajax 跨域问题最佳解决方案
本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是server.runoob.com. 如果直接使用 ...
- 谷歌地图地理解析和反解析geocode.geocoder详解
地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国 ...
- echarts统计图使用
网址:http://echarts.baidu.com 提示:不需要导入Jquery.js 使用: 1.导入js,echarts.js 2.创建容器 <!-- 为ECharts准备一个具备大小 ...