我需要找到一种方法来检查ax寄存器中当前(1)的位数。我想在shl或shr中使用,但我不知道我想用它们到底是怎么回事。到目前为止,这是我的代码:
org 100h
mov ax, 0xffffh
;shr ax TO DO
int 16h
ret
我在某个地方发红,右移功能可以将位移到右边。所以我可以尝试使用它来推动"每次16位向右,然后检查LSB 1或0标志?这对我来说是个好主意。
答案 0 :(得分:2)
使用popcnt
指令:
popcnt bx,ax
这将bx
设置为ax中设置的位数。您需要一个稍微近期的CPU才能使用此指令。
答案 1 :(得分:1)
移位位进入CF(进位标志),因此一个解决方案是每次移位后每次检查CF = 1然后递增一个计数变量,该变量将告诉最后的ON位数。