section .data
arr dw 10, 25, 33, 47, 58 ; массив из 5 чисел
len equ ($ - arr) / 2
msg db "Результат: ", 0
section .bss
buffer resb 20 ; буфер для числа
section .text
global _start
_start:
; --- Вычисление разницы ---
movzx eax, word [arr] ; первый элемент
movzx ebx, word [arr + (len - 1) * 2] ; последний элемент
sub eax, ebx ; разница = первый - последний
; --- Вывод "Результат: " ---
mov rdi, msg
call print_string
; --- Преобразование и вывод числа ---
mov rdi, rax
call print_int
; --- Новая строка ---
mov rdi, 10
call print_char
; --- Выход ---
mov rax, 60 ; sys_exit
xor rdi, rdi ; код 0
syscall
; === Подпрограмма: вывод строки (rdi = адрес строки, завершённой нулём) ===
print_string:
push rax
push rbx
push rcx
push rdx
mov rcx, rdi
xor rdx, rdx
.strlen_loop:
cmp byte [rcx + rdx], 0
je .got_len
inc rdx
jmp .strlen_loop
.got_len:
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, rcx
; rdx уже содержит длину
syscall
pop rdx
pop rcx
pop rbx
pop rax
ret
; === Подпрограмма: вывод одного символа (rdi = символ) ===
print_char:
push rax
push rdi
mov [buffer], dil
mov rax, 1
mov rdi, 1
mov rsi, buffer
mov rdx, 1
syscall
pop rdi
pop rax
ret
; === Подпрограмма: вывод целого числа (rdi = число) ===
print_int:
push rax
push rbx
push rcx
push rdx
push rdi
mov rax, rdi ; число в rax
cmp rax, 0
jge .positive
; Если отрицательное — выводим минус и делаем положительным
mov dil, '-'
call print_char
neg rax
.positive:
mov rbx, 10
mov rcx, buffer + 19
mov byte [rcx], 0 ; завершаем строку нулём
dec rcx
.digit_loop:
xor rdx, rdx
div rbx
; rax
= rax
/ 10, rdx
= остаток
add dl, '0'
mov [rcx], dl
dec rcx
test rax, rax
jnz .digit_loop
; rcx+1 — начало строки цифр
mov rdi, rcx
inc rdi
call print_string
pop rdi
pop rdx
pop rcx
pop rbx
pop rax
ret
c2VjdGlvbiAuZGF0YQogICAgYXJyICAgICBkdyAxMCwgMjUsIDMzLCA0NywgNTggICAgICA7INC80LDRgdGB0LjQsiDQuNC3IDUg0YfQuNGB0LXQuwogICAgbGVuICAgICBlcXUgKCQgLSBhcnIpIC8gMgogICAgbXNnICAgICBkYiAi0KDQtdC30YPQu9GM0YLQsNGCOiAiLCAwCgpzZWN0aW9uIC5ic3MKICAgIGJ1ZmZlciAgcmVzYiAyMCAgICAgICAgICAgICAgICAgICAgOyDQsdGD0YTQtdGAINC00LvRjyDRh9C40YHQu9CwCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IC0tLSDQktGL0YfQuNGB0LvQtdC90LjQtSDRgNCw0LfQvdC40YbRiyAtLS0KICAgIG1vdnp4IGVheCwgd29yZCBbYXJyXSAgICAgICAgICAgICAgICAgICAgIDsg0L/QtdGA0LLRi9C5INGN0LvQtdC80LXQvdGCCiAgICBtb3Z6eCBlYngsIHdvcmQgW2FyciArIChsZW4gLSAxKSAqIDJdICAgICA7INC/0L7RgdC70LXQtNC90LjQuSDRjdC70LXQvNC10L3RggogICAgc3ViICAgZWF4LCBlYnggICAgICAgICAgICAgICAgICAgICAgICAgICAgOyDRgNCw0LfQvdC40YbQsCA9INC/0LXRgNCy0YvQuSAtINC/0L7RgdC70LXQtNC90LjQuQoKICAgIDsgLS0tINCS0YvQstC+0LQgItCg0LXQt9GD0LvRjNGC0LDRgjogIiAtLS0KICAgIG1vdiAgIHJkaSwgbXNnCiAgICBjYWxsICBwcmludF9zdHJpbmcKCiAgICA7IC0tLSDQn9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1INC4INCy0YvQstC+0LQg0YfQuNGB0LvQsCAtLS0KICAgIG1vdiAgIHJkaSwgcmF4CiAgICBjYWxsICBwcmludF9pbnQKCiAgICA7IC0tLSDQndC+0LLQsNGPINGB0YLRgNC+0LrQsCAtLS0KICAgIG1vdiAgIHJkaSwgMTAKICAgIGNhbGwgIHByaW50X2NoYXIKCiAgICA7IC0tLSDQktGL0YXQvtC0IC0tLQogICAgbW92ICAgcmF4LCA2MCAgICAgIDsgc3lzX2V4aXQKICAgIHhvciAgIHJkaSwgcmRpICAgICA7INC60L7QtCAwCiAgICBzeXNjYWxsCgo7ID09PSDQn9C+0LTQv9GA0L7Qs9GA0LDQvNC80LA6INCy0YvQstC+0LQg0YHRgtGA0L7QutC4IChyZGkgPSDQsNC00YDQtdGBINGB0YLRgNC+0LrQuCwg0LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvdGD0LvRkdC8KSA9PT0KcHJpbnRfc3RyaW5nOgogICAgcHVzaCByYXgKICAgIHB1c2ggcmJ4CiAgICBwdXNoIHJjeAogICAgcHVzaCByZHgKICAgIG1vdiByY3gsIHJkaQogICAgeG9yIHJkeCwgcmR4Ci5zdHJsZW5fbG9vcDoKICAgIGNtcCBieXRlIFtyY3ggKyByZHhdLCAwCiAgICBqZSAuZ290X2xlbgogICAgaW5jIHJkeAogICAgam1wIC5zdHJsZW5fbG9vcAouZ290X2xlbjoKICAgIG1vdiByYXgsIDEgICAgICAgICA7IHN5c193cml0ZQogICAgbW92IHJkaSwgMSAgICAgICAgIDsgc3Rkb3V0CiAgICBtb3YgcnNpLCByY3gKICAgIDsgcmR4INGD0LbQtSDRgdC+0LTQtdGA0LbQuNGCINC00LvQuNC90YMKICAgIHN5c2NhbGwKICAgIHBvcCByZHgKICAgIHBvcCByY3gKICAgIHBvcCByYngKICAgIHBvcCByYXgKICAgIHJldAoKOyA9PT0g0J/QvtC00L/RgNC+0LPRgNCw0LzQvNCwOiDQstGL0LLQvtC0INC+0LTQvdC+0LPQviDRgdC40LzQstC+0LvQsCAocmRpID0g0YHQuNC80LLQvtC7KSA9PT0KcHJpbnRfY2hhcjoKICAgIHB1c2ggcmF4CiAgICBwdXNoIHJkaQogICAgbW92IFtidWZmZXJdLCBkaWwKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIGJ1ZmZlcgogICAgbW92IHJkeCwgMQogICAgc3lzY2FsbAogICAgcG9wIHJkaQogICAgcG9wIHJheAogICAgcmV0Cgo7ID09PSDQn9C+0LTQv9GA0L7Qs9GA0LDQvNC80LA6INCy0YvQstC+0LQg0YbQtdC70L7Qs9C+INGH0LjRgdC70LAgKHJkaSA9INGH0LjRgdC70L4pID09PQpwcmludF9pbnQ6CiAgICBwdXNoIHJheAogICAgcHVzaCByYngKICAgIHB1c2ggcmN4CiAgICBwdXNoIHJkeAogICAgcHVzaCByZGkKCiAgICBtb3YgcmF4LCByZGkgICAgICAgIDsg0YfQuNGB0LvQviDQsiByYXgKICAgIGNtcCByYXgsIDAKICAgIGpnZSAucG9zaXRpdmUKCiAgICA7INCV0YHQu9C4INC+0YLRgNC40YbQsNGC0LXQu9GM0L3QvtC1IOKAlCDQstGL0LLQvtC00LjQvCDQvNC40L3Rg9GBINC4INC00LXQu9Cw0LXQvCDQv9C+0LvQvtC20LjRgtC10LvRjNC90YvQvAogICAgbW92IGRpbCwgJy0nCiAgICBjYWxsIHByaW50X2NoYXIKICAgIG5lZyByYXgKCi5wb3NpdGl2ZToKICAgIG1vdiByYngsIDEwCiAgICBtb3YgcmN4LCBidWZmZXIgKyAxOQogICAgbW92IGJ5dGUgW3JjeF0sIDAgICA7INC30LDQstC10YDRiNCw0LXQvCDRgdGC0YDQvtC60YMg0L3Rg9C70ZHQvAogICAgZGVjIHJjeAoKLmRpZ2l0X2xvb3A6CiAgICB4b3IgcmR4LCByZHgKICAgIGRpdiByYnggICAgICAgICAgICAgOyByYXggPSByYXggLyAxMCwgcmR4ID0g0L7RgdGC0LDRgtC+0LoKICAgIGFkZCBkbCwgJzAnCiAgICBtb3YgW3JjeF0sIGRsCiAgICBkZWMgcmN4CiAgICB0ZXN0IHJheCwgcmF4CiAgICBqbnogLmRpZ2l0X2xvb3AKCiAgICA7IHJjeCsxIOKAlCDQvdCw0YfQsNC70L4g0YHRgtGA0L7QutC4INGG0LjRhNGACiAgICBtb3YgcmRpLCByY3gKICAgIGluYyByZGkKICAgIGNhbGwgcHJpbnRfc3RyaW5nCgogICAgcG9wIHJkaQogICAgcG9wIHJkeAogICAgcG9wIHJjeAogICAgcG9wIHJieAogICAgcG9wIHJheAogICAgcmV0