今天检查实习生写的程序,发现他们对跳转指令有混用的现象,想给他们解释,于是重新复习了一下这几条跳转指令。
B :强制跳转
BL:带链接跳转,将下一个指令的地址复制到 lr(r14,链接寄存器)中。
BX:跳转并切换指令集,将下一个指令的地址复制到 lr(r14,链接寄存器)中。
BLX:带链接跳转并切换指令集,将下一个指令的地址复制到 lr(r14,链接寄存器)中,
BLX
无论何种情况,始终会更改处理器的状态 label:
BX
和 Rm
BLX
可从 Rm
的位 [0] 推算出目标状态:Rm
- 如果
的位 [0] 为 0,则处理器的状态会更改为(或保持在)ARM 状态Rm
- 如果
的位 [0] 为 1,则处理器的状态会更改为(或保持在)Thumb 状态。Rm
BXJ:跳转并转换到 Jazelle 状态 ,指令会将处理器的状态更改为 Jazelle
详细的可以到这里查询。
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Cihfddaf.html