section .data
numbers dq 10, 25, 17, 8, 45, 33, 2, 29, 50, 15
a dq 10
b dq 40
minVal dq 0x7FFFFFFFFFFFFFFF
maxVal dq 0
found db 0
msgMin db "Min: ", 0
msgMax db "Max: ", 0
msgNone db "No values in range (a, b).", 10, 0
section .bss
numBuffer resb 20 ; Буфер для числа у вигляді рядка
section .text
global _start
_start:
xor rcx, rcx ; index = 0
.loop:
cmp rcx, 10
jge .done_check
mov rax, [numbers + rcx*8] ; отримуємо поточне число
mov rbx, [a]
cmp rax, rbx
jle .next
mov rbx, [b]
cmp rax, rbx
jge .next
; знайдено валідне число
mov byte [found], 1
; оновлення мінімуму
mov rbx, [minVal]
cmp rax, rbx
jge .skip_min
mov [minVal], rax
.skip_min:
; оновлення максимуму
mov rbx, [maxVal]
cmp rax, rbx
jle .skip_max
mov [maxVal], rax
.skip_max:
.next:
inc rcx
jmp .loop
.done_check:
cmp byte [found], 0
je .print_none
; друк мінімуму
mov rdi, msgMin
call print_string
mov rsi, [minVal]
call print_number
; друк максимуму
mov rdi, msgMax
call print_string
mov rsi, [maxVal]
call print_number
.print_none:
mov rdi, msgNone
call print_string
mov rax
, 60 ; syscall
: exit xor rdi, rdi ; статус 0
syscall
; -------------------
; print_string - вивести рядок
; -------------------
print_string:
mov rax, 1 ; syscall: sys_write
mov rdi, 1 ; file descriptor (stdout)
mov rdx, 100 ; максимальна довжина (завжди більше за реальний розмір)
syscall
ret
; -------------------
; print_number - вивести число (перетворити на рядок)
; -------------------
print_number:
; Тут потрібно перевести число в рядок
; Переведемо число в десятковий рядок
mov rax, rsi ; отримуємо число для виведення
mov rcx, 10 ; основа для ділення (десяткова)
mov rbx, numBuffer ; буфер для збереження цифр
add rbx, 19 ; ставимо кінець буфера
mov byte [rbx], 0 ; термінатор рядка
reverse_loop:
dec rbx ; переміщаємо до місця для зберігання цифри
xor rdx, rdx ; очищаємо rdx
div rcx
; ділимо rax на
10, залишок буде в rdx
add dl, '0' ; перетворюємо залишок в ASCII
mov [rbx], dl ; зберігаємо цифру
test rax, rax ; перевіряємо, чи залишилося число
jnz reverse_loop
; вивести рядок
mov rdi, rbx ; вказуємо на початок рядка
call print_string
ret
c2VjdGlvbiAuZGF0YQogICAgbnVtYmVycyAgICAgZHEgMTAsIDI1LCAxNywgOCwgNDUsIDMzLCAyLCAyOSwgNTAsIDE1CiAgICBhICAgICAgICAgICBkcSAxMAogICAgYiAgICAgICAgICAgZHEgNDAKICAgIG1pblZhbCAgICAgIGRxIDB4N0ZGRkZGRkZGRkZGRkZGRgogICAgbWF4VmFsICAgICAgZHEgMAogICAgZm91bmQgICAgICAgZGIgMAoKICAgIG1zZ01pbiAgICAgIGRiICJNaW46ICIsIDAKICAgIG1zZ01heCAgICAgIGRiICJNYXg6ICIsIDAKICAgIG1zZ05vbmUgICAgIGRiICJObyB2YWx1ZXMgaW4gcmFuZ2UgKGEsIGIpLiIsIDEwLCAwCgpzZWN0aW9uIC5ic3MKICAgIG51bUJ1ZmZlciAgIHJlc2IgMjAgICA7INCR0YPRhNC10YAg0LTQu9GPINGH0LjRgdC70LAg0YMg0LLQuNCz0LvRj9C00ZYg0YDRj9C00LrQsAoKc2VjdGlvbiAudGV4dAogICAgZ2xvYmFsIF9zdGFydAoKX3N0YXJ0OgogICAgeG9yIHJjeCwgcmN4ICAgICAgICAgICAgICAgIDsgaW5kZXggPSAwCgoubG9vcDoKICAgIGNtcCByY3gsIDEwCiAgICBqZ2UgLmRvbmVfY2hlY2sKCiAgICBtb3YgcmF4LCBbbnVtYmVycyArIHJjeCo4XSAgOyDQvtGC0YDQuNC80YPRlNC80L4g0L/QvtGC0L7Rh9C90LUg0YfQuNGB0LvQvgoKICAgIG1vdiByYngsIFthXQogICAgY21wIHJheCwgcmJ4CiAgICBqbGUgLm5leHQKCiAgICBtb3YgcmJ4LCBbYl0KICAgIGNtcCByYXgsIHJieAogICAgamdlIC5uZXh0CgogICAgOyDQt9C90LDQudC00LXQvdC+INCy0LDQu9GW0LTQvdC1INGH0LjRgdC70L4KICAgIG1vdiBieXRlIFtmb3VuZF0sIDEKCiAgICA7INC+0L3QvtCy0LvQtdC90L3RjyDQvNGW0L3RltC80YPQvNGDCiAgICBtb3YgcmJ4LCBbbWluVmFsXQogICAgY21wIHJheCwgcmJ4CiAgICBqZ2UgLnNraXBfbWluCiAgICBtb3YgW21pblZhbF0sIHJheAouc2tpcF9taW46CgogICAgOyDQvtC90L7QstC70LXQvdC90Y8g0LzQsNC60YHQuNC80YPQvNGDCiAgICBtb3YgcmJ4LCBbbWF4VmFsXQogICAgY21wIHJheCwgcmJ4CiAgICBqbGUgLnNraXBfbWF4CiAgICBtb3YgW21heFZhbF0sIHJheAouc2tpcF9tYXg6CgoubmV4dDoKICAgIGluYyByY3gKICAgIGptcCAubG9vcAoKLmRvbmVfY2hlY2s6CiAgICBjbXAgYnl0ZSBbZm91bmRdLCAwCiAgICBqZSAucHJpbnRfbm9uZQoKICAgIDsg0LTRgNGD0Log0LzRltC90ZbQvNGD0LzRgwogICAgbW92IHJkaSwgbXNnTWluCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgbW92IHJzaSwgW21pblZhbF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCgogICAgOyDQtNGA0YPQuiDQvNCw0LrRgdC40LzRg9C80YMKICAgIG1vdiByZGksIG1zZ01heAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIG1vdiByc2ksIFttYXhWYWxdCiAgICBjYWxsIHByaW50X251bWJlcgoKICAgIGptcCAuZXhpdAoKLnByaW50X25vbmU6CiAgICBtb3YgcmRpLCBtc2dOb25lCiAgICBjYWxsIHByaW50X3N0cmluZwoKLmV4aXQ6CiAgICBtb3YgcmF4LCA2MCAgICAgOyBzeXNjYWxsOiBleGl0CiAgICB4b3IgcmRpLCByZGkgICAgOyDRgdGC0LDRgtGD0YEgMAogICAgc3lzY2FsbAoKOyAtLS0tLS0tLS0tLS0tLS0tLS0tCjsgcHJpbnRfc3RyaW5nIC0g0LLQuNCy0LXRgdGC0Lgg0YDRj9C00L7Qugo7IC0tLS0tLS0tLS0tLS0tLS0tLS0KcHJpbnRfc3RyaW5nOgogICAgbW92IHJheCwgMSAgICAgIDsgc3lzY2FsbDogc3lzX3dyaXRlCiAgICBtb3YgcmRpLCAxICAgICAgOyBmaWxlIGRlc2NyaXB0b3IgKHN0ZG91dCkKICAgIG1vdiByZHgsIDEwMCAgICA7INC80LDQutGB0LjQvNCw0LvRjNC90LAg0LTQvtCy0LbQuNC90LAgKNC30LDQstC20LTQuCDQsdGW0LvRjNGI0LUg0LfQsCDRgNC10LDQu9GM0L3QuNC5INGA0L7Qt9C80ZbRgCkKICAgIHN5c2NhbGwKICAgIHJldAoKOyAtLS0tLS0tLS0tLS0tLS0tLS0tCjsgcHJpbnRfbnVtYmVyIC0g0LLQuNCy0LXRgdGC0Lgg0YfQuNGB0LvQviAo0L/QtdGA0LXRgtCy0L7RgNC40YLQuCDQvdCwINGA0Y/QtNC+0LopCjsgLS0tLS0tLS0tLS0tLS0tLS0tLQpwcmludF9udW1iZXI6CiAgICA7INCi0YPRgiDQv9C+0YLRgNGW0LHQvdC+INC/0LXRgNC10LLQtdGB0YLQuCDRh9C40YHQu9C+INCyINGA0Y/QtNC+0LoKICAgIDsg0J/QtdGA0LXQstC10LTQtdC80L4g0YfQuNGB0LvQviDQsiDQtNC10YHRj9GC0LrQvtCy0LjQuSDRgNGP0LTQvtC6CiAgICBtb3YgcmF4LCByc2kgICAgICAgOyDQvtGC0YDQuNC80YPRlNC80L4g0YfQuNGB0LvQviDQtNC70Y8g0LLQuNCy0LXQtNC10L3QvdGPCiAgICBtb3YgcmN4LCAxMCAgICAgICAgOyDQvtGB0L3QvtCy0LAg0LTQu9GPINC00ZbQu9C10L3QvdGPICjQtNC10YHRj9GC0LrQvtCy0LApCiAgICBtb3YgcmJ4LCBudW1CdWZmZXIgOyDQsdGD0YTQtdGAINC00LvRjyDQt9Cx0LXRgNC10LbQtdC90L3RjyDRhtC40YTRgAogICAgYWRkIHJieCwgMTkgICAgICAgIDsg0YHRgtCw0LLQuNC80L4g0LrRltC90LXRhtGMINCx0YPRhNC10YDQsAogICAgbW92IGJ5dGUgW3JieF0sIDAgIDsg0YLQtdGA0LzRltC90LDRgtC+0YAg0YDRj9C00LrQsAoKcmV2ZXJzZV9sb29wOgogICAgZGVjIHJieCAgICAgICAgICAgIDsg0L/QtdGA0LXQvNGW0YnQsNGU0LzQviDQtNC+INC80ZbRgdGG0Y8g0LTQu9GPINC30LHQtdGA0ZbQs9Cw0L3QvdGPINGG0LjRhNGA0LgKICAgIHhvciByZHgsIHJkeCAgICAgICA7INC+0YfQuNGJ0LDRlNC80L4gcmR4CiAgICBkaXYgcmN4ICAgICAgICAgICAgOyDQtNGW0LvQuNC80L4gcmF4INC90LAgMTAsINC30LDQu9C40YjQvtC6INCx0YPQtNC1INCyIHJkeAogICAgYWRkIGRsLCAnMCcgICAgICAgIDsg0L/QtdGA0LXRgtCy0L7RgNGO0ZTQvNC+INC30LDQu9C40YjQvtC6INCyIEFTQ0lJCiAgICBtb3YgW3JieF0sIGRsICAgICAgOyDQt9Cx0LXRgNGW0LPQsNGU0LzQviDRhtC40YTRgNGDCiAgICB0ZXN0IHJheCwgcmF4ICAgICAgOyDQv9C10YDQtdCy0ZbRgNGP0ZTQvNC+LCDRh9C4INC30LDQu9C40YjQuNC70L7RgdGPINGH0LjRgdC70L4KICAgIGpueiByZXZlcnNlX2xvb3AKCiAgICA7INCy0LjQstC10YHRgtC4INGA0Y/QtNC+0LoKICAgIG1vdiByZGksIHJieCAgICAgICA7INCy0LrQsNC30YPRlNC80L4g0L3QsCDQv9C+0YfQsNGC0L7QuiDRgNGP0LTQutCwCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgcmV0Cgo=