Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 检查ax中的位数_Assembly_X86_Bits - Fatal编程技术网

Assembly 检查ax中的位数

Assembly 检查ax中的位数,assembly,x86,bits,Assembly,X86,Bits,我需要找到一种方法来检查ax寄存器中(1)上当前的位数。我想在shl或shr中使用,但我不知道应该如何确切地使用它们。这是我目前的代码: org 100h mov ax, 0xffffh ;shr ax TO DO int 16h ret 我在某个地方遇到了一个问题,右移功能可以将位向右移动。所以我可能应该通过每次尝试将16位“推”到右边,然后检查LSB1或0标志来使用它?对我来说这听起来是个好主意。移位的位进入CF(进位标志),因此一种解决方案是每次移位后,您都要检查CF=1,然后增加一

我需要找到一种方法来检查ax寄存器中(1)上当前的位数。我想在shl或shr中使用,但我不知道应该如何确切地使用它们。这是我目前的代码:

org 100h

mov ax, 0xffffh
;shr ax TO DO

int 16h
ret

我在某个地方遇到了一个问题,右移功能可以将位向右移动。所以我可能应该通过每次尝试将16位“推”到右边,然后检查LSB1或0标志来使用它?对我来说这听起来是个好主意。

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

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

使用
popcnt
指令:

popcnt bx,ax

这将
bx
设置为ax中设置的位数。但是,要使此指令可用,您需要一个较新的CPU。

使用
popcnt
指令:

popcnt bx,ax

这将
bx
设置为ax中设置的位数。不过,要使此指令可用,您需要一个较新的CPU。

是的,这是可能的。还要注意的是,
shr
将移位的位放入进位标志中,这样您就可以使用
adc
轻松地进行计数。当然还有更有效的算法。是的,这是可能的。还要注意的是,
shr
将移位的位放入进位标志中,这样您就可以使用
adc
轻松地进行计数。当然还有更有效的算法。除了条件跳转和增量之外,您还可以简单地使用立即数为零的
adc
。是的,这也可以是一种方法,而不是条件跳转和增量,您也可以简单地使用立即数为零的
adc
。是的,这也是一种方法^^