section .data
; Масив 64-бітних чисел
array dq 120, 5, 45, 10, 2, 8, 300, 15, 1, 99
; Довжина масиву
len equ ($ - array) / 8
section .bss
; Буфер для рядка (20 цифр + знак + перехід рядка)
buffer resb 24
section .text
global _start
_start:
; --- 1. Сортування ---
mov rdi, array
mov rsi, len
call SortProcedure
; --- 2. Виведення ---
mov rbx, array ; Вказівник на поточний елемент
mov r12, len ; Лічильник (R12 зберігається між викликами syscall)
PrintLoop:
mov rax, [rbx] ; Завантажуємо число
call PrintNumber ; Друкуємо
add rbx, 8 ; Наступний елемент (8 байт)
dec r12
jnz PrintLoop
; --- 3. Вихід ---
mov rax, 60 ; sys_exit
xor rdi, rdi ; код 0
syscall
; ---------------------------------------------------------
; Процедура друку числа (RAX -> stdout)
; ---------------------------------------------------------
PrintNumber:
push rbx
push rcx
push rdx
push rsi
push rdi
push r11
mov rsi, buffer + 23 ; Кінець буфера
mov byte [rsi], 10 ; Символ нового рядка \n
mov rbx, 10 ; Дільник
.convert_loop:
xor rdx, rdx ; Очищення для ділення
add dl, '0' ; Цифра -> ASCII
dec rsi
mov [rsi], dl
test rax, rax
jnz .convert_loop
; Виведення (sys_write)
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
lea rdx, [buffer + 24] ; Кінець буфера
sub rdx, rsi ; Довжина = Кінець - Початок
syscall
pop r11
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ret
; ---------------------------------------------------------
; Процедура сортування (Bubble Sort)
; RDI = адреса, RSI = довжина
; ---------------------------------------------------------
SortProcedure:
push rbx
push rcx
push rdx
mov rcx, rsi
dec rcx ; N-1 ітерацій
.outer_loop:
push rcx
mov rbx, rdi ; Скидаємо вказівник на початок
.inner_loop:
mov rax, [rbx]
cmp rax, [rbx+8] ; Порівняння з наступним
jle .no_swap
xchg rax, [rbx+8] ; Обмін
mov [rbx], rax
.no_swap:
add rbx, 8
loop .inner_loop
pop rcx
loop .outer_loop
pop rdx
pop rcx
pop rbx
ret
c2VjdGlvbiAuZGF0YQogICAgOyDQnNCw0YHQuNCyIDY0LdCx0ZbRgtC90LjRhSDRh9C40YHQtdC7CiAgICBhcnJheSBkcSAxMjAsIDUsIDQ1LCAxMCwgMiwgOCwgMzAwLCAxNSwgMSwgOTkKICAgIDsg0JTQvtCy0LbQuNC90LAg0LzQsNGB0LjQstGDCiAgICBsZW4gZXF1ICgkIC0gYXJyYXkpIC8gOAoKc2VjdGlvbiAuYnNzCiAgICA7INCR0YPRhNC10YAg0LTQu9GPINGA0Y/QtNC60LAgKDIwINGG0LjRhNGAICsg0LfQvdCw0LogKyDQv9C10YDQtdGF0ZbQtCDRgNGP0LTQutCwKQogICAgYnVmZmVyIHJlc2IgMjQKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsgLS0tIDEuINCh0L7RgNGC0YPQstCw0L3QvdGPIC0tLQogICAgbW92IHJkaSwgYXJyYXkKICAgIG1vdiByc2ksIGxlbgogICAgY2FsbCBTb3J0UHJvY2VkdXJlCgogICAgOyAtLS0gMi4g0JLQuNCy0LXQtNC10L3QvdGPIC0tLQogICAgbW92IHJieCwgYXJyYXkgICAgICA7INCS0LrQsNC30ZbQstC90LjQuiDQvdCwINC/0L7RgtC+0YfQvdC40Lkg0LXQu9C10LzQtdC90YIKICAgIG1vdiByMTIsIGxlbiAgICAgICAgOyDQm9GW0YfQuNC70YzQvdC40LogKFIxMiDQt9Cx0LXRgNGW0LPQsNGU0YLRjNGB0Y8g0LzRltC2INCy0LjQutC70LjQutCw0LzQuCBzeXNjYWxsKQoKUHJpbnRMb29wOgogICAgbW92IHJheCwgW3JieF0gICAgICA7INCX0LDQstCw0L3RgtCw0LbRg9GU0LzQviDRh9C40YHQu9C+CiAgICBjYWxsIFByaW50TnVtYmVyICAgIDsg0JTRgNGD0LrRg9GU0LzQvgoKICAgIGFkZCByYngsIDggICAgICAgICAgOyDQndCw0YHRgtGD0L/QvdC40Lkg0LXQu9C10LzQtdC90YIgKDgg0LHQsNC50YIpCiAgICBkZWMgcjEyCiAgICBqbnogUHJpbnRMb29wCgogICAgOyAtLS0gMy4g0JLQuNGF0ZbQtCAtLS0KICAgIG1vdiByYXgsIDYwICAgICAgICAgOyBzeXNfZXhpdAogICAgeG9yIHJkaSwgcmRpICAgICAgICA7INC60L7QtCAwCiAgICBzeXNjYWxsCgo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo7INCf0YDQvtGG0LXQtNGD0YDQsCDQtNGA0YPQutGDINGH0LjRgdC70LAgKFJBWCAtPiBzdGRvdXQpCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClByaW50TnVtYmVyOgogICAgcHVzaCByYngKICAgIHB1c2ggcmN4CiAgICBwdXNoIHJkeAogICAgcHVzaCByc2kKICAgIHB1c2ggcmRpCiAgICBwdXNoIHIxMQoKICAgIG1vdiByc2ksIGJ1ZmZlciArIDIzICAgIDsg0JrRltC90LXRhtGMINCx0YPRhNC10YDQsAogICAgbW92IGJ5dGUgW3JzaV0sIDEwICAgICAgOyDQodC40LzQstC+0Lsg0L3QvtCy0L7Qs9C+INGA0Y/QtNC60LAgXG4KICAgIG1vdiByYngsIDEwICAgICAgICAgICAgIDsg0JTRltC70YzQvdC40LoKCi5jb252ZXJ0X2xvb3A6CiAgICB4b3IgcmR4LCByZHggICAgICAgICAgICA7INCe0YfQuNGJ0LXQvdC90Y8g0LTQu9GPINC00ZbQu9C10L3QvdGPCiAgICBkaXYgcmJ4ICAgICAgICAgICAgICAgICA7IFJBWCAvIDEwCiAgICBhZGQgZGwsICcwJyAgICAgICAgICAgICA7INCm0LjRhNGA0LAgLT4gQVNDSUkKICAgIGRlYyByc2kKICAgIG1vdiBbcnNpXSwgZGwKICAgIHRlc3QgcmF4LCByYXgKICAgIGpueiAuY29udmVydF9sb29wCgogICAgOyDQktC40LLQtdC00LXQvdC90Y8gKHN5c193cml0ZSkKICAgIG1vdiByYXgsIDEgICAgICAgICAgICAgIDsgc3lzX3dyaXRlCiAgICBtb3YgcmRpLCAxICAgICAgICAgICAgICA7IHN0ZG91dAogICAgbGVhIHJkeCwgW2J1ZmZlciArIDI0XSAgOyDQmtGW0L3QtdGG0Ywg0LHRg9GE0LXRgNCwCiAgICBzdWIgcmR4LCByc2kgICAgICAgICAgICA7INCU0L7QstC20LjQvdCwID0g0JrRltC90LXRhtGMIC0g0J/QvtGH0LDRgtC+0LoKICAgIHN5c2NhbGwKCiAgICBwb3AgcjExCiAgICBwb3AgcmRpCiAgICBwb3AgcnNpCiAgICBwb3AgcmR4CiAgICBwb3AgcmN4CiAgICBwb3AgcmJ4CiAgICByZXQKCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCjsg0J/RgNC+0YbQtdC00YPRgNCwINGB0L7RgNGC0YPQstCw0L3QvdGPIChCdWJibGUgU29ydCkKOyBSREkgPSDQsNC00YDQtdGB0LAsIFJTSSA9INC00L7QstC20LjQvdCwCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvcnRQcm9jZWR1cmU6CiAgICBwdXNoIHJieAogICAgcHVzaCByY3gKICAgIHB1c2ggcmR4CgogICAgbW92IHJjeCwgcnNpCiAgICBkZWMgcmN4ICAgICAgICAgICAgICAgICA7IE4tMSDRltGC0LXRgNCw0YbRltC5Cgoub3V0ZXJfbG9vcDoKICAgIHB1c2ggcmN4CiAgICBtb3YgcmJ4LCByZGkgICAgICAgICAgICA7INCh0LrQuNC00LDRlNC80L4g0LLQutCw0LfRltCy0L3QuNC6INC90LAg0L/QvtGH0LDRgtC+0LoKCi5pbm5lcl9sb29wOgogICAgbW92IHJheCwgW3JieF0KICAgIGNtcCByYXgsIFtyYngrOF0gICAgICAgIDsg0J/QvtGA0ZbQstC90Y/QvdC90Y8g0Lcg0L3QsNGB0YLRg9C/0L3QuNC8CiAgICBqbGUgLm5vX3N3YXAKCiAgICB4Y2hnIHJheCwgW3JieCs4XSAgICAgICA7INCe0LHQvNGW0L0KICAgIG1vdiBbcmJ4XSwgcmF4Cgoubm9fc3dhcDoKICAgIGFkZCByYngsIDgKICAgIGxvb3AgLmlubmVyX2xvb3AKCiAgICBwb3AgcmN4CiAgICBsb29wIC5vdXRlcl9sb29wCgogICAgcG9wIHJkeAogICAgcG9wIHJjeAogICAgcG9wIHJieAogICAgcmV0