section .data
; Варіант 19: Масив слів (dw)
SourceArray dw 120, 5, 45, 10, 2, 8, 300, 15, 1, 99
ArrayLen equ ($ - SourceArray) / 2
newline db 10 ; Символ нового рядка
section .bss
numBuffer resb 10 ; Буфер для друку чисел
section .text
global _start
_start:
; --- 1. ПЕРЕДАЧА ПАРАМЕТРІВ ---
; У 64-бітній системі стек змінюється на 8 байт (RSP-8)
push qword ArrayLen ; RSP-8, запис кількості елементів
lea rax, [SourceArray] ; Завантаження адреси (64-біт)
push rax ; RSP-8, запис адреси масиву
; --- 2. ВИКЛИК ПРОЦЕДУРИ ---
call SortProcedure ; RSP-8 (адреса повернення)
; Очищення стеку параметрів (2 параметри * 8 байт = 16)
add rsp, 16
; --- 3. ВИВІД РЕЗУЛЬТАТУ (Щоб ви бачили, що воно працює) ---
mov rcx, ArrayLen
lea rsi, [SourceArray]
PrintLoop:
push rcx
push rsi
xor rax, rax
mov ax, [rsi] ; Беремо слово
call PrintNumber ; Друкуємо
; Друк нового рядка
mov rax, 1
mov rdi, 1
lea rsi, [newline]
mov rdx, 1
syscall
pop rsi
pop rcx
add rsi, 2 ; Наступне слово
loop PrintLoop
; --- 4. ЗАВЕРШЕННЯ ---
mov rax
, 60 ; Системний виклик
exit (замість
int 21h
) xor rdi, rdi
syscall
; =========================================================
; Процедура сортування
; Параметри: [rbp+16] (Адреса), [rbp+24] (Кількість)
; =========================================================
SortProcedure:
; --- ПРОЛОГ ---
push rbp ; RSP-8, збереження старого RBP
mov rbp, rsp ; RBP фіксує вершину
push rbx ; Збереження регістрів
push rcx
push rsi
push rax
mov rbx, [rbp+16] ; Отримання адреси масиву (64-біт регістр RBX)
mov rcx, [rbp+24] ; Отримання довжини
cmp rcx, 1
jle EndSort
dec rcx
OuterLoop:
push rcx
mov rsi, rbx ; RSI = Адреса (використовуємо RSI замість SI)
InnerLoop:
mov ax, [rsi] ; Читаємо слово (2 байти)
cmp ax, [rsi+2] ; Порівнюємо
jle NoSwap
xchg ax, [rsi+2] ; Міняємо місцями
mov [rsi], ax
NoSwap:
add rsi, 2 ; Зсуваємо вказівник на 2 байти
dec rcx
jnz InnerLoop
pop rcx
dec rcx
jnz OuterLoop
EndSort:
; --- ЕПІЛОГ ---
pop rax
pop rsi
pop rcx
pop rbx
pop rbp ; Відновлення RBP
ret ; Повернення
; =========================================================
; Допоміжна процедура друку числа (Decimal Print)
; =========================================================
PrintNumber:
push rbx
push rcx
push rdx
push rsi
push rdi
mov rcx, 0
mov rbx, 10
DivLoop:
xor rdx, rdx
add dl, '0'
push rdx
inc rcx
test rax, rax
jnz DivLoop
lea rsi, [numBuffer]
mov rdi, rsi
PopLoop:
pop rax
mov [rdi], al
inc rdi
loop PopLoop
mov rdx, rdi
lea rax, [numBuffer]
sub rdx, rax
mov rax, 1
mov rdi, 1
lea rsi, [numBuffer]
syscall
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
ret
c2VjdGlvbiAuZGF0YQogICAgOyDQktCw0YDRltCw0L3RgiAxOTog0JzQsNGB0LjQsiDRgdC70ZbQsiAoZHcpCiAgICBTb3VyY2VBcnJheSBkdyAxMjAsIDUsIDQ1LCAxMCwgMiwgOCwgMzAwLCAxNSwgMSwgOTkKICAgIEFycmF5TGVuICAgIGVxdSAoJCAtIFNvdXJjZUFycmF5KSAvIDIKICAgIAogICAgbmV3bGluZSAgICAgZGIgMTAgIDsg0KHQuNC80LLQvtC7INC90L7QstC+0LPQviDRgNGP0LTQutCwCgpzZWN0aW9uIC5ic3MKICAgIG51bUJ1ZmZlciAgIHJlc2IgMTAgOyDQkdGD0YTQtdGAINC00LvRjyDQtNGA0YPQutGDINGH0LjRgdC10LsKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsgLS0tIDEuINCf0JXQoNCV0JTQkNCn0JAg0J/QkNCg0JDQnNCV0KLQoNCG0JIgLS0tCiAgICA7INCjIDY0LdCx0ZbRgtC90ZbQuSDRgdC40YHRgtC10LzRliDRgdGC0LXQuiDQt9C80ZbQvdGO0ZTRgtGM0YHRjyDQvdCwIDgg0LHQsNC50YIgKFJTUC04KQogICAgCiAgICBwdXNoIHF3b3JkIEFycmF5TGVuICAgIDsgUlNQLTgsINC30LDQv9C40YEg0LrRltC70YzQutC+0YHRgtGWINC10LvQtdC80LXQvdGC0ZbQsgogICAgbGVhIHJheCwgW1NvdXJjZUFycmF5XSA7INCX0LDQstCw0L3RgtCw0LbQtdC90L3RjyDQsNC00YDQtdGB0LggKDY0LdCx0ZbRgikKICAgIHB1c2ggcmF4ICAgICAgICAgICAgICAgOyBSU1AtOCwg0LfQsNC/0LjRgSDQsNC00YDQtdGB0Lgg0LzQsNGB0LjQstGDCgogICAgOyAtLS0gMi4g0JLQmNCa0JvQmNCaINCf0KDQntCm0JXQlNCj0KDQmCAtLS0KICAgIGNhbGwgU29ydFByb2NlZHVyZSAgICAgOyBSU1AtOCAo0LDQtNGA0LXRgdCwINC/0L7QstC10YDQvdC10L3QvdGPKQoKICAgIDsg0J7Rh9C40YnQtdC90L3RjyDRgdGC0LXQutGDINC/0LDRgNCw0LzQtdGC0YDRltCyICgyINC/0LDRgNCw0LzQtdGC0YDQuCAqIDgg0LHQsNC50YIgPSAxNikKICAgIGFkZCByc3AsIDE2ICAgICAgICAgICAgCgogICAgOyAtLS0gMy4g0JLQmNCS0IbQlCDQoNCV0JfQo9Cb0KzQotCQ0KLQoyAo0KnQvtCxINCy0Lgg0LHQsNGH0LjQu9C4LCDRidC+INCy0L7QvdC+INC/0YDQsNGG0Y7RlCkgLS0tCiAgICBtb3YgcmN4LCBBcnJheUxlbgogICAgbGVhIHJzaSwgW1NvdXJjZUFycmF5XQoKUHJpbnRMb29wOgogICAgcHVzaCByY3gKICAgIHB1c2ggcnNpCiAgICAKICAgIHhvciByYXgsIHJheAogICAgbW92IGF4LCBbcnNpXSAgICAgICAgICA7INCR0LXRgNC10LzQviDRgdC70L7QstC+CiAgICBjYWxsIFByaW50TnVtYmVyICAgICAgIDsg0JTRgNGD0LrRg9GU0LzQvgogICAgCiAgICA7INCU0YDRg9C6INC90L7QstC+0LPQviDRgNGP0LTQutCwCiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBsZWEgcnNpLCBbbmV3bGluZV0KICAgIG1vdiByZHgsIDEKICAgIHN5c2NhbGwKCiAgICBwb3AgcnNpCiAgICBwb3AgcmN4CiAgICBhZGQgcnNpLCAyICAgICAgICAgICAgIDsg0J3QsNGB0YLRg9C/0L3QtSDRgdC70L7QstC+CiAgICBsb29wIFByaW50TG9vcAoKICAgIDsgLS0tIDQuINCX0JDQktCV0KDQqNCV0J3QndCvIC0tLQogICAgbW92IHJheCwgNjAgICAgICAgICAgICA7INCh0LjRgdGC0LXQvNC90LjQuSDQstC40LrQu9C40LogZXhpdCAo0LfQsNC80ZbRgdGC0YwgaW50IDIxaCkKICAgIHhvciByZGksIHJkaQogICAgc3lzY2FsbAoKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KOyDQn9GA0L7RhtC10LTRg9GA0LAg0YHQvtGA0YLRg9Cy0LDQvdC90Y8KOyDQn9Cw0YDQsNC80LXRgtGA0Lg6IFtyYnArMTZdICjQkNC00YDQtdGB0LApLCBbcmJwKzI0XSAo0JrRltC70YzQutGW0YHRgtGMKQo7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpTb3J0UHJvY2VkdXJlOgogICAgOyAtLS0g0J/QoNCe0JvQntCTIC0tLQogICAgcHVzaCByYnAgICAgICAgICAgICAgICA7IFJTUC04LCDQt9Cx0LXRgNC10LbQtdC90L3RjyDRgdGC0LDRgNC+0LPQviBSQlAKICAgIG1vdiByYnAsIHJzcCAgICAgICAgICAgOyBSQlAg0YTRltC60YHRg9GUINCy0LXRgNGI0LjQvdGDCgogICAgcHVzaCByYnggICAgICAgICAgICAgICA7INCX0LHQtdGA0LXQttC10L3QvdGPINGA0LXQs9GW0YHRgtGA0ZbQsgogICAgcHVzaCByY3gKICAgIHB1c2ggcnNpCiAgICBwdXNoIHJheAoKICAgIG1vdiByYngsIFtyYnArMTZdICAgICAgOyDQntGC0YDQuNC80LDQvdC90Y8g0LDQtNGA0LXRgdC4INC80LDRgdC40LLRgyAoNjQt0LHRltGCINGA0LXQs9GW0YHRgtGAIFJCWCkKICAgIG1vdiByY3gsIFtyYnArMjRdICAgICAgOyDQntGC0YDQuNC80LDQvdC90Y8g0LTQvtCy0LbQuNC90LgKICAgIAogICAgY21wIHJjeCwgMQogICAgamxlIEVuZFNvcnQKICAgIGRlYyByY3gKCk91dGVyTG9vcDoKICAgIHB1c2ggcmN4CiAgICBtb3YgcnNpLCByYnggICAgICAgICAgIDsgUlNJID0g0JDQtNGA0LXRgdCwICjQstC40LrQvtGA0LjRgdGC0L7QstGD0ZTQvNC+IFJTSSDQt9Cw0LzRltGB0YLRjCBTSSkKCklubmVyTG9vcDoKICAgIG1vdiBheCwgW3JzaV0gICAgICAgICAgOyDQp9C40YLQsNGU0LzQviDRgdC70L7QstC+ICgyINCx0LDQudGC0LgpCiAgICBjbXAgYXgsIFtyc2krMl0gICAgICAgIDsg0J/QvtGA0ZbQstC90Y7RlNC80L4KICAgIGpsZSBOb1N3YXAKICAgIAogICAgeGNoZyBheCwgW3JzaSsyXSAgICAgICA7INCc0ZbQvdGP0ZTQvNC+INC80ZbRgdGG0Y/QvNC4CiAgICBtb3YgW3JzaV0sIGF4CgpOb1N3YXA6CiAgICBhZGQgcnNpLCAyICAgICAgICAgICAgIDsg0JfRgdGD0LLQsNGU0LzQviDQstC60LDQt9GW0LLQvdC40Log0L3QsCAyINCx0LDQudGC0LgKICAgIGRlYyByY3gKICAgIGpueiBJbm5lckxvb3AKCiAgICBwb3AgcmN4CiAgICBkZWMgcmN4CiAgICBqbnogT3V0ZXJMb29wCgpFbmRTb3J0OgogICAgOyAtLS0g0JXQn9CG0JvQntCTIC0tLQogICAgcG9wIHJheAogICAgcG9wIHJzaQogICAgcG9wIHJjeAogICAgcG9wIHJieAogICAgCiAgICBwb3AgcmJwICAgICAgICAgICAgICAgIDsg0JLRltC00L3QvtCy0LvQtdC90L3RjyBSQlAKICAgIHJldCAgICAgICAgICAgICAgICAgICAgOyDQn9C+0LLQtdGA0L3QtdC90L3RjwoKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KOyDQlNC+0L/QvtC80ZbQttC90LAg0L/RgNC+0YbQtdC00YPRgNCwINC00YDRg9C60YMg0YfQuNGB0LvQsCAoRGVjaW1hbCBQcmludCkKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUHJpbnROdW1iZXI6CiAgICBwdXNoIHJieAogICAgcHVzaCByY3gKICAgIHB1c2ggcmR4CiAgICBwdXNoIHJzaQogICAgcHVzaCByZGkKCiAgICBtb3YgcmN4LCAwCiAgICBtb3YgcmJ4LCAxMApEaXZMb29wOgogICAgeG9yIHJkeCwgcmR4CiAgICBkaXYgcmJ4CiAgICBhZGQgZGwsICcwJwogICAgcHVzaCByZHgKICAgIGluYyByY3gKICAgIHRlc3QgcmF4LCByYXgKICAgIGpueiBEaXZMb29wCgogICAgbGVhIHJzaSwgW251bUJ1ZmZlcl0KICAgIG1vdiByZGksIHJzaQpQb3BMb29wOgogICAgcG9wIHJheAogICAgbW92IFtyZGldLCBhbAogICAgaW5jIHJkaQogICAgbG9vcCBQb3BMb29wCgogICAgbW92IHJkeCwgcmRpCiAgICBsZWEgcmF4LCBbbnVtQnVmZmVyXQogICAgc3ViIHJkeCwgcmF4CiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBsZWEgcnNpLCBbbnVtQnVmZmVyXQogICAgc3lzY2FsbAoKICAgIHBvcCByZGkKICAgIHBvcCByc2kKICAgIHBvcCByZHgKICAgIHBvcCByY3gKICAgIHBvcCByYngKICAgIHJldA==