0
点赞
收藏
分享

微信扫一扫

07跳转指令

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


举报

相关推荐

0 条评论