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指令的实例如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NW嵌入式开发

感谢您的支持,让我们一起进步!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值