☰
ARM 汇编 B / BL 核心区别
2026/10/17 2:32:58 网站建设 项目流程

1. 核心功能差异

B(Branch,单纯跳转)

  1. 只修改 PC,跳转到目标标号;
  2. 不保存返回地址到 LR (R14);
  3. 跳走后无法回到跳转指令下一条代码;
  4. 用途:死循环、分支跳转、永不返回的跳转(如中断复位、while (1))。

示例:

B loop ; 跳转到loop,一去不回 loop: ...

BL(Branch with Link,带链接跳转 = 函数调用)

  1. 跳转前自动执行:LR = 当前B/BL下一条指令地址;
  2. 再修改 PC 跳转到目标;
  3. 子程序末尾用MOV PC, LR即可返回调用处;
  4. 用途:调用子函数 / 子程序(C 语言函数调用底层就是 BL)。

示例完整调用:

BL delay_func ; 保存返回地址到LR,跳去delay_func ; 执行完delay_func后回到这一行继续运行 delay_func: ; 延时逻辑 MOV PC, LR ; 返回BL下一条指令

2. 硬件编码区分(bit24 L 位)

  • B:指令 bit24 = 0,无链接;
  • BL:指令 bit24 = 1,开启链接、写入 LR。

3. 寻址范围(两者完全一样)

ARM32 相对偏移 24 位有符号数,左移 2 位,跳转范围±32MB; 只能跳当前 32MB 内标号,超出要用 LDR PC,=addr 长跳转。

4. 对比表

指令是否存返回地址到 LR能否返回典型场景
B否不能死循环、if‑else 分支、复位跳转
BL是(自动保存)能子程序 / 函数调用

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询