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 steps_loop: test edi, edi jz check_result push esi call reverse_num add esp, 4 add esi, eax dec edi jmp steps_loop check_result: push esi call reverse_num add esp, 4 cmp eax, esi jne 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 push ebx push esi mov eax, [ebp + 8] mov ebx, 10 xor esi, esi rev_loop: test eax, eax jz rev_done xor edx, edx div ebx imul esi, esi, 10 add esi, edx jmp rev_loop rev_done: mov eax, esi pop esi pop ebx pop ebp ret
1) Этот код проверяет, становится ли число палиндромом после заданного количества шагов. На каждом шаге число складывается со своим обратным (реверсом). Если после всех шагов число равно своему обратному (т.е. стало палиндромом), выводится "Yes" и итоговое число, иначе — "No".

2) Обрати внимание, что функция `reverse_num` использует регистры `ebx` и `esi`, но сохраняет их в стеке, чтобы не нарушить значения в вызывающей функции.  
Убедись, что понимаешь, как работает деление `div ebx` для получения цифр числа в обратном порядке.