我有一個32位的數字,想算知道有多少位是1NASM:指望有多少位在32位的數字設置爲1
我想這個僞代碼:
mov eax, [number]
while(eax != 0)
{
div eax, 2
if(edx == 1)
{
ecx++;
}
shr eax, 1
}
有沒有更高效的方法?
我在x86處理器上使用NASM。
(我只是用匯編開始,所以請不要告訴我從圖書館的extern使用的代碼,因爲我甚至不知道如何將它們;))
(我剛剛發現How to count the number of set bits in a 32-bit integer?這也包含我的解決方案。還有其他的解決方案發布,但不幸我似乎無法弄清楚,我怎麼會用匯編語言編寫它們)
顯然,你不應該實際使用'div',[這是最慢的整數指令一個(https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster -than-MY-手寫具組件進行測試最collat/40355466#40355466)。只需用'test al,1'檢查EAX的低位。或'shr eax,1' /'adc ecx,0'將是實現該僞代碼的有效方式。 – 2018-02-19 14:54:31