section .data
; 1. Создать переменную с текстом
text db 'Assembler – low level programming', 0
text_len equ $ - text
; 2. Создать переменную со значением 40
var1 dd 40
; 3. Создать переменную со значением 36
var2 dd 36
; Для вывода результатов
result_msg1 db 'Subtraction result: ', 0
result_msg2 db 'Addition result: ', 0
result_msg3 db 'Add immediate result: ', 0
result_msg4 db 'Subtract immediate result: ', 0
newline db 0xA, 0
section .bss
; Буфер для вывода чисел
buffer resb 16
section .text
global _start
_start:
; Выводим исходный текст
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, text ; указатель на текст
mov rdx, text_len ; длина текста
syscall
; Выводим перевод строки
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; 4. Вычесть из первой вторую (40 - 36)
mov eax, [var1] ; загружаем var1 в eax
sub eax, [var2] ; вычитаем var2
; Результат в eax = 4
; Выводим сообщение о вычитании
mov rax, 1
mov rdi, 1
mov rsi, result_msg1
mov rdx, 19
syscall
; Выводим результат вычитания
call print_number
; 5. Сложить первую со второй (40 + 36)
mov eax, [var1] ; загружаем var1
add eax, [var2] ; прибавляем var2
; Результат в eax = 76
; Выводим сообщение о сложении
mov rax, 1
mov rdi, 1
mov rsi, result_msg2
mov rdx, 17
syscall
; Выводим результат сложения
call print_number
; 6. Сложить любое непосредственное значение с первой переменной
mov eax, [var1] ; загружаем var1 (40)
add eax, 25 ; прибавляем непосредственное значение 25
; Результат в eax = 65
; Выводим сообщение
mov rax, 1
mov rdi, 1
mov rsi, result_msg3
mov rdx, 22
syscall
; Выводим результат
call print_number
; 7. Вычесть из первой переменной любое непосредственное значение
mov eax, [var1] ; загружаем var1 (40)
sub eax, 15 ; вычитаем непосредственное значение 15
; Результат в eax = 25
; Выводим сообщение
mov rax, 1
mov rdi, 1
mov rsi, result_msg4
mov rdx, 27
syscall
; Выводим результат
call print_number
; Завершаем программу
mov rax, 60 ; sys_exit
mov rdi, 0 ; код возврата 0
syscall
; Функция для вывода числа из EAX
print_number:
push rax
push rbx
push rcx
push rdx
push rsi
mov rsi, buffer + 15 ; конец буфера
mov byte [rsi], 0 ; нулевой терминатор
mov ecx, 10 ; делитель (десятичная система)
.convert_loop:
xor edx, edx ; обнуляем edx для деления
div ecx
; eax
= eax
/10, edx
= остаток
add dl, '0' ; преобразуем цифру в символ
dec rsi ; двигаемся назад в буфере
mov [rsi], dl ; сохраняем символ
test eax, eax ; проверяем, не ноль ли eax
jnz .convert_loop ; если не ноль, продолжаем
; Вычисляем длину строки
mov rdx, buffer + 16 ; конец буфера
sub rdx, rsi ; длина = конец - начало
; Выводим число
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
; rsi уже указывает на начало строки
; rdx уже содержит длину
syscall
; Выводим перевод строки
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
pop rsi
pop rdx
pop rcx
pop rbx
pop rax
ret
c2VjdGlvbiAuZGF0YQogICAgOyAxLiDQodC+0LfQtNCw0YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiDRgSDRgtC10LrRgdGC0L7QvAogICAgdGV4dCBkYiAnQXNzZW1ibGVyIOKAkyBsb3cgbGV2ZWwgcHJvZ3JhbW1pbmcnLCAwCiAgICB0ZXh0X2xlbiBlcXUgJCAtIHRleHQKICAgIAogICAgOyAyLiDQodC+0LfQtNCw0YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiDRgdC+INC30L3QsNGH0LXQvdC40LXQvCA0MAogICAgdmFyMSBkZCA0MAogICAgCiAgICA7IDMuINCh0L7Qt9C00LDRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8IDM2ICAKICAgIHZhcjIgZGQgMzYKICAgIAogICAgOyDQlNC70Y8g0LLRi9Cy0L7QtNCwINGA0LXQt9GD0LvRjNGC0LDRgtC+0LIKICAgIHJlc3VsdF9tc2cxIGRiICdTdWJ0cmFjdGlvbiByZXN1bHQ6ICcsIDAKICAgIHJlc3VsdF9tc2cyIGRiICdBZGRpdGlvbiByZXN1bHQ6ICcsIDAKICAgIHJlc3VsdF9tc2czIGRiICdBZGQgaW1tZWRpYXRlIHJlc3VsdDogJywgMAogICAgcmVzdWx0X21zZzQgZGIgJ1N1YnRyYWN0IGltbWVkaWF0ZSByZXN1bHQ6ICcsIDAKICAgIG5ld2xpbmUgZGIgMHhBLCAwCiAgICAKc2VjdGlvbiAuYnNzCiAgICA7INCR0YPRhNC10YAg0LTQu9GPINCy0YvQstC+0LTQsCDRh9C40YHQtdC7CiAgICBidWZmZXIgcmVzYiAxNgoKc2VjdGlvbiAudGV4dAogICAgZ2xvYmFsIF9zdGFydAoKX3N0YXJ0OgogICAgOyDQktGL0LLQvtC00LjQvCDQuNGB0YXQvtC00L3Ri9C5INGC0LXQutGB0YIKICAgIG1vdiByYXgsIDEgICAgICAgICAgOyBzeXNfd3JpdGUKICAgIG1vdiByZGksIDEgICAgICAgICAgOyBzdGRvdXQKICAgIG1vdiByc2ksIHRleHQgICAgICAgOyDRg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDRgtC10LrRgdGCCiAgICBtb3YgcmR4LCB0ZXh0X2xlbiAgIDsg0LTQu9C40L3QsCDRgtC10LrRgdGC0LAKICAgIHN5c2NhbGwKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDQv9C10YDQtdCy0L7QtCDRgdGC0YDQvtC60LgKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIG5ld2xpbmUKICAgIG1vdiByZHgsIDEKICAgIHN5c2NhbGwKCiAgICA7IDQuINCS0YvRh9C10YHRgtGMINC40Lcg0L/QtdGA0LLQvtC5INCy0YLQvtGA0YPRjiAoNDAgLSAzNikKICAgIG1vdiBlYXgsIFt2YXIxXSAgICAgOyDQt9Cw0LPRgNGD0LbQsNC10LwgdmFyMSDQsiBlYXgKICAgIHN1YiBlYXgsIFt2YXIyXSAgICAgOyDQstGL0YfQuNGC0LDQtdC8IHZhcjIKICAgIDsg0KDQtdC30YPQu9GM0YLQsNGCINCyIGVheCA9IDQKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDRgdC+0L7QsdGJ0LXQvdC40LUg0L4g0LLRi9GH0LjRgtCw0L3QuNC4CiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcnNpLCByZXN1bHRfbXNnMQogICAgbW92IHJkeCwgMTkKICAgIHN5c2NhbGwKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDRgNC10LfRg9C70YzRgtCw0YIg0LLRi9GH0LjRgtCw0L3QuNGPCiAgICBjYWxsIHByaW50X251bWJlcgogICAgCiAgICA7IDUuINCh0LvQvtC20LjRgtGMINC/0LXRgNCy0YPRjiDRgdC+INCy0YLQvtGA0L7QuSAoNDAgKyAzNikKICAgIG1vdiBlYXgsIFt2YXIxXSAgICAgOyDQt9Cw0LPRgNGD0LbQsNC10LwgdmFyMQogICAgYWRkIGVheCwgW3ZhcjJdICAgICA7INC/0YDQuNCx0LDQstC70Y/QtdC8IHZhcjIKICAgIDsg0KDQtdC30YPQu9GM0YLQsNGCINCyIGVheCA9IDc2CiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0YHQvtC+0LHRidC10L3QuNC1INC+INGB0LvQvtC20LXQvdC40LgKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIHJlc3VsdF9tc2cyCiAgICBtb3YgcmR4LCAxNwogICAgc3lzY2FsbAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INGA0LXQt9GD0LvRjNGC0LDRgiDRgdC70L7QttC10L3QuNGPCiAgICBjYWxsIHByaW50X251bWJlcgogICAgCiAgICA7IDYuINCh0LvQvtC20LjRgtGMINC70Y7QsdC+0LUg0L3QtdC/0L7RgdGA0LXQtNGB0YLQstC10L3QvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRgSDQv9C10YDQstC+0Lkg0L/QtdGA0LXQvNC10L3QvdC+0LkKICAgIG1vdiBlYXgsIFt2YXIxXSAgICAgOyDQt9Cw0LPRgNGD0LbQsNC10LwgdmFyMSAoNDApCiAgICBhZGQgZWF4LCAyNSAgICAgICAgIDsg0L/RgNC40LHQsNCy0LvRj9C10Lwg0L3QtdC/0L7RgdGA0LXQtNGB0YLQstC10L3QvdC+0LUg0LfQvdCw0YfQtdC90LjQtSAyNQogICAgOyDQoNC10LfRg9C70YzRgtCw0YIg0LIgZWF4ID0gNjUKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDRgdC+0L7QsdGJ0LXQvdC40LUKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIHJlc3VsdF9tc2czCiAgICBtb3YgcmR4LCAyMgogICAgc3lzY2FsbAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INGA0LXQt9GD0LvRjNGC0LDRggogICAgY2FsbCBwcmludF9udW1iZXIKICAgIAogICAgOyA3LiDQktGL0YfQtdGB0YLRjCDQuNC3INC/0LXRgNCy0L7QuSDQv9C10YDQtdC80LXQvdC90L7QuSDQu9GO0LHQvtC1INC90LXQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUKICAgIG1vdiBlYXgsIFt2YXIxXSAgICAgOyDQt9Cw0LPRgNGD0LbQsNC10LwgdmFyMSAoNDApCiAgICBzdWIgZWF4LCAxNSAgICAgICAgIDsg0LLRi9GH0LjRgtCw0LXQvCDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L7QtSDQt9C90LDRh9C10L3QuNC1IDE1CiAgICA7INCg0LXQt9GD0LvRjNGC0LDRgiDQsiBlYXggPSAyNQogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INGB0L7QvtCx0YnQtdC90LjQtQogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJzaSwgcmVzdWx0X21zZzQKICAgIG1vdiByZHgsIDI3CiAgICBzeXNjYWxsCiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0YDQtdC30YPQu9GM0YLQsNGCCiAgICBjYWxsIHByaW50X251bWJlcgogICAgCiAgICA7INCX0LDQstC10YDRiNCw0LXQvCDQv9GA0L7Qs9GA0LDQvNC80YMKICAgIG1vdiByYXgsIDYwICAgICAgICAgOyBzeXNfZXhpdAogICAgbW92IHJkaSwgMCAgICAgICAgICA7INC60L7QtCDQstC+0LfQstGA0LDRgtCwIDAKICAgIHN5c2NhbGwKCjsg0KTRg9C90LrRhtC40Y8g0LTQu9GPINCy0YvQstC+0LTQsCDRh9C40YHQu9CwINC40LcgRUFYCnByaW50X251bWJlcjoKICAgIHB1c2ggcmF4CiAgICBwdXNoIHJieAogICAgcHVzaCByY3gKICAgIHB1c2ggcmR4CiAgICBwdXNoIHJzaQogICAgCiAgICBtb3YgcnNpLCBidWZmZXIgKyAxNSA7INC60L7QvdC10YYg0LHRg9GE0LXRgNCwCiAgICBtb3YgYnl0ZSBbcnNpXSwgMCAgICA7INC90YPQu9C10LLQvtC5INGC0LXRgNC80LjQvdCw0YLQvtGACiAgICBtb3YgZWN4LCAxMCAgICAgICAgICA7INC00LXQu9C40YLQtdC70YwgKNC00LXRgdGP0YLQuNGH0L3QsNGPINGB0LjRgdGC0LXQvNCwKQogICAgCi5jb252ZXJ0X2xvb3A6CiAgICB4b3IgZWR4LCBlZHggICAgICAgICA7INC+0LHQvdGD0LvRj9C10LwgZWR4INC00LvRjyDQtNC10LvQtdC90LjRjwogICAgZGl2IGVjeCAgICAgICAgICAgICAgOyBlYXggPSBlYXgvMTAsIGVkeCA9INC+0YHRgtCw0YLQvtC6CiAgICBhZGQgZGwsICcwJyAgICAgICAgICA7INC/0YDQtdC+0LHRgNCw0LfRg9C10Lwg0YbQuNGE0YDRgyDQsiDRgdC40LzQstC+0LsKICAgIGRlYyByc2kgICAgICAgICAgICAgIDsg0LTQstC40LPQsNC10LzRgdGPINC90LDQt9Cw0LQg0LIg0LHRg9GE0LXRgNC1CiAgICBtb3YgW3JzaV0sIGRsICAgICAgICA7INGB0L7RhdGA0LDQvdGP0LXQvCDRgdC40LzQstC+0LsKICAgIHRlc3QgZWF4LCBlYXggICAgICAgIDsg0L/RgNC+0LLQtdGA0Y/QtdC8LCDQvdC1INC90L7Qu9GMINC70LggZWF4CiAgICBqbnogLmNvbnZlcnRfbG9vcCAgICA7INC10YHQu9C4INC90LUg0L3QvtC70YwsINC/0YDQvtC00L7Qu9C20LDQtdC8CiAgICAKICAgIDsg0JLRi9GH0LjRgdC70Y/QtdC8INC00LvQuNC90YMg0YHRgtGA0L7QutC4CiAgICBtb3YgcmR4LCBidWZmZXIgKyAxNiA7INC60L7QvdC10YYg0LHRg9GE0LXRgNCwCiAgICBzdWIgcmR4LCByc2kgICAgICAgICA7INC00LvQuNC90LAgPSDQutC+0L3QtdGGIC0g0L3QsNGH0LDQu9C+CiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0YfQuNGB0LvQvgogICAgbW92IHJheCwgMSAgICAgICAgICAgOyBzeXNfd3JpdGUKICAgIG1vdiByZGksIDEgICAgICAgICAgIDsgc3Rkb3V0CiAgICA7IHJzaSDRg9C20LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0L3QsNGH0LDQu9C+INGB0YLRgNC+0LrQuAogICAgOyByZHgg0YPQttC1INGB0L7QtNC10YDQttC40YIg0LTQu9C40L3RgwogICAgc3lzY2FsbAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INC/0LXRgNC10LLQvtC0INGB0YLRgNC+0LrQuAogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJzaSwgbmV3bGluZQogICAgbW92IHJkeCwgMQogICAgc3lzY2FsbAogICAgCiAgICBwb3AgcnNpCiAgICBwb3AgcmR4CiAgICBwb3AgcmN4CiAgICBwb3AgcmJ4CiAgICBwb3AgcmF4CiAgICByZXQ=