目录
跳转指令 B 使程序跳转到指定的地址执行程序。指令 BL 将下一条指令的地址复制到 R14(即返回地址连接寄存器 LR)寄存器中,然后跳转到指定地址运行程序。
B{L}{<cond>} <target_address>
① 程序跳转到 LABLE 标号处。
- B LABLE ;
- ADD R1,R2,#4
- ADD R3,R2,#8
- SUB R3,R3,R1
- LABLE: //pc会直接跳到这里执行
- SUB R1,R2,#8
② 跳转到绝对地址 0x7890处。
B 0x7890
③ 跳转到子程序 func 处执行,同时将当前 PC 值保存到 LR 中。
BL func
④ 条件跳转:当 CPSR 寄存器中的 C 条件标志位为 1 时,程序跳转到标号 LABLE 处执行。
- BCC LABLE ;
- ADD R1,R2,#4
- ADD R3,R2,#8
- SUB R3,R3,R1
- LABLE: //pc会直接跳到这里执行
- SUB R1,R2,#8
⑤ 通过跳转指令建立一个无限循环。
- LOOP:
- ADD R1,R2,#4
- ADD R3,R2,#8
- SUB R3,R3,R1
- B LOOP
⑥ 通过使用跳转使程序体循环 10 次。
- MOV R0,#10
- LOOP:
- SUBS R0,#1
- BNE LOOP
这里大家要注意,我要啰嗦一句:能够影响指令条件码的是CRSP的那几位,有符号减法,也会影响到CRSP,所以这里跳转指令B的条件码是被subs的结果所影响。
⑦ 条件子程序调用示例。
- …
- CMP R0,#5 ;如果 R0<5
- BLLT SUB1 ;则调用
- BLGE SUB2 ;否则调用 SUB2