branch causes a branch to a target address. The "B" mnemonic signifies an unconditional branch.
单个的B表示进入一个无条件的分支,而含条件的分支通常可以基于APSR 条件flag进行指令的执行。比如,基于condition flag z是否为1, 我们可以进行BEQ结果的判断。
如下面代码
.global _start
_start:
mov r0, #4 ; Move the immediate value 4 into register r0
mov r1, #5 ; Move the immediate value 5 into register r1
cmp r0, r1 ; Compare the values in r0 and r1 (sets the APSR flags)
bgt cond1 ; Branch to label 'cond1' if r0 is greater than r1
b cond2 ; Unconditional branch to label 'cond2'
cond1:
mov r2, #1 ; If r0 > r1, move 1 into r2
cond2:
mov r3, #2 ; Always move 2 into r3
下面是各种条件分支的触发机制和与condition flag的关系。【2】
参考链接【2】
参考链接:
【1】Documentation – Arm Developer
【2】Documentation – Arm Developer