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