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 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 mov eax, esi call io_print_dec call io_newline 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 xor eax, eax ret
1) Этот код реализует сортировку пузырьком массива целых чисел, введённых пользователем. Сначала считывается количество элементов, затем сами элементы. После сортировки выводится количество элементов и отсортированный массив через пробел.

2) Подсказки:
- Обрати внимание, что после первого прохода внутреннего цикла максимальный элемент уже оказывается в конце массива, но код каждый раз проходит по всем элементам, что неоптимально.
- В выводе после печати первого элемента массива стоит проверка `cmp esi, 1`, которая корректно обрабатывает случай массива из одного элемента, но может быть переработана для улучшения читаемости.