section .data
array db 5, 3, 8, 6, 2
array_length db 5
section .text
global _start
_start:
mov ecx, [array_length] ; Загружаем длину массива в ecx
dec ecx ; Уменьшаем на 1 для правильного количества проходов
outer_loop:
mov ebx, 0 ; Индекс для внутреннего цикла
mov edi, ecx ; Сохраняем количество оставшихся элементов для внутреннего цикла
inner_loop:
mov al, [array + ebx] ; Загружаем текущий элемент
mov dl, [array + ebx + 1] ; Загружаем следующий элемент
; Сравниваем элементы
cmp al, dl
jbe skip_swap ; Если текущий элемент меньше или равен следующему, пропускаем обмен
; Обмен элементов
mov [array + ebx], dl ; Сохраняем следующий элемент на место текущего
mov [array + ebx + 1], al ; Сохраняем текущий элемент на место следующего
skip_swap:
inc ebx ; Переходим к следующему элементу
dec edi ; Уменьшаем счетчик внутреннего цикла
jnz inner_loop ; Если есть еще элементы, продолжаем внутренний цикл
dec ecx ; Уменьшаем счетчик внешнего цикла
jnz outer_loop ; Если есть еще проходы, продолжаем внешний цикл
; Завершение программы
mov eax, 1 ; syscall: exit
xor ebx, ebx ; статус выхода 0
int 0x80 ; вызов ядра