在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。
        寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。
        寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。
        R14为链接寄存器(LR),在结构上有两个特殊功能:
        1,在每种模式下,模式自身的R14版本用于保存子程序返回地址;
        2,当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
        R14寄存器注意要点:
        当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。
        解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。
        寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。
        寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。(完)

ARM7寄存器分布图相关推荐

  1. DSP学习笔记之EPWM

    DSP学习笔记之EWPM学习 \qquad 学习PWM模块的知识,最少需要掌握频率可调.占空比可调.互补死区可调.多个PWM相位差可调等.内容较多,主要是参照英文手册中几个模块的介绍,内容很多,最基本 ...

  2. 树莓派3B上用Python编程获取TSL2561光传感器数据

    在树莓派3B上用Python编程,通过I2C协议,利用TSL2561光照强度传感器获取环境光强 嵌入式萌新一枚,文章有解释不清或者错误的地方希望大佬能在评论区指正,感激不尽! 大概原理: 通过TSL2 ...

  3. ARM7的相关寄存器

    本文转自百度文档 ARM7的相关寄存器     在汇编语言中寄存器 R0-R13 为保存数据或地址值的通用寄存器.它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令 ...

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

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

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

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  6. 强制生成32位arm程序_3. 从0开始学ARM-ARM模式、寄存器、流水线

    关于ARM的一些基本概念,大家可以参考我之前的文章: 到底什么是Cortex.ARMv8.arm架构.ARM指令集.soc?一文帮你梳理基础概念[科普] 一口网Linux:嵌入式工程师到底要不要学习A ...

  7. AD9516/AD9517时钟芯片寄存器参数配置说明

    目录 1 概述 2 界面参数设置 2.1 器件选择 2.2 参数设置 2.3 VCO的主要配置与关系 3 寄存器值 4 附录 5 AD9516_17_18 Eval Software 软件下载链接如下 ...

  8. ucos-ii在ARM7上移植

    随着嵌入式技术的快速发展,实时多任务操作系统作为一种软件平台已逐步成为国际嵌入式系统的主流,目前世界上已经有一大批成熟的实时嵌入式操作系统,通常,对嵌入式软件的基本要求是体积小.指令速度快.具有较好的 ...

  9. 寄存器地址和内存地址_3. 从0开始学ARMARM模式、寄存器、流水线

    关于ARM的一些基本概念,大家可以参考我之前的文章: <到底什么是Cortex.ARMv8.arm架构.ARM指令集.soc?一文帮你梳理基础概念[科普]> 关于ARM指令用到的IDE开发 ...

最新文章

  1. Python基础入门:常用的os操作
  2. SpringBatch处理器ScriptItemProcessor执行脚本语言详解
  3. 系列(六)—Linux命令
  4. python如何强制转换数据类型_python数据类型强制转换实例详解
  5. html图片标签和语义化标签和音频
  6. 连续不等_第九讲 函数的连续性与函数的间断点
  7. stm32l0的停止模式怎么唤醒_Mac外接显示器的显示模式怎么设置
  8. QT - 内存泄漏检测
  9. Java System类identityHashCode()方法及示例
  10. 圣诞节海报设计还没开始?感受下合适的节日感PSD模板
  11. java去除以张开头的人名_java正则表达式去除html中所有的标签和特殊HTML字符(以开头的)...
  12. Linux刚刚安装完anaconda,启动anaconda-navigator
  13. Go语言圣经阅读-第八周
  14. series 锐捷rgrsr20_锐捷路由器(RG-RSR20-04)清除密码的方法详解
  15. 2020计算机二级c语言答案,2020年全国计算机二级C语言考试试题分析
  16. ORA-01722:invalid number
  17. html实现背景图片自动更换,如何实现在HTML中更换或添加网站背景图片
  18. 网站加速教程--提升性能的同时节约10倍成本
  19. 乐行学院Redis5学习教程 第一章redis5的安装
  20. linux定时任务crond那些事!

热门文章

  1. linux卡在x windows,Linux下显卡配置错误 无法进入X Windows的解决
  2. ToString() 格式化字符串总结
  3. FJUT3703 这还是一道数论题(二分 + hash + manacher 或者 STL + hash 或者 后缀数组 + hash)题解...
  4. Test传送门(更新中)
  5. 【Redis】redis开机自启动、设置守护进程、密码设置、访问权限控制等安全设置(redis默认端口6379)...
  6. 20145319 第五周学习总结
  7. 【转】Win8/8.1/Win7小技巧:揪出C盘空间占用的真凶
  8. 写文件头的算法流程及C代码实现
  9. psql客户端乱码问题
  10. mysql多源复制相同数据库名称_mysql数据库多源复制方案