当前位置: 首页 > article >正文

Cortex-A7:如何切换ARM和Thumb状态

0 参考资料

ARM Cortex-A(armV7)编程手册V4.0.pdf

1 Cortex-A7:如何切换ARM和Thumb状态

1.1 Cortex-A7支持的指令集

Cortex-A7支持的指令集包括ARM指令集和Thumb-2(ARM官方一般用Thumb表示)指令集。
ARM指令集指令大小都是32位,因此下一条指令地址是上一条指令地址+4。
Thumb-2指令集既支持16位指令也支持32指令,兼具了16位Thumb指令集体积小和ARM指令集高效的优点。
注:由于ARM官方将Thumb-2称作Thumb,后续Thumb均表示Thumb-2。

1.2 Cortex-A7支持的状态

从1.1中我们已经知道Cortex-A7支持2种指令集,与之对应Cortex-A7支持2种状态,分别是ARM状态、Thumb状态。在ARM状态下只能执行ARM指令,在Thumb状态下只能执行Thumb指令。实测如果不按照这种规则执行,程序直接跑飞、卡死。

1.3 如何切换ARM和Thumb状态

切换ARM和Thumb状态状态的方法有很多,常见的有修改PC指针值和使用BX跳转指令实现。本文以修改PC值和BX指令为例。

1.3.1 修改PC值切换ARM和Thumb状态

往PC中写数据就会引发一次程序的分支,写入数据bit0=1则切换到Thumb状态,如果bit0=0则切换到ARM状态。
下面是基于Cortex-A7的stm32MP135的.list文件,在IRQ中断发生时往PC写的值是IRQ中断服务函数入口地址+1,用于将处理器切换到Thumb状态(下图0xc000810c是IRQ中断服务函数入口地址,0xc000810d是IRQ中断发生时PC修改值):
在这里插入图片描述

1.3.2 使用BX指令切换ARM和Thumb状态

在这里插入图片描述
BX指令的参数bit0=1则切换到Thumb状态,bit0=0则切换到ARM状态。
BX指令用于子函数返回,关于BX的详细用法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一个使用BX指令的实例如下:
在这里插入图片描述


http://www.kler.cn/news/356990.html

相关文章:

  • Day3 线性表(Linear List)
  • 深入理解Reactor核心概念
  • 到底是微服务,还是SOA?
  • 探索免费音频剪辑软件的神奇功能
  • 信息收集2
  • 软件测试工程师:如何写出好的测试用例?
  • 《七度荒域:混沌之树》风灵月影二十二项游戏辅助:上帝模式/无限HP和EP/金币不减
  • 利用 OBS 推送 WEBRTC 流到 smart rtmpd
  • 数据结构--二叉树随记
  • IDEA中我常用的快捷键
  • 基于微信小程序的汽车预约维修系统(lw+演示+源码+运行)
  • 前端遮罩层的应用
  • 51单片机的智能电饭煲【proteus仿真+程序+报告+原理图+演示视频】
  • 基于DNA算法的遥感图像加解密matlab仿真
  • ElasticSearch集群搭建及常见问题(三节点)
  • MySQL去除空白字符(如非标准空格、制表符等)
  • STM32学习笔记---DMA
  • UE小:UE5的Pixelstreaming在捕获画面的时候没办法显示非Viewport的Slate区域按钮的ToolTip
  • 51单片机的仓库管理系统【proteus仿真+程序+报告+原理图+演示视频】
  • 一次使用LD_DEBUG定位问题的经历