news 2026/6/15 20:56:47

ARM 汇编指令:B

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ARM 汇编指令:B

ARM 汇编指令:B

核心含义

BBranch的缩写,意思是无条件跳转。它会让程序的执行流程立即、无条件地跳转到指定的目标地址,继续执行。它是最基础、最常用的指令之一。

基本语法

B label
  • label: 一个符号(标签),代表程序中某个位置的地址。

工作原理

当执行到B指令时:

  1. 处理器计算出要跳转的目标地址(基于当前 PC 和标签的偏移量)。
  2. 将计算出的目标地址直接加载到程序计数器(PC)中。
  3. 下一条被执行的指令就是目标地址处的指令。

这相当于 C 语言中的goto语句。

示例

_start: MOV R0, #5 ; R0 = 5 B skip_add ; 无条件跳转到 skip_add 标签处 ADD R0, R0, #3 ; 这行指令会被跳过,不会执行 skip_add: MOV R1, #10 ; 跳转后从这里开始执行 ADD R2, R0, R1 ; R2 = R0 + R1 B . ; 跳转到自身,形成无限循环(常用于程序结尾)

主要用途

  1. 循环控制:跳转到循环开始处。

    loop_start: ... ; 循环体 SUBS R1, R1, #1 ; 更新计数器并设置条件标志 BNE loop_start ; 如果 R1 != 0,则继续循环

    这里BNE是条件跳转,但循环的闭合需要B或其它分支指令。

  2. 跳过代码块:用于条件判断中,跳过某些不执行的代码。

    CMP R0, #0 BEQ zero_case ; 如果等于0,跳转 ... ; 非零情况的处理 B end_if ; 无条件跳过“zero_case”的代码 zero_case: ... ; 等于0时的处理 end_if:
  3. 函数/过程调用(简单版):虽然更标准的调用用BL(带链接的分支,用于函数调用),但在某些简单场景或尾调用优化中,也可能直接用B

    ; 注意:使用 B 跳转到函数不会保存返回地址到 LR my_function: ... BX LR ; 函数返回 main: ... B my_function ; 跳转到函数,但无法返回!通常这是错误的,应用 BL my_function
  4. 程序流程的永久转移:例如,在启动代码或状态机中,从一个模式永久跳转到另一个主循环。

与相关指令的对比

指令全称行为用途
BBranch无条件跳转单纯的跳转,不打算返回
BLBranch with Link跳转前,将返回地址(PC+4)保存到链接寄存器 LR(R14)函数调用
BXBranch and eXchange跳转,并可切换 ARM/Thumb 指令集用于函数返回(BX LR)或跳转到状态未知的代码
Bcond(如BEQ,BNE)Conditional Branch根据条件标志(N,Z,C,V)决定是否跳转条件执行、循环、if-else

技术细节(针对经典 ARM 模式)

  • B指令的跳转范围是有限的。它是一个24 位有符号立即数指定的偏移量(以字为单位),因此跳转范围约为±32MB(相对于当前 PC)。
  • 如果需要在更大范围内跳转,通常需要借助其他指令(如LDR PC, =address)或通过寄存器间接跳转。
  • Thumb指令集中,B指令的编码和跳转范围有所不同(例如,Thumb 的B通常是 16 位指令,跳转范围更小)。

总结

B label就是告诉处理器:“别执行下一条指令了,马上去执行label那里的指令。”

它是控制程序流程最基础的构件,是所有条件分支和函数调用的基础。在阅读或编写汇编时,看到B,你就知道程序的控制流将在这里发生一次直接的、无条件的转移。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:49:44

收藏必备!AI进入“大模型思考+Agent行动“双引擎时代,零基础入门指南

AI 应用正在快速进入 “大模型(LLM)思考 Agent 行动” 的双引擎时代。• LLM 扮演“大脑”——理解意图、拆解任务、生成策略; • Agent 充当“四肢”——调用工具、编排流程、与环境实时交互。 两者以“思考-行动-观察-再思考”的闭环方式持…

作者头像 李华
网站建设 2026/6/15 11:47:09

吐血整理,性能测试-TPS和事务响应时间关系详情,一篇通透...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、TPS和事务响应…

作者头像 李华
网站建设 2026/6/15 11:44:55

Java毕设选题推荐:springboot基于顾客偏好的唯品会推荐系统设计与实现基于SpringBoot+协同过滤的电商商品推荐系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/15 1:19:39

DanceGRPO+FLUX:多模态生成强化学习模型的高效

一、背景介绍 Flux 模型:小模型高效生成高质量图像的基础 Flux 虽是百亿级参数的大模型家族,但其中的轻量化变体(如 Flux.1 (schnell))以及核心技术,为小尺寸模型提供了高效生成的范式。其关键技术优势适配小模型的优…

作者头像 李华
网站建设 2026/6/15 11:49:23

1.2 python及pycharm的安装

文章目录一、 下载安装包1.1 Python安装包1.2 PyCharm安装包1.3 PyCharm的设置二. 常见的问题及解决办法4.1 PyCharm无法启动4.2 PyCharm无法识别Python解释器4.3 PyCharm运行脚本时出错一、 下载安装包 1.1 Python安装包 从Python官方网站(https://www.python.or…

作者头像 李华