ILD

跳转指令
作者:HerbertYuan 邮箱:yuanjp89@163.com
发布时间:2017-9-25 站点:Inside Linux Development

实现跳转可以通过跳转指令,也可以直接设置PC(r15)寄存器的值。

1 B and BL

语法:

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)


2 BX

语法:

BX{cond} Rm


跳转到Rm寄存器指定的地址。

如果Rm寄存器的第0位为1,则CPSR寄存器的T标志被设置,新地址处指令为thumb指令。

第0位不是地址的一部分。


BLX指令在所有的T变种处理器或者ARMv5以上的处理可用。


3 BLX

语法

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


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.