Online Compiler Nasm

section .bss arr resd 10000 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 xor eax, eax add edi, 4 dec ecx cmp ecx, 0 jne input_start input_end: lea edi, [arr] mov ecx, esi sort_start: ; сравниваем ел-нт edi с edi + 4 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 cmp ecx, 0 jne sort_start sort_end: lea edi, [arr] mov ecx, esi output_start: mov eax, [edi] push ecx call io_print_dec mov eax, ' ' call io_print_char pop ecx add edi, 4 dec ecx cmp ecx, 0 jne output_start output_end: call io_newline xor eax, eax ret
1) Этот код считывает количество элементов, затем сами элементы, после чего пытается отсортировать массив методом "пузырька" (одним проходом) и выводит результат. Однако сортировка работает некорректно, так как делает только один проход по массиву.

2) Для сортировки пузырьком нужен вложенный цикл. Сейчас код делает лишь один проход, поэтому максимальный элемент "всплывёт" в конец, но остальные останутся неотсортированными.  
Также обрати внимание, что после первого прохода счётчик `ecx` уменьшается до нуля, поэтому второй проход не начнётся.