ARM状态和Thumb状态间的切换

带状态切换的跳转指令:BX

     汇编格式: BX{<cond>} Rm
     功      能: BX 指令跳转到指令中所指定的目标地址,并实现状态的切换。Rm 是一个表达目标地址的寄存器。当Rm 中的最低位Rm[0] 为 1 时,强制程序从ARM 指令状态跳到Thumb 指令状态;当 Rm 中的最低位Rm[0]为0 时,强制程序从Thumb 指令状态跳到ARM 指令状态。

BX 指令示例
     CODE32                                    ;ARM 程序段,32 位编码
     arm1   ADR R0,thumb1+1           ;伪指令,把语句标号thumb1 所在地址  
                                           ;赋给R0 ,末位R0[0] 置1 ,要跳转THUMB 指令集 
 
                                                     ;THUMB 指令集
      MOV LR,PC                             ;设置返回地址
      BX R0                                        ;跳转
      ADD R1,R2,#2                          ;返回地址处,第4 条指令
      CODE16                                    ;THUMB 程序段, 16 位编码
      thumb1  ADD R1,R3,#1           ;THUMB 程序
          …
      BX LR                                        ;跳转到返回地址处,执行第4 条指令

    分析:该例说明了带状态切换的子程序调用和返回的结构,ARM 程序段执行MOV LR,PC 语句时将返回地址保存到了LR 寄存器中。执行到BX 语句时 ,PC 指向下一个要执行的语句,此时PC(R15) 中的值为下一个语句ADD 指令所在的地址,并根据R0 中的bit[0] 实现了由ARM 状态切换到Thumb 状态。从而调用Thumb 子程序,子程序调用完后使用BX LR 指令,从而实现了子程序调用的返回并切换到ARM 状态。

posted @ 2011-09-19 08:49  auleaf  阅读(3013)  评论(0编辑  收藏  举报