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

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.mrgr.cn/news/50608.html

相关文章:

  • k8s worker 节点关机 sts 管理的 pod 无法迁移
  • kubernetes--配置管理和持久化存储
  • CentOS 7上安装MySQL客户端并进行配置
  • 景区展览馆客流统计系统实时显示在场人数
  • 深度学习实战94-基于图卷积神经网络GCN模型的搭建以及在金融领域的场景
  • 人工智能AI与机器学习ML基础入门
  • Linux 内核中USB鼠标枚举失败问题总结
  • 深入探索阿里巴巴关键字搜索商品API的返回值
  • 什麼是高速HTTP代理?
  • 数据库达人必备:MySQL面试精华1/100,解锁职场新高度
  • lwip多线程使用说明,注意事项
  • SQL 注入漏洞 - 学习手册
  • CM-connected
  • Linux初识:基本指令
  • Python爬虫必备的8大技巧,学习爬虫技巧必看!
  • 提升 C++ std::string 操作效率:善用 pop_back()
  • Qt-界面优化盒子模型(71)
  • 意外断电 导致docker 部署禅道 的mariadb 启动报错
  • FPGA中的双向信号inout与三态门
  • git--git reset