Online Compiler Nasm

extern io_get_udec, io_print_udec section .data eight dd 8 section .bss n resd 1 it resd 1 arr resd 32 section .text global main ; почему у меня ошибка выполнения ????? main: call io_get_udec mov dword [n], eax cmp dword [n], 0 je printZero mov dword [it], 0 loop1: mov eax, dword [n] and eax, 7 mov ecx, dword [it] lea ebx, [arr + 4 * ecx] mov dword [ebx], eax inc dword [it] mov eax, dword [n] shr eax, 3 mov dword [n], eax cmp dword [n], 0 jnz loop1 dec dword [it] loop2: mov ecx, dword [it] lea ebx, [arr + 4 * ecx] mov ebx, dword [ebx] mov eax, ebx call io_print_udec dec dword [it] cmp dword [it], 0 jge loop2 xor eax, eax ret printZero: mov eax, 0 call io_print_udec ret
1) Этот код считывает беззнаковое число, преобразует его в восьмеричную систему и выводит цифры в обратном порядке (начиная с младшего разряда). Для нуля выводится отдельно.

2) Подсказки:
- Обрати внимание на то, что в `loop2` ты дважды используешь `mov ebx, ...`, теряя адрес ячейки массива. Второй `mov ebx, dword [ebx]` перезаписывает адрес значением из массива.
- Условие `jge loop2` может привести к бесконечному циклу, так как `it` декрементируется и может стать отрицательным, но сравнение `jge` интерпретирует его как беззнаковое.