Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global _start
- section .text
- _start:
- mov ebx, arr ; указатель на начало массива
- mov ecx, n-1 ; длинна массива
- ; Сортируем массив arr методом пузырька
- cyc1:
- push ecx
- mov edx, 0 ; флаг
- xor esi, esi
- mov edi, 1
- mov ecx, n-1
- cyc2:
- mov al, [ebx+esi] ; al = i-ый элемент массива где 0 < i < n-1
- mov ah, [ebx+edi] ; ah = i+1 элемент массива
- cmp al, ah
- jle _end_if ; если al > ah то меняем их местами иначе прыгаем на _end_if
- mov [ebx+esi], ah
- mov [ebx+edi], al
- mov edx, 1 ; была перестановка, поэтому изменяем значение флага
- _end_if:
- inc esi ; esi + 1
- inc edi ; edi + 1
- loop cyc2
- cmp edx, 0 ; если за полный проход массива небыло не одной перестановки, то выходим из цикла - массив уже отсортирован
- je end_loop
- pop ecx
- loop cyc1
- end_loop:
- ; Выводим массив
- mov esi, arr
- mov ecx, n
- g1:
- push ecx
- mov ecx, esi ; указатель на элемент массива
- mov eax, 4 ; sys_write
- mov ebx, 1 ; stdout
- mov edx, 1 ; выводим 1 байт
- int 0x80 ; вызов ядра
- inc esi ; esi + 1
- pop ecx
- dec ecx ; ecx - 1
- jnz g1 ; если ecx != 0 то прыгаем на g1
- mov eax, 4 ; sys_write
- mov ebx, 1 ; stdout
- mov edx, 1 ; длинна
- mov ecx, _enter ; Выводим символ перевода строки
- int 0x80 ; вызов ядра
- mov eax, 1 ; exit
- mov ebx, 0 ; 0-вой код ошибки
- int 0x80
- section .data
- arr db '1','2','9','8','6','4','3','0','7','0' ; массив
- _enter db 10
- n equ 10 ; длинна массива
- symbol db '0'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement