检查ax中的位数

时间:2017-11-07 15:43:19

标签: assembly x86 bits

我需要找到一种方法来检查ax寄存器中当前(1)的位数。我想在shl或shr中使用,但我不知道我想用它们到底是怎么回事。到目前为止,这是我的代码:

org 100h

mov ax, 0xffffh
;shr ax TO DO

int 16h
ret

我在某个地方发红,右移功能可以将位移到右边。所以我可以尝试使用它来推动"每次16位向右,然后检查LSB 1或0标志?这对我来说是个好主意。

2 个答案:

答案 0 :(得分:2)

使用popcnt指令:

popcnt bx,ax

这将bx设置为ax中设置的位数。您需要一个稍微近期的CPU才能使用此指令。

答案 1 :(得分:1)

移位位进入CF(进位标志),因此一个解决方案是每次移位后每次检查CF = 1然后递增一个计数变量,该变量将告诉最后的ON位数。

相关问题