1、b )无条件转移
b命令是最简单的跳转命令。 B指令发出时,ARM处理器会立即跳到指定的目标地址,然后继续执行。 请注意,转移指令中存储的实际值是相对于当前PC值的偏移,而不是绝对地址,并且该值由汇编程序计算。
例如: B级; 程序无条件地跳转到标签Label并执行
2、BL )为了调用子程序而传送并连接,返回地址被存储在LR中
BL指令为带连接跳转,跳转前PC的当前内容会保存在寄存器R14中,因此通过将R14的内容重新加载到PC中,可以返回跳转指令的该指令处并执行。 该命令是实现子程序调用的基本,但也是常用的手段。 通常可以在子程序的末尾添加: MOV PC、LR使其返回
以下命令:
bl标签; 当程序无条件地跳转到Label并执行时,同时将当前的PC值保存在R14中
BX )带状态切换的跳转BX指令使程序跳转到指令指定的地址并执行程序。
BLX )带连接和状态切换的跳转BLX指令是BX和BL功能的组合,BLX指令从ARM指令集跳转到指令指定的目标地址,将处理器的动作状态从ARM状态切换到Thumb状态。 该命令同时将PC的当前内容保存在寄存器R14中。 因此,在子程序使用Thumb指令集且调用方使用ARM指令集的情况下,BLX指令可以实现子程序的调用和处理器操作状态的切换。
子程序的返回可以将寄存器R14的值复制到PC上。
最基本的无条件跳转命令有两个。
B级; 跳到Label的相应地址
BX reg; 跳到寄存器reg中给定的地址
调用子程序时,必须保存返回地址。 正确的命令如下。
bl标签; 跳转到Label对应的地址,将跳转前的下一个指令地址保存到LR
BLX reg; 跳转到寄存器reg中给定的地址,根据reg的LSB切换处理器的状态,
; 迁移前的以下命令地址也保存在LR中
执行这些命令后,返回地址存储在lr(r14 )中,可以以“BX LR”等形式返回。
注:
R14 :连接寄存器(LR ) )。
R15 :程序计数器(PC ) )