J'ai un 32 numéro de Bit et que vous souhaitez compter savoir combien de bits sont 1.MSNA: Comptez le nombre de bits dans un nombre de 32 bits sont mis à 1
Je pense à ce pseudo-code:
mov eax, [number]
while(eax != 0)
{
div eax, 2
if(edx == 1)
{
ecx++;
}
shr eax, 1
}
Existe-t-il un moyen plus efficace? Je suis en utilisant NASM sur un processeur x 86.
(je suis juste en commençant par l'assembleur, donc s'il vous plaît ne me dites pas d'utiliser le code des bibliothèques externat, parce que je ne sais même pas comment les inclure;))
(Je viens de découvrir How to count the number of set bits in a 32-bit integer? qui a également contient ma solution.Il existe d'autres solutions publiées, mais malheureusement je n'arrive pas à comprendre, comment je les écrirais en assembleur)
Il est évident que vous ne devriez pas utiliser réellement 'div', [qui est l'un des plus lents instructions entières] (https://stackoverflow.com/questions/40354978/why-is-this-c-code-faster -than-ma-main-écrite-assembly-for-testing-the-collat / 40355466 # 40355466). Vérifiez simplement le peu de EAX avec 'test al, 1'. Ou 'shr eax, 1' /' adc ecx, 0' serait un moyen efficace d'implémenter ce pseudo-code. –