计算整数(MASM)的二进制表示中的1的数量

时间:2014-03-07 19:00:04

标签: assembly masm

所以我对汇编语言很陌生,我希望能得到一些帮助。我正在尝试计算整数的二进制表示中的1的数量。我相信我应该将寄存器移到我输入数字32次的位置,并且每次遇到1时都会递增。我应该跳转,如果它不是1则避免增加ebx。我还是初学者,所以我还在学习MASM语法,但到目前为止我还是这样:

    xor ebx, ebx
    mov ecx, 32

shifting:
    shl eax, 1
    jc $+2
    inc ebx
    loop shifting

1 个答案:

答案 0 :(得分:3)

建议不要使用$+2,请使用标签。请注意,jc $+2不执行任何操作,因为指令本身长度为2个字节,因此在任何一种情况下它都会继续。此外,当设置该位时,您正在跳过递增计数器,因此您将计算零位。正确的代码可能如下所示:

    xor ebx, ebx
    mov ecx, 32

shifting:
    shl eax, 1
    jnc skip_inc
    inc ebx
skip_inc:
    loop shifting