我想知道如何在带有寄存器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
寄存器。