【ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX】

文章目录

    • ARM64 无符号位域提取指令

上篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP
下篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别

ARM64 无符号位域提取指令

在代码中如何监控寄存器的某1bit, 或者某几bit
ARM 提供了一个汇编指令:UBFX 就可以用于该功能。

UBFX 有2种语法分别是对32bit 寄存器和64bit寄存器。

UBFX Wd, Wn, #lsb, #width ; 32-bit
UBFX Xd, Xn, #lsb, #width ; 64-bit

指令作用:从Wn寄存器的第lsb位开始,提取width位到Wd寄存器,剩余高位用0填充。

下面分析代码:

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

该段代码的意思是读取某个地址为0x18ac0000的32bit 寄存器,并判断该寄存器的bit0是否置位(0x1),如果没有置位则跳到标签 wait_rd继续查询。

其 C 代码实现如下:

void wait_rd(void)
{
	uint32_t addr = 0x18ac0000;
	
	while (read32(addr) & 0x1 == 0x0);
}

上篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP
下篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别

你可能感兴趣的:(#,ARM,常见汇编指令学习,arm开发,ARM64,UBFX,汇编指令,UBFX,ubfx,UBFX)