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
评论