news 2026/5/1 11:38:11

B 与 BL 区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
B 与 BL 区别

ARM 汇编 B 与 BL 的区别详解

核心区别

  • 功能B是无条件(或有条件)分支,仅改变程序流;BL(Branch with Link)在跳转前会把“下一条指令地址”写入R14(LR,链接寄存器),用于子程序调用后的返回。
  • 返回机制:使用BL调用后,通常用MOV PC, LRBX LR返回;B不保存返回地址,不能用于标准函数调用返回。
  • 典型用途B常用于段间跳转、条件分支、长循环或“永不返回”的入口;BL用于函数/子程序调用。

编码与寻址要点

  • 语法B{L}{}。是否保存返回地址由L决定; 为可选条件码(如EQ、NE),因此存在BEQ/BNE等条件分支。
  • 目标地址计算:指令中携带24 位有符号立即数,先符号扩展为32 位,再左移 2 位(按字对齐),与PC相加得到目标地址;有效跳转范围约为±32 MB(2^25 字节)。
  • PC 取值点:ARM 流水线使得取值时PC 通常指向当前指令地址 + 8;因此 BL 保存的是“下一条指令地址”(当前指令地址 + 4 的位置)。

典型用法与代码片段

  • 使用BL调用函数并在函数尾部返回:
    bl func ; 调用 func,返回地址自动写入 LR ; ... 其他代码 ... func: ; 若函数内还会调用别的函数,先保存 LR PUSH {R4-R7, LR} ; ... 函数体 ... POP {R4-R7, PC} ; 等价于 MOV PC, LR,函数返回
  • 使用B实现循环或永不返回的分支:
    loop: ; ... 循环体 ... b loop ; 跳回 loop(常见“死循环”写法) b reset ; 复位入口常用 B,因在 MMU/向量表早期阶段更稳妥
  • 条件分支示例(与CMP配合):
    cmp r0, #0 beq zero_handler bne non_zero_handler

建议

  • LR 覆盖:在BL调用的子函数中若再调用别的函数,需先保存 LR(入栈),否则返回地址会被覆盖;函数尾部用POP {…, PC}BX LR返回。
  • 长跳转需求B/BL是相对跳转,范围约±32 MB;若需跨更大地址空间,使用LDR PC, =label(文字池/绝对地址加载)或BX/BLX Rm等方式。
  • 状态切换:仅BL/BX/BLX涉及指令集状态切换;BLX会根据目标地址最低位bit[0]自动在ARM/Thumb间切换,BX LR同样可用于从 Thumb 状态返回。
  • 条件执行B/BL都支持条件码(如BEQ/BNE),可与CMP/TST等指令组合实现高效分支。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:26:41

自然语言处理容易混淆知识点(一)c-TF-IDF和TF-IDF的区别

c-TF-IDF 和 TF-IDF 什么是 c-TF-IDF?传统 TF-IDFc-TF-IDF(基于类的 TF-IDF) c-TF-IDF 的计算公式直观理解在 BERTopic 中的工作流程代码示例:使用 c-TF-IDF与传统 TF-IDF 对比c-TF-IDF 的优势自定义 c-TF-IDF 参数可视化 c-TF-ID…

作者头像 李华
网站建设 2026/5/1 8:30:53

AI时代裁员潮真相:是AI夺走了工作,还是企业转型的必然?

简介 文章探讨了科技行业裁员潮中AI的真实角色。AI虽提高效率降低成本,但经济下行、过度扩张和市场竞争也是重要因素。企业正进行战略转型,将资源从传统业务转向AI领域,这不仅是成本削减,更是人才结构重构。AI带来的是劳动力转型&…

作者头像 李华
网站建设 2026/5/1 7:28:17

GEO 3小问:一文搞懂 AI 搜索时代的 “品牌曝光关键”

1. 问:到底什么是 GEO?和传统搜索优化不一样吗?答:GEO 全称 “AI 搜索优化”,核心是让品牌精准出现在用户用 AI 提问的答案里 —— 比如用户问 AI “北京靠谱的装修公司”“国产好口碑奶粉”,GEO 能让你的品…

作者头像 李华
网站建设 2026/5/1 6:27:46

5、VXLAN与BGP EVPN的融合:数据中心网络的优化方案

VXLAN与BGP EVPN的融合:数据中心网络的优化方案1. VXLAN的优势与不足在当今的数据中心环境中,支持软件和硬件VTEP(虚拟隧道端点)的混合环境已成为常态。VXLAN(虚拟可扩展局域网)为解决网络扩展性差、增强网…

作者头像 李华
网站建设 2026/5/1 9:38:41

11、数据中心网络底层路由与多播流量处理解析

数据中心网络底层路由与多播流量处理解析1. 网络维护时的隔离操作在网络维护或其他可能造成干扰的操作期间,可通过关闭与网络虚拟边缘(NVE)或虚拟隧道端点(VTEP)关联的第一个环回接口,从底层路由的角度隔离…

作者头像 李华
网站建设 2026/5/1 6:25:21

前端项目打包详细,零基础入门到精通,收藏这篇就够了

项目打包命令为:npm run build 打包后会文件夹中自动生成一个dist文件 这个文件就是最终上传服务器的文件(或者将这个dist给后端) dist中的index打开是本地看不见什么的。如果想查看项目 ---- 1.在config目录中找到index。js build: { // …

作者头像 李华