Online Compiler Nasm

section .bss arr resd 10000 need_sort resd 1 section .text extern io_get_dec, io_print_dec, io_newline, io_print_char global main main: call io_get_dec cmp eax, 0 jl end mov esi, eax mov ecx, esi lea edi, [arr] input_start: push ecx call io_get_dec pop ecx mov [edi], eax add edi, 4 dec ecx cmp ecx, 0 jne input_start input_end: cycle_start: mov dword [need_sort], 0 lea edi, [arr] mov ecx, esi dec ecx sort_start: ; сравниваем ел-нт edi с edi + 4 mov ebx, [edi] mov edx, [edi+4] cmp ebx, edx jg more jmp next_el more: ; меняет значение местами между регистрами mov [edi], edx mov [edi+4], ebx mov dword [need_sort], 1 next_el: add edi, 4 dec ecx cmp ecx, 0 jne sort_start sort_end: cmp dword [need_sort], 1 je cycle_start lea edi, [arr] mov eax, [edi] call io_print_dec cmp esi, 1 je output_end add edi, 4 mov ecx, esi dec ecx output_start: push ecx mov eax, ' ' call io_print_char mov eax, [edi] call io_print_dec pop ecx add edi, 4 dec ecx cmp ecx, 0 jne output_start output_end: call io_newline section .bss arr resd 10000 need_sort resd 1 section .text extern io_get_dec, io_print_dec, io_newline, io_print_char global main main: call io_get_dec mov esi, eax mov ecx, esi lea edi, [arr] input_start: push ecx call io_get_dec pop ecx mov [edi], eax add edi, 4 dec ecx cmp ecx, 0 jne input_start input_end: cycle_start: mov dword [need_sort], 0 lea edi, [arr] mov ecx, esi dec ecx sort_start: ; сравниваем ел-нт edi с edi + 4 mov ebx, [edi] mov edx, [edi+4] cmp ebx, edx jg more jmp next_el more: ; меняет значение местами между регистрами mov [edi], edx mov [edi+4], ebx mov dword [need_sort], 1 next_el: add edi, 4 dec ecx cmp ecx, 0 jne sort_start sort_end: cmp dword [need_sort], 1 je cycle_start lea edi, [arr] mov eax, [edi] call io_print_dec cmp esi, 1 je output_end add edi, 4 mov ecx, esi dec ecx output_start: push ecx mov eax, ' ' call io_print_char mov eax, [edi] call io_print_dec pop ecx add edi, 4 dec ecx cmp ecx, 0 jne output_start output_end: call io_newline end: xor eax, eax ret
1) Этот код считывает количество чисел, затем сами числа, сортирует их по возрастанию методом пузырька и выводит через пробел.

2) Подсказки:
- Обрати внимание, что секция `.bss` объявлена дважды — это ошибка линковки, нужно оставить только одно объявление.
- После первого вызова `io_get_dec` есть проверка `cmp eax, 0 / jl end`, но если ввести ноль, программа пропустит ввод и сортировку, перейдя к `end`. Убедись, что это ожидаемое поведение.