Online Compiler Nasm

section .data fmt_in db "%d",0 fmt_out db "%d ",0 newline db 10,0 section .bss n resd 1 arr resd 10001 section .text global main extern scanf,printf main:push ebp mov ebp,esp ;---------------------------- push n push fmt_in call scanf add esp,8 ;---------------------------- xor esi,esi read: cmp esi,[n] jge read_done lea eax,[arr+esi*4] push eax push fmt_in call scanf add esp,8 inc esi jmp read read_done: mov ecx,[n] dec ecx outer: test ecx,ecx jle sort_done xor esi,esi inner: cmp esi,ecx jge inner_done mov eax,[arr+esi*4] cmp eax,[arr+esi*4+4] jle no_swap mov eax, [arr+esi*4] mov ebx, [arr+esi*4+4] mov [arr+esi*4+4], eax mov [arr+esi*4], ebx mov [arr+esi*4],eax no_swap: inc esi jmp inner inner_done: dec ecx jmp outer sort_done: xor esi,esi print: cmp esi,[n] jge print_done push dword [arr+esi*4] push fmt_out call printf add esp,8 inc esi jmp print print_done: push newline call printf add esp,4 ;-------------------------- xor eax,eax mov esp, ebp pop ebp ret
1) Этот код на NASM32 считывает число `n`, затем `n` целых чисел в массив, сортирует их методом пузырька по возрастанию и выводит отсортированный массив через пробел, завершая вывод переводом строки.

2) Подсказки:
- В блоке обмена значениями (`no_swap`) есть ошибка: лишняя инструкция `mov [arr+esi*4],eax` после обмена, которая портит результат. Убери её.
- После обмена значений регистр `eax` уже содержит исходный элемент, а не соседний. Для обмена используй временный регистр (например, `edx`), чтобы не потерять данные.