extern io_get_udec, io_print_udec, io_newline
section .bss
N resd 1
K resd 1
res resd 1
section .text
global main
main:
call io_get_udec
mov dword[N], eax
call io_get_udec
mov dword[K], eax
mov dword[res], 0
mov ebx, 1
.start:
cmp ebx, dword[N]
ja .print ; >N
mov eax, ebx
bsr ecx, eax; ecx = инд старшего бита
; если bsr=2 то mask=2^2-1=11
mov edx, 1
shl edx, cl
dec edx ; edx = 1111.. справа от старшего бита
; инвертируем и делаем маску
not eax
and eax, edx
popcnt eax, eax ; кол-во 1 (= кол-во знач 0)
cmp eax, dword[K]
jne .next
inc dword[res]
jmp .next
.next:
inc ebx
jmp .start
.print:
mov eax, dword[res]
call io_print_udec
call io_newline
xor eax, eax
ret