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,返回









