リスト2●任意の32ビット値の立っているビットを「計算」する方法
4ビット単位で処理する方法を32ビットに拡張した

unsigned int nValue = <ユーザーが入力した値>;
int nCount;

__asm{
    mov     eax, nValue     ;eax = nValue

    shld    ebx, eax, 31    ;ebx = eax >> 1
    and     ebx, 77777777h  ;ebx = ebx & 0x77777777
    shld    ecx, ebx, 31    ;ecx = eax >> 2
    and     ecx, 33333333h  ;ecx = ecx & 0x33333333
    shld    edx, ecx, 31    ;edx = eax >> 3
    and     edx, 11111111h  ;edx = edx & 0x11111111
    sub     eax, ebx        ;eax = eax - ebx
    sub     eax, ecx        ;eax = eax - ecx
    sub     eax, edx        ;eax = eax - edx

    shld    ebx, eax, 28    ;ebx = eax >> 4
    add     eax, ebx        ;eax = eax + ebx
    and     eax, 0f0f0f0fh  ;eax = eax & 0x0f0f0f0f

    shld    ebx, eax, 16    ;ebx = eax >> 16
    add     eax, ebx        ;eax = eax + ebx
    add     al, ah          ;al = al + ah
    and     eax, 0ffh       ;eax = eax & 0xff

    mov     nCount, eax     ;nCount = eax
}