1、B: 跳转。B label 满足条件立即跳转到Lable指定的地址执行。
例:B 0x1234 ;跳转到绝对地址0x1234处。
2、BL: 带链接的跳转。 首先将当前指令的下一条指令地址保存在LR寄存器,然后跳转的lable。通常用于调用子程序,可通过在子程序的尾部添加mov pc, lr 返回。
例:BL func ;跳转到子程序func处执行,同时将当前pc值保存到LR中。
3、BX: 带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。
例:BX R0 ;跳转到R0中的地址,如果R0[0]=1,则进入Thumb状态。
4、BLX: 带链接和状态切换的跳转。结合了BX与BL功能, 该指令为无条件执行指令。
操作:
BL 和 BLX 指令可将下一个指令的地址复制到 lr(r14,链接寄存器)中。
BX 和 BLX 指令可将处理器的状态从 ARM 更改为 Thumb,或从 Thumb 更改为 ARM。
BLX label 无论何种情况,始终会更改处理器的状态。
BX Rm 和 BLX Rm 可从 Rm 的位 [0] 推算出目标状态:
如果 Rm 的位 [0] 为 0,则处理器的状态会更改为(或保持在)ARM 状态
如果 Rm 的位 [0] 为 1,则处理器的状态会更改为(或保持在)Thumb 状态。
部分转载自:https://blog.csdn.net/zhaolina004/article/details/48035079