实现跳转可以通过跳转指令,也可以直接设置PC(r15)寄存器的值。
语法:
B{cond} label
BL{cond} label
B跳转到标签处执行。BL将下一条指令的地址存储到r14(lr),然后跳转到标签处执行。
B/BL是相对PC寄存器的跳转,跳转范围为+/-32MB。
由于是PC-relative,因此产生的代码是position-independent的。
要从BL跳转后的子程序返回可以:
MOV pc, r14
or
BX r14 (on ARMv4T or later)
语法:
BX{cond} Rm
跳转到Rm寄存器指定的地址。
如果Rm寄存器的第0位为1,则CPSR寄存器的T标志被设置,新地址处指令为thumb指令。
第0位不是地址的一部分。
BLX指令在所有的T变种处理器或者ARMv5以上的处理可用。
语法
BLX{cond} Rm
BLX label
将下一条指令的地址保存到r14(lr)。
跳转到label或Rm寄存器的地址。
如果Rm的第0位为1,或者是label,则新指令是thumb指令。
BLX指令在所有的T变种处理器或者ARMv5以上的处理器可用。
参考:
ARM: Introduction to ARM: Branch Instructions
http://www.davespace.co.uk/arm/introduction-to-arm/branch.html
ARM branch instructions
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0231b/Chddgiff.html