【ARM 常见汇编指令学习 4 -- ARM64 比较指令 cbnz 与 b.ne 区别】

文章目录

      • [B.NE 指令格式](#B.NE 指令格式)
      • [CBNZ 指令格式](#CBNZ 指令格式)

上篇文章:ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX
下篇文章:ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr

B.NE 指令格式

c 复制代码
B.NE <label>

B.NE指令的含义是:如果上一个指令的结果不等于零(即条件标志位Z为0),那么跳转到指定的地址。如果结果等于零,则继续执行下一个指令。

c 复制代码
wait_rd:
	ldr x7, =0x18ac0000
	ldr w9, [x7, #0x0]
	ubfx w9, w9, #0, #1
	cmp w9, #0x1
	b.ne wait_rd
	dsb sy
	isb

上面汇编代码是判断 w90x1 是否相等,cmp 指令 可以直接影响 CPSR 寄存器的Z 标识位(条件位),比较结果为 0 时,Z位置1,比较结果为非0时,Z位为0。跳转指令时根据上一条指令的执行结果来决定跳转

CBNZ 指令格式

32-bit variant

c 复制代码
cbnz <Wt>, <label>

64-bit variant

c 复制代码
cbnz <Xt>, <label>

其中 WtXt 是通用寄存器,寄存器的号码可以是 0-31。当这个寄存器的值非零时,那么执行跳转到的地址为:当前PC+label 偏移地址。

c 复制代码
	move x0, #0x5000
wait_nop:
	nop
	subs x0, x0, #0x1
	cbnz x0, wait_nop

如上面汇编代码,是使用汇编写的延时代码 ,在代码中判断 寄存器 x0 减去1之后是否为0,如果不为0,那么继续跳转到wait_nop标签处。

上篇文章:ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX
下篇文章:ARM 常见汇编指令学习 5 -- arm64汇编指令 wzr 和 xzr

相关推荐
fenglllle5 小时前
使用AI的能力编译ARM版本RDM
arm开发
BigDark的笔记7 小时前
【ARM汇编】0x01_ARM和C混合编程实现基本运算
c语言·汇编·arm开发
路溪非溪9 小时前
Linux下iw工具的使用总结
linux·网络·arm开发·驱动开发
路溪非溪11 小时前
关于Linux中的日志问题
linux·arm开发·驱动开发
老鱼说AI1 天前
《深入理解计算机系统》(CSAPP)2.2:整数数据类型与底层机器级表示
开发语言·汇编·算法·c#
与遨游于天地1 天前
从 BPF 到 eBPF:一场 Linux 内核的“可编程”革命
linux·运维·arm开发
Chuncheng's blog1 天前
Ubuntu 24.04 ISO国内镜像下载(ARM / AMD64)
arm开发·ubuntu
kang0x02 天前
汇编基础知识练习题
汇编
忆和熙2 天前
ARMv8异常的类型与处理
arm开发·arm异常
EnglishJun3 天前
ARM嵌入式学习(二) --- 入门51(中断)
arm开发·学习