×
单片机 > 单片机程序设计 > 详情

ARM与Thumb状态切换及其代码分析

发布时间:2020-06-04 发布时间:
|
Thumb指令在相比于ARM指令具有更高的代码密度,但是在运行效率上略低于ARM指令集,而且Thumb只是ARM指令集的一个子集。所有的ARM指令都是可以条件执行的,而Thumb指令仅有一条指令具备条件执行功能。所以很多应用程序需要两者的混合编程,因此存在ARM与Thumb状态之间相互切换,而且相互之间的状态切换的开销几乎为零。
ARM与Thumb之间的状态切换通过专用的转移交换指令BX来实现。BX指令以通用寄存器(R0~R15)为操作数,通过拷贝Rn到PC实现绝对跳转。BX利用Rn寄存器中目的地址值的最后一位判断跳转后的状态。
下面是一段直接进行状态切换的代码:
CODE32                        ;程序从ARM状态开始
   ADR r0, ThumbProg+1        ;跳转到ThumbProg
   BX r0                      ;程序切换到Thumb状态
 
CODE16                        ;Code16指示编译器后面为Thumb指令
ThumbProg
   MOV r2, #2
   MOV r3, #3
   ADD r2, r2, r3
   ADR r0, ARMProg
   BX r0                      ;跳转到ARMProg,程序切换到ARM状态
 
CODE32                        ;code32指示编译器后面为ARM指令
ARMProg
   MOV r4, #4
   MOV r5, #5
   ADD r4, r4, r5


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向