ARM 汇编指令集之三——跳转指令
跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现 程序流程的跳转:Ⅰ.使用专门的跳转指令。 Ⅱ.直接向程序计数器 PC 写入跳转地址值。
通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任 意跳转,在跳转之前结合使用 MOV LR,PC 等类似指令,可以保存将来的返 回地址值,从而实现在 4GB 连续的线性地址空间的子程序调用。
ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址 空间的跳转,包括以下 4 条指令: 1、 B 指令 B 指令的格式为: B{条件}目标地址
B 指令是最简单的跳转指令。一旦遇到一个 B 指令,ARM 处理器将立即跳 转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相 对当前 PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算 (参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展 为 32 位,表示的有效偏移为 26 位(前后 32MB 的地址空间)。以下指令: B Label;程序无条件跳转到标号 Label 处执行 CMP
R1,#0;当 CPSR 寄存器中的 Z 条件码置位时,程序跳转到标号
Label 处执行
BEQ Label2、 BL 指令 BL 指令的格式为: BL{条件}目标地址
BL 是另一个跳转指令,但跳转之前,会在寄存器 R14 中保存 PC 的当前内容, 因此,可以通过将 R14 的内容重新加载到 PC 中,来返回到跳转指令之后的那 个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:
BL Label;当程序无条件跳转到标号 Label 处执行时,同时将当前的 PC 值 保存到 R14 中 3、 BLX 指令 BLX 指令的格式为: BLX 目标地址
BLX 指令从 ARM 指令集跳转到指令中所指定的目标地址,并将处理器的工 作状态有 ARM 状态切换到 Thumb 状态,该指令同时将 PC 的当前内容保存到 寄存器 R14 中。因此,当子程序使用 Thumb 指令集,而调用者使用 ARM 指令 集时,可以通过 BLX 指令实现子程序的调用和处理器工作状态的切换。同时, 子程序的返回可以通过将寄存器 R14 值复制到 PC 中来完成。 4、 BX 指令 BX 指令的格式为: BX{条件}目标地址
BX 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是 ARM 指令,也可以是 Thumb 指令。tips:感谢大家的阅读,本文由我司收集整编。仅 供参阅!