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 状态。

转载于:https://www.cnblogs.com/auleaf/archive/2011/09/19/2180890.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值