ARM 分支指令
分支指令主要用于改变程序的执行流,如函数调用、循环和条件分支等。
基本分支指令
B <label>
无条件跳转到目标地址(偏移地址由立即数给出)。

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

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

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

条件分支指令
B.<cond> <label>
条件判断是否跳转到目标地址(偏移地址由立即数给出)。

条件码的定义如下:
| 条件码 | 助记符 | 含义 | 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 以上版本无条件执行 |
比较并分支指令
CBZ <Xt>, <label>
如果指定的寄存器值为 0,则跳转到目标地址(偏移地址由立即数给出)。

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

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

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

其他
RET {<Xn>}
从函数返回,默认跳转到链接寄存器 LR 保存的地址,也可以指定寄存器返回。


浙公网安备 33010602011771号