Online Compiler Nasm

extern io_get_dec, io_print_dec, io_newline, io_print_char section .text global main main: call io_get_dec mov ebx, eax ;N call io_get_dec mov ecx, eax ;K mov esi, 0 ;счетчик подходящих цифр mov edx, 0 ;от 1 до n .L1: ;все nки смотрим cmp edx, ebx add edx, 1 je .L5 mov eax, edx mov edi, 0 ;счетчик колва незначащих нулей .L2: cmp eax, 0 je .L1 and eax, 1 cmp eax, 0 jne .L3 add edi, 1 .L3: shr eax, 1 cmp edi, ecx jne .L4 add esi, 1 .L4: jmp .L2 .L5: mov eax, esi call io_print_dec xor eax, eax ret
1) Этот код читает два числа N и K, затем считает, сколько чисел от 1 до N (включительно) имеют ровно K незначащих нулей в двоичном представлении. Результат выводится.

2) Подсказки:
- Обрати внимание, что счётчик `edi` обнуляется для каждого проверяемого числа, но условие `cmp edi, ecx` выполняется внутри цикла обработки цифр, а не после его завершения — это может привести к неправильному подсчёту.
- После команды `and eax, 1` значение `eax` становится либо 0, либо 1, но затем `shr eax, 1` сдвигает это единственный бит, что ломает дальнейший анализ числа.