ARM 分支指令

分支指令主要用于改变程序的执行流,如函数调用、循环和条件分支等。

基本分支指令

  1. B <label>

无条件跳转到目标地址(偏移地址由立即数给出)。

b

  1. BL <label>

将返回地址保存到链接寄存器 LR,然后无条件跳转到目标地址(偏移地址由立即数给出),常用于函数调用。

bl

  1. BLR <Xn>

将返回地址保存到链接寄存器 LR,然后无条件跳转到由寄存器指定的目标地址。

blr

  1. BR <Xn>

无条件跳转到由寄存器指定的目标地址。

br

条件分支指令

  1. B.<cond> <label>

条件判断是否跳转到目标地址(偏移地址由立即数给出)。

b.cond

条件码的定义如下:

条件码 助记符 含义 CPSR 条件标志位
0000 EQ 相等 Z=1
0001 NE 不相等 Z=0
0010 CS/HS 无符号数大于等于 C=1
0011 CC/LO 无符号数小于 C=0
0100 MI 负数 N=1
0101 PL 非负数 N=0
0110 VS 上溢出 V=1
0111 VC 没有上溢出 V=0
1000 HI 无符号数大于 C=1 且 Z=0
1001 LS 无符号数小于等于 C=0 或 Z=1
1010 GE 有符号数大于等于 N=1 且 V=1 或 N=0 且 V=0
1011 LT 有符号数小于 N=1 且 V=0 或 N=0 且 V=1
1100 GT 有符号数大于 Z=0 且 N=V
1101 LE 有符号数小于等于 Z=1 或 N!=V
1110 AL 无条件执行
1111 NV v5 以上版本无条件执行

比较并分支指令

  1. CBZ <Xt>, <label>

如果指定的寄存器值为 0,则跳转到目标地址(偏移地址由立即数给出)。

cbz

  1. CBNZ <Xt>, <label>

如果指定的寄存器值不为 0,则跳转到目标地址(偏移地址由立即数给出)。

cbnz

  1. TBZ <Xt>, #<bit>, <label>

如果指定的寄存器的指定位为 0, 则跳转到目标地址(偏移地址由立即数给出)。

tbz

  1. TBNZ <Xt>, #<bit>, <label>

如果指定的寄存器的指定位不为 0, 则跳转到目标地址(偏移地址由立即数给出)。

tbnz

其他

  1. RET {<Xn>}

从函数返回,默认跳转到链接寄存器 LR 保存的地址,也可以指定寄存器返回。

ret

posted @ 2025-08-08 17:06  木杉的园子  阅读(47)  评论(0)    收藏  举报