B:Branch,跳转
BL:Branch with link,跳转,跳转前将返回地址保存在LR寄存器中
BX:Branch and EXchance,跳转并且转换指令集,看跳转地址的BIT0位。(BIT0=0,即为ARM指令集32位指令;BIT0=1,即为Thumb指令集16位指令)。
BLX:Branch and EXchance,跳转,跳转前将返回地址保存在LR寄存器中,并且转换指令集,看跳转地址的BIT0位。(BIT0=0,即为ARM指令集32位指令;BIT0=1,即为Thumb指令集16位指令)。
1.B指令示例:源码为 “source\02_录制视频时现场编写的源码\02_VisUAL\b.S”
B Delay
Delay
MOV R0, #5
Loop
SUBS R0, R0, #1
BNE Loop
MOV R1, #1
2. BL指令示例:源码为 “source\02_录制视频时现场编写的源码\02_VisUAL\bl.S”
BL Delay ; 跳转前把返回地址保持在LR寄存器里
MOV R1, #1
Delay
MOV R0, #5
Loop
SUBS R0, R0, #1
BNE Loop
MOV PC, LR ; 把LR赋给PC,返回
下面的这种写法是直接调用地址的写法。就是直接给PC地址,然后设置好我们的返回地址:就是跳转的程序执行完毕以后,再将LR寄存器里面的值赋值给PC
源码为 “source\02_录制视频时现场编写的源码\02_VisUAL\pc.S”
ADR LR, Ret ; 伪指令,读取Ret标号的地址赋给LR,这是返回地址
ADR PC, Delay ; 伪指令,读取Delay标号的地址赋给PC,直接跳转
Ret
MOV R1, #1
Delay
MOV R0, #1000
Loop
SUBS R0, R0, #1
BNE Loop
MOV PC, LR ; 把LR赋给PC,返回