Online Compiler Nasm

extern io_get_udec, io_print_udec, io_print_string, io_newline section .data yes_str db 'Yes', 0 no_str db 'No', 0 section .text global main main: call io_get_udec mov esi, eax call io_get_udec mov edi, eax loop_steps: test edi, edi jz check_answer push esi call reverse_num add esp, 4 add esi, eax dec edi jmp loop_steps check_answer: push esi call is_palindrome add esp, 4 test eax, eax jz print_no mov eax, yes_str call io_print_string call io_newline mov eax, esi call io_print_udec ret print_no: mov eax, no_str call io_print_string ret reverse_num: push ebp mov ebp, esp mov ecx, [ebp + 8] xor esi, esi rev_loop: test ecx, ecx jz rev_done mov eax, ecx xor edx, edx mov ebx, 10 div ebx imul esi, esi, 10 add esi, edx mov ecx, eax jmp rev_loop rev_done: mov eax, esi pop ebp ret is_palindrome: push ebp mov ebp, esp mov edx, [ebp + 8] push edx call reverse_num add esp, 4 cmp eax, edx jne not_pal mov eax, 1 pop ebp ret not_pal: xor eax, eax pop ebp ret
1) Этот код считывает два беззнаковых числа, затем многократно прибавляет к первому числу его перевёрнутую версию заданное количество раз (второе число). В конце проверяет, является ли результат палиндромом (числом, одинаково читающимся слева направо и справа налево), и выводит "Yes" и само число, если да, или "No", если нет.

2) Подсказки:
- Обрати внимание, что регистр `esi` используется одновременно в `main` и в функции `reverse_num` — это может привести к потере данных.
- Функция `reverse_num` изменяет `esi`, но не сохраняет его предыдущее значение, что нарушает соглашение о вызовах для нефлагских регистров.