如何在ARM组件中找到DWORD中的第一个逻辑单元



我想知道如何在带有寄存器R0和r1的dword中找到第一个逻辑单元(单个位(,例如,从右到左。我该如何实现上述?

我尝试通过dword的元素进行迭代,但我似乎并不理解我的期望。还试图向右移动,总体上没有运气。

MOV R2, R0, LSR #31
loop:
MOVS R0, R0, LSL #2
ADC R2, R2, R0, LSR #31
bne loop

我想使用先前描述的查找单个位的当前索引

您可以使用CLZ来计算领先的零。通过从31减去领先的零,您可以在字节中获取第一个1的位置。

CLZ R1, R0
RSB R1, R1, #31

R0包含您要处理的DWORD
R1最后包含"第一个逻辑单元"。

CLZ指令计算RM中值的领先零的数量,并返回RD中的结果。如果在源寄存器中未设置位,则结果值为32,如果设置位31,则零。

当将S可选后缀添加到RSB时,条件标志将被更新并可以检测到#0寄存器。

相关内容

最新更新