section .data
    ; 1. Создать переменную с текстом «Assembler – low level programming»
    text_var db 'Assembler – low level programming', 0xA, 0
    text_len equ $ - text_var
 
    ; 2. Создать переменную со значением 40
    var1 dd 40
 
    ; 3. Создать переменную со значением 36  
    var2 dd 36
 
    newline db 0xA      ; символ новой строки
    space db ' '        ; пробел
 
    ; Текстовые метки для вывода
    msg_sub db 'Subtraction (40 - 36): '
    msg_sub_len equ $ - msg_sub
 
    msg_add db 'Addition (40 + 36): '
    msg_add_len equ $ - msg_add
 
    msg_add_imm db 'Add immediate (40 + 15): '
    msg_add_imm_len equ $ - msg_add_imm
 
    msg_sub_imm db 'Subtract immediate (40 - 10): '
    msg_sub_imm_len equ $ - msg_sub_imm
 
section .bss
    result resd 1
    buffer resb 10      ; буфер для преобразования числа в строку
 
section .text
    global _start
 
_start:
    ; Выводим исходный текст
    mov eax, 4
    mov ebx, 1
    mov ecx, text_var
    mov edx, text_len
    int 0x80
 
    call print_newline
 
    ; 4. Вычесть из первой вторую (40 - 36 = 4)
    mov eax, [var1]
    sub eax, [var2]
    mov [result], eax
 
    ; Выводим результат вычитания
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_sub
    mov edx, msg_sub_len
    int 0x80
 
    mov eax, [result]
    call print_number
    call print_newline
 
    ; 5. Сложить первую со второй (40 + 36 = 76)
    mov eax, [var1]
    add eax, [var2]
    mov [result], eax
 
    ; Выводим результат сложения
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_add
    mov edx, msg_add_len
    int 0x80
 
    mov eax, [result]
    call print_number
    call print_newline
 
    ; 6. Сложить любое непосредственное значение с первой переменной (40 + 15 = 55)
    mov eax, [var1]
    add eax, 15
    mov [result], eax
 
    ; Выводим результат сложения с непосредственным значением
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_add_imm
    mov edx, msg_add_imm_len
    int 0x80
 
    mov eax, [result]
    call print_number
    call print_newline
 
    ; 7. Вычесть из первой переменной любое непосредственное значение (40 - 10 = 30)
    mov eax, [var1]
    sub eax, 10
    mov [result], eax
 
    ; Выводим результат вычитания непосредственного значения
    mov eax, 4
    mov ebx, 1
    mov ecx, msg_sub_imm
    mov edx, msg_sub_imm_len
    int 0x80
 
    mov eax, [result]
    call print_number
    call print_newline
 
    ; Завершение программы
    mov eax, 1
    xor ebx, ebx
    int 0x80
 
; Функция для вывода числа из EAX
print_number:
    mov edi, buffer + 9    ; указатель на конец буфера
    mov byte [edi], 0      ; нулевой терминатор
    mov ebx, 10            ; делитель для десятичной системы
 
.convert_loop:
    xor edx, edx           ; обнуляем EDX для деления
    div ebx                
; делим EAX на 
10, результат в EAX
, остаток в EDX
     add dl, '0'            ; преобразуем цифру в символ
    dec edi                ; двигаемся назад в буфере
    mov [edi], dl          ; сохраняем символ
    test eax, eax          ; проверяем, не ноль ли EAX
    jnz .convert_loop      ; если не ноль, продолжаем
 
    ; Выводим число
    mov eax, 4
    mov ebx, 1
    mov ecx, edi           ; указатель на начало строки с числом
    mov edx, buffer + 10   ; вычисляем длину
    sub edx, edi
    int 0x80
    ret
 
; Функция для вывода новой строки
print_newline:
    mov eax, 4
    mov ebx, 1
    mov ecx, newline
    mov edx, 1
    int 0x80
    ret
				c2VjdGlvbiAuZGF0YQogICAgOyAxLiDQodC+0LfQtNCw0YLRjCDQv9C10YDQtdC80LXQvdC90YPRjiDRgSDRgtC10LrRgdGC0L7QvCDCq0Fzc2VtYmxlciDigJMgbG93IGxldmVsIHByb2dyYW1taW5nwrsKICAgIHRleHRfdmFyIGRiICdBc3NlbWJsZXIg4oCTIGxvdyBsZXZlbCBwcm9ncmFtbWluZycsIDB4QSwgMAogICAgdGV4dF9sZW4gZXF1ICQgLSB0ZXh0X3ZhcgogICAgCiAgICA7IDIuINCh0L7Qt9C00LDRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOINGB0L4g0LfQvdCw0YfQtdC90LjQtdC8IDQwCiAgICB2YXIxIGRkIDQwCiAgICAKICAgIDsgMy4g0KHQvtC30LTQsNGC0Ywg0L/QtdGA0LXQvNC10L3QvdGD0Y4g0YHQviDQt9C90LDRh9C10L3QuNC10LwgMzYgIAogICAgdmFyMiBkZCAzNgogICAgCiAgICBuZXdsaW5lIGRiIDB4QSAgICAgIDsg0YHQuNC80LLQvtC7INC90L7QstC+0Lkg0YHRgtGA0L7QutC4CiAgICBzcGFjZSBkYiAnICcgICAgICAgIDsg0L/RgNC+0LHQtdC7CiAgICAKICAgIDsg0KLQtdC60YHRgtC+0LLRi9C1INC80LXRgtC60Lgg0LTQu9GPINCy0YvQstC+0LTQsAogICAgbXNnX3N1YiBkYiAnU3VidHJhY3Rpb24gKDQwIC0gMzYpOiAnCiAgICBtc2dfc3ViX2xlbiBlcXUgJCAtIG1zZ19zdWIKICAgIAogICAgbXNnX2FkZCBkYiAnQWRkaXRpb24gKDQwICsgMzYpOiAnCiAgICBtc2dfYWRkX2xlbiBlcXUgJCAtIG1zZ19hZGQKICAgIAogICAgbXNnX2FkZF9pbW0gZGIgJ0FkZCBpbW1lZGlhdGUgKDQwICsgMTUpOiAnCiAgICBtc2dfYWRkX2ltbV9sZW4gZXF1ICQgLSBtc2dfYWRkX2ltbQogICAgCiAgICBtc2dfc3ViX2ltbSBkYiAnU3VidHJhY3QgaW1tZWRpYXRlICg0MCAtIDEwKTogJwogICAgbXNnX3N1Yl9pbW1fbGVuIGVxdSAkIC0gbXNnX3N1Yl9pbW0KCnNlY3Rpb24gLmJzcwogICAgcmVzdWx0IHJlc2QgMQogICAgYnVmZmVyIHJlc2IgMTAgICAgICA7INCx0YPRhNC10YAg0LTQu9GPINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvdC40Y8g0YfQuNGB0LvQsCDQsiDRgdGC0YDQvtC60YMKCnNlY3Rpb24gLnRleHQKICAgIGdsb2JhbCBfc3RhcnQKCl9zdGFydDoKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0LjRgdGF0L7QtNC90YvQuSDRgtC10LrRgdGCCiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCB0ZXh0X3ZhcgogICAgbW92IGVkeCwgdGV4dF9sZW4KICAgIGludCAweDgwCiAgICAKICAgIGNhbGwgcHJpbnRfbmV3bGluZQogICAgCiAgICA7IDQuINCS0YvRh9C10YHRgtGMINC40Lcg0L/QtdGA0LLQvtC5INCy0YLQvtGA0YPRjiAoNDAgLSAzNiA9IDQpCiAgICBtb3YgZWF4LCBbdmFyMV0KICAgIHN1YiBlYXgsIFt2YXIyXQogICAgbW92IFtyZXN1bHRdLCBlYXgKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDRgNC10LfRg9C70YzRgtCw0YIg0LLRi9GH0LjRgtCw0L3QuNGPCiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCBtc2dfc3ViCiAgICBtb3YgZWR4LCBtc2dfc3ViX2xlbgogICAgaW50IDB4ODAKICAgIAogICAgbW92IGVheCwgW3Jlc3VsdF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBjYWxsIHByaW50X25ld2xpbmUKICAgIAogICAgOyA1LiDQodC70L7QttC40YLRjCDQv9C10YDQstGD0Y4g0YHQviDQstGC0L7RgNC+0LkgKDQwICsgMzYgPSA3NikKICAgIG1vdiBlYXgsIFt2YXIxXQogICAgYWRkIGVheCwgW3ZhcjJdCiAgICBtb3YgW3Jlc3VsdF0sIGVheAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INGA0LXQt9GD0LvRjNGC0LDRgiDRgdC70L7QttC10L3QuNGPCiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCBtc2dfYWRkCiAgICBtb3YgZWR4LCBtc2dfYWRkX2xlbgogICAgaW50IDB4ODAKICAgIAogICAgbW92IGVheCwgW3Jlc3VsdF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBjYWxsIHByaW50X25ld2xpbmUKICAgIAogICAgOyA2LiDQodC70L7QttC40YLRjCDQu9GO0LHQvtC1INC90LXQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUg0YEg0L/QtdGA0LLQvtC5INC/0LXRgNC10LzQtdC90L3QvtC5ICg0MCArIDE1ID0gNTUpCiAgICBtb3YgZWF4LCBbdmFyMV0KICAgIGFkZCBlYXgsIDE1CiAgICBtb3YgW3Jlc3VsdF0sIGVheAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INGA0LXQt9GD0LvRjNGC0LDRgiDRgdC70L7QttC10L3QuNGPINGBINC90LXQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3Ri9C8INC30L3QsNGH0LXQvdC40LXQvAogICAgbW92IGVheCwgNAogICAgbW92IGVieCwgMQogICAgbW92IGVjeCwgbXNnX2FkZF9pbW0KICAgIG1vdiBlZHgsIG1zZ19hZGRfaW1tX2xlbgogICAgaW50IDB4ODAKICAgIAogICAgbW92IGVheCwgW3Jlc3VsdF0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICBjYWxsIHByaW50X25ld2xpbmUKICAgIAogICAgOyA3LiDQktGL0YfQtdGB0YLRjCDQuNC3INC/0LXRgNCy0L7QuSDQv9C10YDQtdC80LXQvdC90L7QuSDQu9GO0LHQvtC1INC90LXQv9C+0YHRgNC10LTRgdGC0LLQtdC90L3QvtC1INC30L3QsNGH0LXQvdC40LUgKDQwIC0gMTAgPSAzMCkKICAgIG1vdiBlYXgsIFt2YXIxXQogICAgc3ViIGVheCwgMTAKICAgIG1vdiBbcmVzdWx0XSwgZWF4CiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0YDQtdC30YPQu9GM0YLQsNGCINCy0YvRh9C40YLQsNC90LjRjyDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L7Qs9C+INC30L3QsNGH0LXQvdC40Y8KICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIG1vdiBlY3gsIG1zZ19zdWJfaW1tCiAgICBtb3YgZWR4LCBtc2dfc3ViX2ltbV9sZW4KICAgIGludCAweDgwCiAgICAKICAgIG1vdiBlYXgsIFtyZXN1bHRdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgY2FsbCBwcmludF9uZXdsaW5lCiAgICAKICAgIDsg0JfQsNCy0LXRgNGI0LXQvdC40LUg0L/RgNC+0LPRgNCw0LzQvNGLCiAgICBtb3YgZWF4LCAxCiAgICB4b3IgZWJ4LCBlYngKICAgIGludCAweDgwCgo7INCk0YPQvdC60YbQuNGPINC00LvRjyDQstGL0LLQvtC00LAg0YfQuNGB0LvQsCDQuNC3IEVBWApwcmludF9udW1iZXI6CiAgICBtb3YgZWRpLCBidWZmZXIgKyA5ICAgIDsg0YPQutCw0LfQsNGC0LXQu9GMINC90LAg0LrQvtC90LXRhiDQsdGD0YTQtdGA0LAKICAgIG1vdiBieXRlIFtlZGldLCAwICAgICAgOyDQvdGD0LvQtdCy0L7QuSDRgtC10YDQvNC40L3QsNGC0L7RgAogICAgbW92IGVieCwgMTAgICAgICAgICAgICA7INC00LXQu9C40YLQtdC70Ywg0LTQu9GPINC00LXRgdGP0YLQuNGH0L3QvtC5INGB0LjRgdGC0LXQvNGLCiAgICAKLmNvbnZlcnRfbG9vcDoKICAgIHhvciBlZHgsIGVkeCAgICAgICAgICAgOyDQvtCx0L3Rg9C70Y/QtdC8IEVEWCDQtNC70Y8g0LTQtdC70LXQvdC40Y8KICAgIGRpdiBlYnggICAgICAgICAgICAgICAgOyDQtNC10LvQuNC8IEVBWCDQvdCwIDEwLCDRgNC10LfRg9C70YzRgtCw0YIg0LIgRUFYLCDQvtGB0YLQsNGC0L7QuiDQsiBFRFgKICAgIGFkZCBkbCwgJzAnICAgICAgICAgICAgOyDQv9GA0LXQvtCx0YDQsNC30YPQtdC8INGG0LjRhNGA0YMg0LIg0YHQuNC80LLQvtC7CiAgICBkZWMgZWRpICAgICAgICAgICAgICAgIDsg0LTQstC40LPQsNC10LzRgdGPINC90LDQt9Cw0LQg0LIg0LHRg9GE0LXRgNC1CiAgICBtb3YgW2VkaV0sIGRsICAgICAgICAgIDsg0YHQvtGF0YDQsNC90Y/QtdC8INGB0LjQvNCy0L7QuwogICAgdGVzdCBlYXgsIGVheCAgICAgICAgICA7INC/0YDQvtCy0LXRgNGP0LXQvCwg0L3QtSDQvdC+0LvRjCDQu9C4IEVBWAogICAgam56IC5jb252ZXJ0X2xvb3AgICAgICA7INC10YHQu9C4INC90LUg0L3QvtC70YwsINC/0YDQvtC00L7Qu9C20LDQtdC8CiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0YfQuNGB0LvQvgogICAgbW92IGVheCwgNAogICAgbW92IGVieCwgMQogICAgbW92IGVjeCwgZWRpICAgICAgICAgICA7INGD0LrQsNC30LDRgtC10LvRjCDQvdCwINC90LDRh9Cw0LvQviDRgdGC0YDQvtC60Lgg0YEg0YfQuNGB0LvQvtC8CiAgICBtb3YgZWR4LCBidWZmZXIgKyAxMCAgIDsg0LLRi9GH0LjRgdC70Y/QtdC8INC00LvQuNC90YMKICAgIHN1YiBlZHgsIGVkaQogICAgaW50IDB4ODAKICAgIHJldAoKOyDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0LLRi9Cy0L7QtNCwINC90L7QstC+0Lkg0YHRgtGA0L7QutC4CnByaW50X25ld2xpbmU6CiAgICBtb3YgZWF4LCA0CiAgICBtb3YgZWJ4LCAxCiAgICBtb3YgZWN4LCBuZXdsaW5lCiAgICBtb3YgZWR4LCAxCiAgICBpbnQgMHg4MAogICAgcmV0