Online Compiler Nasm

section .bss arr resd 10000 section .text extern io_get_dec, io_print_dec, io_newline global main main: call io_get_dec mov esi, eax mov ecx, esi lea edi, [arr] input_start: cmp ecx, 0 je input_end call io_get_dec mov [edi], eax xor eax, eax add edi, 4 dec ecx jmp input_start input_end: lea edi, [arr] ; указатель на начало списка ;mov ebx, 0xffffffff ; кол-во элементов mov ecx, esi dec ecx sort_start: ; сравниваем ел-нт edi с edi + 4 cmp ecx, 0 je sort_end mov ebx, [edi] mov edx, [edi+4] cmp ebx, edx ja more jmp next_el more: ; меняет значение местами между регистрами mov [edi], edx mov [edi+4], ebx next_el: add edi, 4 dec ecx jmp sort_start sort_end: lea edi, [arr] mov ecx, esi dec ecx output_start: cmp ecx, 0 je output_end mov eax, [edi] call io_print_dec add edi, 4 dec ecx jmp output_start output_end: call io_newline xor eax, eax ret
1) Этот код реализует сортировку пузырьком (один проход) для массива целых чисел, введённого пользователем, и выводит отсортированный массив.

2) Подсказки:
- Обрати внимание, что текущая реализация выполняет только один проход пузырьковой сортировки, поэтому массив может оказаться не полностью отсортированным. Для полной сортировки потребуется добавить внешний цикл.
- Для обмена значений в памяти эффективнее использовать регистр, а не две операции записи напрямую — но в коде это уже учтено через регистры ebx и edx.