Online Compiler Nasm

extern io_get_dec, io_newline, io_print_dec section .bss N resd 1 A resd 1 m resd 10000 N_1 resd 1 ; будет значение N-1 для цикла i resd 1 j resd 1 section .text global main main: call io_get_udec mov [N], eax mov [N_1], eax sub [N_1], 1 mov ecx, 0 .start_push: cmp ecx, [N] je .end_push call io_get_dec mov dword[m + 4*ecx], eax inc ecx jmp .start_push .end_push: ;for (int i=0; i<N-1; i++){ ; for (int j=i+1; j<N; j++){ ; if (m[j] < m[i]){ ; int tmp = m[i] ; m[i] = m[j] ; m[j] = tmp ; } ; } ;} mov [i], 0 .start1: cmp [i], [N_1] je .end1 mov eax, [i] mov [j], eax add [j], 1 .start2: cmp [j], [N] je .end2 mov eax, [j] mov ebx, [i] mov edx, dword[m + 4*ebx] ; edx = m[i] cmp dword[m + 4*eax], edx jge .continue ; если >= усл не вып mov ecx, dword[m + 4*eax] mov dword[m + 4*ebx], ecx mov dword[m + 4*eax], edx jmp .continue .continue: inc [j] jmp .start2 .end2: inc [i] jmp .start1 .end1: xor ecx, ecx .start_print: cmp ecx, [N] je .end_print mov eax, dword[m + 4*ecx] call io_print_dec call io_newline inc ecx jmp .start_print .end_print: xor eax, eax ret
1) Этот код считывает число N, затем N целых чисел, сортирует их по возрастанию методом пузырька (или похожим на выбором) и выводит отсортированный массив.

2) Подсказки:
- Обрати внимание, что для хранения индексов i и j используются переменные в памяти, что замедляет работу. Попробуй использовать регистры (например, esi, edi) для индексов во внутренних циклах.
- Условие `jge .continue` пропускает обмен, если элемент m[j] уже больше или равен m[i]. Это корректно для сортировки по возрастанию, но проверь, правильно ли вычисляется N_1 для границы внешнего цикла.