Online Compiler Nasm

extern io_get_dec extern io_print_dec extern io_print_char section .bss k resd 1 n resd 1 a resd 1 dig resd 1 cnt resd 1 d resd 1 res resd 1 section .text global main next: mov eax, [res] mov ebx, 2011 mov edx, 0 div ebx mov eax, edx mov ecx, [cnt] cmp ecx, [n] je finish imul eax, eax ;res = 0 ;while d > 0 ;dig = d / k ;res = res * k + dig mov [d], eax mov [res], 0 dog: test eax, eax jz next mov ebx, [k] mov edx, 0 div ebx mov [dig], eax mov eax, [res] imul eax, [k] add eax, [dig] inc [cnt] jmp dog main: call io_get_dec mov [k], eax call io_get_dec mov [n], eax call io_get_dec mov [a], eax mov [cnt], 0 mov [res], eax call next finish: call io_print_dec mov eax, eax ret
1) Этот код считывает три числа (k, n, a), затем выполняет итеративное преобразование числа `a` по определённому алгоритму, включающему возведение в квадрат и изменение системы счисления, пока счётчик не достигнет `n`. Результат выводится.

2) Подсказки:
- Обрати внимание, что в метке `dog` используется `eax`, но его значение могло измениться после операций деления — проверь, где нужно восстановить `eax` из `[d]`.
- Алгоритм внутри цикла `dog` похож на перевод числа в систему счисления с основанием `k`, но убедись, что счётчик `cnt` увеличивается корректно и не приводит к зацикливанию.