section .data
; Пример чисел разных размеров
byte_num1 db -50
byte_num2 db 100
word_num1 dw -1000
word_num2 dw 2000
dword_num1 dd -50000
dword_num2 dd 100000
qword_num1 dq -5000000
qword_num2 dq 10000000
result dq 0
; Сообщения
msg_title db "Сложение знаковых чисел", 10
db "========================", 10, 10, 0
msg_byte db "1) Сложение байтов (-50 + 100): ", 0
msg_word db "2) Сложение слов (-1000 + 2000): ", 0
msg_dword db "3) Сложение двойных слов (-50000 + 100000): ", 0
msg_qword db "4) Сложение учетверенных слов (-5000000 + 10000000): ", 0
msg_equal db " = ", 0
newline db 10, 0
section .bss
buffer resb 21
section .text
global _start
_start:
; Вывод заголовка
mov rdi, msg_title
call print_string
; 1. Сложение байтов (1 байт)
mov rdi, msg_byte
call print_string
movsx rax, byte [byte_num1]
movsx rbx, byte [byte_num2]
add rax, rbx
mov [result], rax
; Вывод первого числа
movsx rax, byte [byte_num1]
call print_number
mov rdi, msg_equal
call print_string
; Вывод второго числа
movsx rax, byte [byte_num2]
call print_number
mov rdi, msg_equal
call print_string
; Вывод результата
mov rax, [result]
call print_number
mov rdi, newline
call print_string
; 2. Сложение слов (2 байта)
mov rdi, msg_word
call print_string
movsx rax, word [word_num1]
movsx rbx, word [word_num2]
add rax, rbx
mov [result], rax
; Вывод первого числа
movsx rax, word [word_num1]
call print_number
mov rdi, msg_equal
call print_string
; Вывод второго числа
movsx rax, word [word_num2]
call print_number
mov rdi, msg_equal
call print_string
; Вывод результата
mov rax, [result]
call print_number
mov rdi, newline
call print_string
; 3. Сложение двойных слов (4 байта)
mov rdi, msg_dword
call print_string
movsxd rax, dword [dword_num1]
movsxd rbx, dword [dword_num2]
add rax, rbx
mov [result], rax
; Вывод первого числа
movsxd rax, dword [dword_num1]
call print_number
mov rdi, msg_equal
call print_string
; Вывод второго числа
movsxd rax, dword [dword_num2]
call print_number
mov rdi, msg_equal
call print_string
; Вывод результата
mov rax, [result]
call print_number
mov rdi, newline
call print_string
; 4. Сложение учетверенных слов (8 байт)
mov rdi, msg_qword
call print_string
mov rax, [qword_num1]
mov rbx, [qword_num2]
add rax, rbx
mov [result], rax
; Вывод первого числа
mov rax, [qword_num1]
call print_number
mov rdi, msg_equal
call print_string
; Вывод второго числа
mov rax, [qword_num2]
call print_number
mov rdi, msg_equal
call print_string
; Вывод результата
mov rax, [result]
call print_number
mov rdi, newline
call print_string
; Завершение программы
mov rax, 60
xor rdi, rdi
syscall
; Вывод числа из RAX
print_number:
push rax
push rbx
push rcx
push rdx
push rdi
push rsi
mov rdi, buffer
call int64_to_string
call print_string
pop rsi
pop rdi
pop rdx
pop rcx
pop rbx
pop rax
ret
; Преобразование числа в строку (упрощенная версия)
int64_to_string:
push rbx
push rcx
push rdx
push rdi
test rax, rax
jns .positive
mov byte [rdi], '-'
inc rdi
neg rax
.positive:
mov rbx, 10
mov rcx, 0
.digit_loop:
xor rdx, rdx
add dl, '0'
push rdx
inc rcx
test rax, rax
jnz .digit_loop
.pop_digits:
pop rax
mov [rdi], al
inc rdi
loop .pop_digits
mov byte [rdi], 0
pop rdi
pop rdx
pop rcx
pop rbx
ret
; Вывод строки
print_string:
push rax
push rdi
push rsi
push rdx
push rcx
mov rsi, rdi
mov rcx, 0
.length_loop:
cmp byte [rsi], 0
je .print
inc rsi
inc rcx
jmp .length_loop
.print:
mov rax, 1
mov rdi, 1
mov rdx, rcx
syscall
pop rcx
pop rdx
pop rsi
pop rdi
pop rax
ret
c2VjdGlvbiAuZGF0YQogICAgOyDQn9GA0LjQvNC10YAg0YfQuNGB0LXQuyDRgNCw0LfQvdGL0YUg0YDQsNC30LzQtdGA0L7QsgogICAgYnl0ZV9udW0xICAgZGIgLTUwCiAgICBieXRlX251bTIgICBkYiAxMDAKICAgIHdvcmRfbnVtMSAgIGR3IC0xMDAwCiAgICB3b3JkX251bTIgICBkdyAyMDAwCiAgICBkd29yZF9udW0xICBkZCAtNTAwMDAKICAgIGR3b3JkX251bTIgIGRkIDEwMDAwMAogICAgcXdvcmRfbnVtMSAgZHEgLTUwMDAwMDAKICAgIHF3b3JkX251bTIgIGRxIDEwMDAwMDAwCiAgICAKICAgIHJlc3VsdCAgICAgIGRxIDAKICAgIAogICAgOyDQodC+0L7QsdGJ0LXQvdC40Y8KICAgIG1zZ190aXRsZSAgIGRiICLQodC70L7QttC10L3QuNC1INC30L3QsNC60L7QstGL0YUg0YfQuNGB0LXQuyIsIDEwCiAgICAgICAgICAgICAgICBkYiAiPT09PT09PT09PT09PT09PT09PT09PT09IiwgMTAsIDEwLCAwCiAgICBtc2dfYnl0ZSAgICBkYiAiMSkg0KHQu9C+0LbQtdC90LjQtSDQsdCw0LnRgtC+0LIgKC01MCArIDEwMCk6ICIsIDAKICAgIG1zZ193b3JkICAgIGRiICIyKSDQodC70L7QttC10L3QuNC1INGB0LvQvtCyICgtMTAwMCArIDIwMDApOiAiLCAwCiAgICBtc2dfZHdvcmQgICBkYiAiMykg0KHQu9C+0LbQtdC90LjQtSDQtNCy0L7QudC90YvRhSDRgdC70L7QsiAoLTUwMDAwICsgMTAwMDAwKTogIiwgMAogICAgbXNnX3F3b3JkICAgZGIgIjQpINCh0LvQvtC20LXQvdC40LUg0YPRh9C10YLQstC10YDQtdC90L3Ri9GFINGB0LvQvtCyICgtNTAwMDAwMCArIDEwMDAwMDAwKTogIiwgMAogICAgbXNnX2VxdWFsICAgZGIgIiA9ICIsIDAKICAgIG5ld2xpbmUgICAgIGRiIDEwLCAwCgpzZWN0aW9uIC5ic3MKICAgIGJ1ZmZlciAgICAgIHJlc2IgMjEKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsg0JLRi9Cy0L7QtCDQt9Cw0LPQvtC70L7QstC60LAKICAgIG1vdiByZGksIG1zZ190aXRsZQogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyAxLiDQodC70L7QttC10L3QuNC1INCx0LDQudGC0L7QsiAoMSDQsdCw0LnRgikKICAgIG1vdiByZGksIG1zZ19ieXRlCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICBtb3ZzeCByYXgsIGJ5dGUgW2J5dGVfbnVtMV0KICAgIG1vdnN4IHJieCwgYnl0ZSBbYnl0ZV9udW0yXQogICAgYWRkIHJheCwgcmJ4CiAgICBtb3YgW3Jlc3VsdF0sIHJheAogICAgCiAgICA7INCS0YvQstC+0LQg0L/QtdGA0LLQvtCz0L4g0YfQuNGB0LvQsAogICAgbW92c3ggcmF4LCBieXRlIFtieXRlX251bTFdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgbW92IHJkaSwgbXNnX2VxdWFsCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgOyDQktGL0LLQvtC0INCy0YLQvtGA0L7Qs9C+INGH0LjRgdC70LAKICAgIG1vdnN4IHJheCwgYnl0ZSBbYnl0ZV9udW0yXQogICAgY2FsbCBwcmludF9udW1iZXIKICAgIG1vdiByZGksIG1zZ19lcXVhbAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIDsg0JLRi9Cy0L7QtCDRgNC10LfRg9C70YzRgtCw0YLQsAogICAgbW92IHJheCwgW3Jlc3VsdF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBtb3YgcmRpLCBuZXdsaW5lCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICA7IDIuINCh0LvQvtC20LXQvdC40LUg0YHQu9C+0LIgKDIg0LHQsNC50YLQsCkKICAgIG1vdiByZGksIG1zZ193b3JkCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICBtb3ZzeCByYXgsIHdvcmQgW3dvcmRfbnVtMV0KICAgIG1vdnN4IHJieCwgd29yZCBbd29yZF9udW0yXQogICAgYWRkIHJheCwgcmJ4CiAgICBtb3YgW3Jlc3VsdF0sIHJheAogICAgCiAgICA7INCS0YvQstC+0LQg0L/QtdGA0LLQvtCz0L4g0YfQuNGB0LvQsAogICAgbW92c3ggcmF4LCB3b3JkIFt3b3JkX251bTFdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgbW92IHJkaSwgbXNnX2VxdWFsCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgOyDQktGL0LLQvtC0INCy0YLQvtGA0L7Qs9C+INGH0LjRgdC70LAKICAgIG1vdnN4IHJheCwgd29yZCBbd29yZF9udW0yXQogICAgY2FsbCBwcmludF9udW1iZXIKICAgIG1vdiByZGksIG1zZ19lcXVhbAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIDsg0JLRi9Cy0L7QtCDRgNC10LfRg9C70YzRgtCw0YLQsAogICAgbW92IHJheCwgW3Jlc3VsdF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBtb3YgcmRpLCBuZXdsaW5lCiAgICBjYWxsIHByaW50X3N0cmluZwogICAgCiAgICA7IDMuINCh0LvQvtC20LXQvdC40LUg0LTQstC+0LnQvdGL0YUg0YHQu9C+0LIgKDQg0LHQsNC50YLQsCkKICAgIG1vdiByZGksIG1zZ19kd29yZAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgbW92c3hkIHJheCwgZHdvcmQgW2R3b3JkX251bTFdCiAgICBtb3ZzeGQgcmJ4LCBkd29yZCBbZHdvcmRfbnVtMl0KICAgIGFkZCByYXgsIHJieAogICAgbW92IFtyZXN1bHRdLCByYXgKICAgIAogICAgOyDQktGL0LLQvtC0INC/0LXRgNCy0L7Qs9C+INGH0LjRgdC70LAKICAgIG1vdnN4ZCByYXgsIGR3b3JkIFtkd29yZF9udW0xXQogICAgY2FsbCBwcmludF9udW1iZXIKICAgIG1vdiByZGksIG1zZ19lcXVhbAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIDsg0JLRi9Cy0L7QtCDQstGC0L7RgNC+0LPQviDRh9C40YHQu9CwCiAgICBtb3ZzeGQgcmF4LCBkd29yZCBbZHdvcmRfbnVtMl0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBtb3YgcmRpLCBtc2dfZXF1YWwKICAgIGNhbGwgcHJpbnRfc3RyaW5nCiAgICA7INCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0LAKICAgIG1vdiByYXgsIFtyZXN1bHRdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgbW92IHJkaSwgbmV3bGluZQogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyA0LiDQodC70L7QttC10L3QuNC1INGD0YfQtdGC0LLQtdGA0LXQvdC90YvRhSDRgdC70L7QsiAoOCDQsdCw0LnRgikKICAgIG1vdiByZGksIG1zZ19xd29yZAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgbW92IHJheCwgW3F3b3JkX251bTFdCiAgICBtb3YgcmJ4LCBbcXdvcmRfbnVtMl0KICAgIGFkZCByYXgsIHJieAogICAgbW92IFtyZXN1bHRdLCByYXgKICAgIAogICAgOyDQktGL0LLQvtC0INC/0LXRgNCy0L7Qs9C+INGH0LjRgdC70LAKICAgIG1vdiByYXgsIFtxd29yZF9udW0xXQogICAgY2FsbCBwcmludF9udW1iZXIKICAgIG1vdiByZGksIG1zZ19lcXVhbAogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIDsg0JLRi9Cy0L7QtCDQstGC0L7RgNC+0LPQviDRh9C40YHQu9CwCiAgICBtb3YgcmF4LCBbcXdvcmRfbnVtMl0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBtb3YgcmRpLCBtc2dfZXF1YWwKICAgIGNhbGwgcHJpbnRfc3RyaW5nCiAgICA7INCS0YvQstC+0LQg0YDQtdC30YPQu9GM0YLQsNGC0LAKICAgIG1vdiByYXgsIFtyZXN1bHRdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgbW92IHJkaSwgbmV3bGluZQogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgOyDQl9Cw0LLQtdGA0YjQtdC90LjQtSDQv9GA0L7Qs9GA0LDQvNC80YsKICAgIG1vdiByYXgsIDYwCiAgICB4b3IgcmRpLCByZGkKICAgIHN5c2NhbGwKCjsg0JLRi9Cy0L7QtCDRh9C40YHQu9CwINC40LcgUkFYCnByaW50X251bWJlcjoKICAgIHB1c2ggcmF4CiAgICBwdXNoIHJieAogICAgcHVzaCByY3gKICAgIHB1c2ggcmR4CiAgICBwdXNoIHJkaQogICAgcHVzaCByc2kKICAgIAogICAgbW92IHJkaSwgYnVmZmVyCiAgICBjYWxsIGludDY0X3RvX3N0cmluZwogICAgY2FsbCBwcmludF9zdHJpbmcKICAgIAogICAgcG9wIHJzaQogICAgcG9wIHJkaQogICAgcG9wIHJkeAogICAgcG9wIHJjeAogICAgcG9wIHJieAogICAgcG9wIHJheAogICAgcmV0Cgo7INCf0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40LUg0YfQuNGB0LvQsCDQsiDRgdGC0YDQvtC60YMgKNGD0L/RgNC+0YnQtdC90L3QsNGPINCy0LXRgNGB0LjRjykKaW50NjRfdG9fc3RyaW5nOgogICAgcHVzaCByYngKICAgIHB1c2ggcmN4CiAgICBwdXNoIHJkeAogICAgcHVzaCByZGkKICAgIAogICAgdGVzdCByYXgsIHJheAogICAgam5zIC5wb3NpdGl2ZQogICAgbW92IGJ5dGUgW3JkaV0sICctJwogICAgaW5jIHJkaQogICAgbmVnIHJheAogICAgCi5wb3NpdGl2ZToKICAgIG1vdiByYngsIDEwCiAgICBtb3YgcmN4LCAwCiAgICAKLmRpZ2l0X2xvb3A6CiAgICB4b3IgcmR4LCByZHgKICAgIGRpdiByYngKICAgIGFkZCBkbCwgJzAnCiAgICBwdXNoIHJkeAogICAgaW5jIHJjeAogICAgdGVzdCByYXgsIHJheAogICAgam56IC5kaWdpdF9sb29wCiAgICAKLnBvcF9kaWdpdHM6CiAgICBwb3AgcmF4CiAgICBtb3YgW3JkaV0sIGFsCiAgICBpbmMgcmRpCiAgICBsb29wIC5wb3BfZGlnaXRzCiAgICAKICAgIG1vdiBieXRlIFtyZGldLCAwCiAgICBwb3AgcmRpCiAgICBwb3AgcmR4CiAgICBwb3AgcmN4CiAgICBwb3AgcmJ4CiAgICByZXQKCjsg0JLRi9Cy0L7QtCDRgdGC0YDQvtC60LgKcHJpbnRfc3RyaW5nOgogICAgcHVzaCByYXgKICAgIHB1c2ggcmRpCiAgICBwdXNoIHJzaQogICAgcHVzaCByZHgKICAgIHB1c2ggcmN4CiAgICAKICAgIG1vdiByc2ksIHJkaQogICAgbW92IHJjeCwgMAoubGVuZ3RoX2xvb3A6CiAgICBjbXAgYnl0ZSBbcnNpXSwgMAogICAgamUgLnByaW50CiAgICBpbmMgcnNpCiAgICBpbmMgcmN4CiAgICBqbXAgLmxlbmd0aF9sb29wCiAgICAKLnByaW50OgogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJkeCwgcmN4CiAgICBzeXNjYWxsCiAgICAKICAgIHBvcCByY3gKICAgIHBvcCByZHgKICAgIHBvcCByc2kKICAgIHBvcCByZGkKICAgIHBvcCByYXgKICAgIHJldA==