31 lines
389 B
NASM
31 lines
389 B
NASM
popcnt:
|
|
push bx
|
|
push cx
|
|
|
|
mov bx, ax
|
|
and ax, 0x5555 ; 8x 01
|
|
and bx, 0xaaaa ; 8x 10
|
|
sar bx, 1
|
|
add ax, bx
|
|
|
|
mov bx, ax
|
|
and ax, 0x3333 ; 4x 0011
|
|
and bx, 0xcccc ; 4x 1100
|
|
mov cl, 2
|
|
sar bx, cl
|
|
add ax, bx
|
|
|
|
mov bx, ax
|
|
and ax, 0x0f0f ; 2x 00001111
|
|
and bx, 0xf0f0 ; 2x 11110000
|
|
mov cl, 4
|
|
sar bx, cl
|
|
add ax, bx
|
|
|
|
add al, ah
|
|
xor ah, ah
|
|
|
|
pop cx
|
|
pop bx
|
|
ret
|