ARM 汇编 B / BL 核心区别

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 是(自动保存) 能 子程序 / 函数调用
相关推荐
女神下凡2 天前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
NamoAmitabha1282 天前
ARM Cortex-A9 核心架构(演化后的“缝合怪”)--deepseek
arm开发·zynq--ps
AllData公司负责人2 天前
AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地
大数据·arm开发·数据库·人工智能·oceanbase·kingbase
a5986524 天前
ARM服务器搭建云手机靠谱吗?个人自建方案优缺点总结
服务器·arm开发·智能手机·云手机
jiecy4 天前
在 ARM 的 UOS 系统里布署 WebDav
arm开发·docker·debian
女神下凡4 天前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
水饺编程4 天前
第2章:Linux 基础,解压缩【.tar.bz2】压缩包文件
linux·c语言·汇编
Zevalin爱灰灰4 天前
Linux入门第二部分(ARM裸机篇) 第二章 Cortex-A7 MPCore架构与ARM汇编基础
linux·汇编·arm开发·嵌入式
Zevalin爱灰灰4 天前
Linux入门第二部分(ARM裸机篇) 第三章 汇编LED驱动实验
linux·汇编·arm开发