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