ARM 汇编指令:BEQ

ARM 汇编指令:BEQ

本文来自于我关于 ARM 汇编指令系列文章。欢迎阅读、点评与交流~
1、汇编指令在不同架构中的联系与区别
2、ARM 汇编指令:MOV
3、ARM 汇编指令:LDR
4、ARM 汇编指令:STR
5、ARM 汇编指令:MRS 和 MSR
6、ARM 汇编指令:ORRS
7、ARM 汇编指令:BEQ
8、ARM 汇编指令:TST

BEQ 是 ARM 汇编中的条件分支指令 ,全称为 Branch if Equal(相等时跳转)。

基本功能

  • 作用 :根据 CPSR(当前程序状态寄存器)中的 Z(Zero)标志位 进行条件跳转
  • 执行条件 :当 Z=1 时跳转(即前一条指令的结果为 0
  • 应用场景 :通常跟在 CMP(比较)或 SUBS(带标志位的减法)指令后面

语法格式

assembly 复制代码
BEQ label      ; 如果 Z=1,跳转到 label 处执行

工作原理

assembly 复制代码
CMP R0, R1     ; 比较 R0 和 R1,计算 R0 - R1,设置标志位
BEQ equal      ; 如果 R0 == R1(结果为零),跳转到 equal 标签
; ...          ; 如果不相等,继续执行这里

典型使用示例

示例1:简单比较
assembly 复制代码
CMP R0, #10     ; 比较 R0 和 10
BEQ is_ten      ; 如果 R0 == 10,跳转到 is_ten

MOV R1, #0      ; 不相等时执行
B continue      ; 跳过相等的情况

is_ten:
MOV R1, #1      ; 相等时执行

continue:
; 继续执行...
示例2:循环控制
assembly 复制代码
MOV R0, #0       ; 计数器初始化为 0
loop:
ADD R0, R0, #1   ; R0 = R0 + 1
CMP R0, #5       ; 比较 R0 和 5
BEQ loop_end     ; 如果 R0 == 5,跳出循环
; 循环体...
B loop           ; 继续循环
loop_end:
; 循环结束
示例3:与 SUBS 配合使用
assembly 复制代码
MOV R0, #5       ; R0 = 5
loop:
SUBS R0, R0, #1  ; R0 = R0 - 1,并设置标志位
BEQ done         ; 如果 R0 == 0,跳转到 done
; 循环体...
B loop           ; 继续循环
done:
; 结束

BNE 的对比

assembly 复制代码
CMP R0, R1
BEQ equal        ; 相等时跳转
BNE not_equal    ; 不相等时跳转

底层原理

  • 标志位设置CMP 实际上执行减法并丢弃结果,只更新标志位
  • Z 标志位
    • Z=1:结果为零 → 两个操作数相等
    • Z=0:结果非零 → 两个操作数不相等
  • 跳转范围BEQ 使用相对地址跳转,通常范围是 ±32MB

实际应用场景

  1. 条件判断:实现 if-else 逻辑
  2. 循环控制:实现 for/while 循环
  3. 错误检查:检查返回值是否为零
  4. 状态验证:验证寄存器值是否符合预期

注意事项

  • BEQ 检查的是 Z 标志位 ,不一定需要 CMP 指令
  • 任何设置标志位的指令(如 ADDS, SUBS)都可以作为条件
  • ARM 中条件执行很灵活,很多指令都可以加条件后缀
assembly 复制代码
; 另一种写法:使用条件指令代替分支
CMP R0, #0
MOVEQ R1, #1     ; 如果 R0 == 0,则 R1 = 1
MOVNE R1, #0     ; 如果 R0 != 0,则 R1 = 0

这就是 ARM 中 BEQ 指令的基本用法和原理。它是 ARM 条件执行体系的重要组成部分,能够实现高效的条件分支逻辑。

相关推荐
华清远见IT开放实验室14 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
执迷不悟82319 小时前
ARM--按键/中断
arm开发
维基框架20 小时前
汽车座舱开发上云 Google的Arm实例解决了什么实际问题
arm开发·人工智能·汽车
Discipline~Hai3 天前
ARM01-ARM体系架构
linux·c语言·arm开发·架构
weixin_446260853 天前
ARM++:面向深度伪造检测器的多域智能体协同可迁移对抗攻击框架
arm开发·人工智能
执迷不悟8233 天前
ARM--启动实现LED
arm开发
linux修理工4 天前
在 ARM 架构的 Armbian 系统上搭建 Strudel 开发环境
arm开发
程序员JerrySUN4 天前
Jetson 刷机深度解析:flash.sh vs l4t_initrd_flash.sh(含安全与磁盘加密对比)
linux·网络·arm开发·安全·系统安全
执迷不悟8235 天前
ARM--汇编指令
汇编·arm开发
2601_954706495 天前
算力上云革新移动终端:ARM 虚拟化云手机底层原理、API 自动化实战与 2026 选型全解
arm开发·智能手机·自动化