上篇文章: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 代码实现如下:文章来源:https://www.toymoban.com/news/detail-618401.html
void wait_rd(void)
{
uint32_t addr = 0x18ac0000;
while (read32(addr) & 0x1 == 0x0);
}
上篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP
下篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别文章来源地址https://www.toymoban.com/news/detail-618401.html
到了这里,关于【ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!