一、简介

(1)ARM Cortex系列处理器有40个32位的寄存器,其中包括33个通用寄存器和7个状态寄存器,40个中有18个可编程访问的寄存器
(2)寄存器被安排成部分重叠的组,在不同的工作模式处理器状态下,程序员可以访问的寄存器也不同
(3)分组的寄存器在处理处理器异常特权操作时可得到快速的上下文切换

二、8种处理器工作模式下实际访问的寄存器

( User用户模式 )

( System系统模式 )

( Supervisor管理模式 )

( Abort数据访问终止模式 )

( Undefined未定义指令中止模式 )

( IRQ外部中断模式 )

( FIQ快速中断模式 )

( Secure Monitor安全监控模式 )

三、通用寄存器(用于保存数据或地址值)

通用寄存器(R0-R15)可以分为三类:未分组寄存器R0-R7,分组寄存器R8-R14,程序计数器PC(R15)

(1)未分组寄存器R0-R7

1.对于每一个未分组寄存器来说在所有处理器模式下指的都是一个物理寄存器。
2.在异常中断造成的处理器模式切换时,由于不同的处理器模式下指的都是同一物理寄存器,可能造成未分组寄存器中数据破坏。
3.任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

(2)分组寄存器R8-R14

分组寄存器是指同一个寄存器名。在ARM微处理器内部存在多个独立的物理寄存器,每一个物理寄存器分别与不同的处理器模式相对应。
1.R8-R12两个分组的寄存器。一个用于FIQ模式,另一个用于其他7种工作模式。这样在发送FIQ中断时,可以加快FIQ的处理速度。
2.R13-R14分别有7个分组的物理寄存器。一个用于用户和系统模式。另一个用于其他六个分别用于六种异常模式。

(3)程序计数器PC(R15)

由于ARM体系结构采用了流水线机制(以三级流水线为例),对于ARM指令集来说,PC指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

补:(1)R13(SP) 堆栈指针寄存器

1.在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都用做堆栈指针寄存器。
2.但是在Thumb指令集中,有一些指令强制性地将R13作为堆栈指针寄存器,如堆栈操作指令。
异常处理程序负责初始化自己的R13,让其指向该异常模式专用的栈地址。

(2)R14(LR)连接寄存器
  • R14寄存器的两种特殊功能
    1.在每种工作模式下,模式自身的R14版本用于存放当前子程序的返回地址。在子程序返回时,把R14的值复制到PC。
    2.当异常中断发生时,R14被设置成该异常模式的返回地址。对于有些模式,R14的值可能与返回地址有一个常数的偏移量(如数据异常)。

  • R14寄存器与子程序调用操作流程
    1.程序A执行过程中调用程序B;
    2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;
    3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;

  • R14寄存器与异常处理
    1.异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移
    注:当发生异常嵌套时,这些异常之间可能会发生冲突。
    例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。
    2.异常处理流程:




解决办法:确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。

(3)寄存器R15为程序计数器PC

指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。
1.读R15的限制
正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。
2.写R15的限制
正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。
由于ARM指令以字为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:
在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;
在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。

四、程序状态寄存器

包含1个当前程序状态寄存器(CPSR)和6个备份的程序状态寄存器(SPSR)
每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。

ARM CortexA9寄存器组织相关推荐

  1. ARM寄存器组织与异常处理

    目录 一.ARM寄存器组织 1.寄存器 概念 作用 分类 2.ARM寄存器 3.专用寄存器 R15(PC,Program Counter) R14(LR,Link Register) R13(SP,S ...

  2. ARM处理器寄存器和汇编指令系统

    1.ARM的处理器模式 ARM体系结构支持7种处理器模式,分别是:用户.FIQ.IRQ.管理.中止(abort).未定义和系统模式.除了用户模式外,其余都称之为特权模式.除了用户和系统模式外,其余都称 ...

  3. ARM TTBR0TTBR1寄存器与ARM32页表复制。TTBR0TTBR1两寄存器在ARM,ARM32,ARM64linux中分页管理页表基地址的存放不同,CP15 CP2控制TTBR01附加协处理

    一,ARM TTBR0,TTBR1寄存器: 从ARMV6开始增加了TTBR1寄存器,但是在ARM32的时候,TTBR1寄存器未使用,原因如下: TTBR0和TTBR1寄存器只支持2G,1G,512M等 ...

  4. TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板

    创龙SOM-TL437x是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板,通过工业级B2B连接器引出千兆网口.HDMI.CAM ...

  5. 创龙TI Sitara列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器

    创龙SOM-TL437x是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板,通过工业级B2B连接器引出千兆网口.HDMI.CAM ...

  6. SOM-TL437x是基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板

    创龙SOM-TL437x是一款基于TI Sitara系列AM4376/AM4379 ARM Cortex-A9高性能低功耗处理器设计的工业级核心板,通过工业级B2B连接器引出千兆网口.HDMI.CAM ...

  7. 创龙科技Zynq-7010/20工业开发板(双核ARM Cortex-A9+A7)-性能及参数资料

    评估板简介 创龙科技TLZ7x-EasyEVM-S是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC评估板,处理器集成PS端双核ARM ...

  8. 三星S5P4418工控主板 (ARM Cortex-A9架构)

    产品简介 Gbox4418卡片电脑尺寸,差不多只是G4418开发板的三分之一,但它的功能相对于G4418开发板是有过之而无不及,几乎包括了G4418开发板所有外设功能,而且还板载VGA,USB WIF ...

  9. 创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA的 电源接口和拨码开关、JTAG仿真器接口

    TL437xF-EVM是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA设计的开发板,底板采用沉金无铅工艺的4层板设计,尺寸为240mm* ...

最新文章

  1. lingo 嵌套@for或嵌套@sum
  2. php开发用户登录模块,使用CodeIgniter开发用户登录注册模块
  3. 答辩完了该思考些什么
  4. Hyperopt TypeError: 'generator' object is not subscriptable
  5. openwrt安装编译
  6. SpringBoot整合Security安全框架、控制权限
  7. SOA理论与概念深入剖析
  8. linux文件测试操作
  9. 最新麦子学院33GWeb前端+Web前端开发从入门到精通完整版
  10. 高等数学(第七版)同济大学 习题1-10 个人解答
  11. elasticsearch.exceptions.SSLError: ConnectionError([SSL: CERTIFICATE_VERIFY_FAILED] certificate veri
  12. Flutter:实现iOS无证书打包ipa
  13. 信息技术与计算机课程标准,再谈新课程标准下的信息技术教学
  14. Ansys-热应力分析(间接法)-液体管路分析学习收获
  15. Postgresql逻辑复制报错could not start WAL streaming: ERROR: replication slot “x“is active for PID xxx
  16. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
  17. 蓝桥杯Python快速入门(4)
  18. 超越美国!中国AI初创企业融资额全球第一 人脸识别最受热捧【附报告全文】
  19. Modbus 的RTU、ASCII、TCP解析
  20. IISscanner暴力破解IIS网站目录

热门文章

  1. FD.io VPP软件架构(一):vppinfra(基础结构层)
  2. 二进制位运算---左移(<<)右移(>>)
  3. IROS 2021 | PTT:把Transformer应用到3D点云目标跟踪任务
  4. linux的rootkit工具包,Linux下rootkit后门检测工具chkrootkit
  5. 法律条文怎么翻译效果好
  6. 并发经验八年架构师:带你轻松解决缓存在高并发场景下的问题
  7. STM32CubeMX学习笔记(39)——FSMC接口使用(TFT-LCD屏触摸)
  8. 【matplotlib】matplotlib使用详解 使用python绘制漂亮的论文数据图
  9. (FOD网络:一种纤维取向分布角Supe的深度学习方法)阅读笔记
  10. java虚拟机编程_深入理解Java虚拟机(一)