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 dword [res], 0 inc [cnt] dog: test eax, eax jz next mov ebx, [k] mov edx, 0 div ebx mov [dig], edx mov eax, [res] imul eax, [k] add eax, [dig] 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` — это цикл, но в нём нет перехода к следующей итерации после вычислений, что приводит к бесконечному выполнению. Также после `div ebx` регистр `eax` содержит частное, но в цикле оно не сохраняется для последующего деления.