section .data
prompt1 db "Введите первое число: ", 0
prompt2 db "Введите второе число: ", 0
result db "Результат: ", 0
newline db 0xA, 0xD, 0
buffer times 32 db 0
N equ 4 ; размер чисел в байтах
section .bss
num1 resd 1
num2 resd 1
sum resd 1
section .text
global _start
; Процедура ввода числа (возвращает в EAX)
input_number:
push ebx
push ecx
push edx
push esi
; Вывод приглашения
mov eax, 4
mov ebx, 1
mov edx, 21
int 0x80
; Ввод строки
mov eax, 3
mov ebx, 0
mov ecx, buffer
mov edx, 32
int 0x80
; Преобразование строки в число
mov esi, buffer
xor eax, eax
xor ebx, ebx
mov ecx, 10
xor edx, edx ; флаг знака
; Проверка на знак минус
cmp byte [esi], '-'
jne .parse_loop
inc edx ; установить флаг отрицательного
inc esi ; пропустить минус
.parse_loop:
mov bl, [esi]
cmp bl, 0xA ; конец строки (LF)
je .finish
cmp bl, 0xD ; конец строки (CR)
je .finish
cmp bl, '0'
jb .finish
cmp bl, '9'
ja .finish
sub bl, '0'
imul ecx ; eax = eax * 10
add eax, ebx
inc esi
jmp .parse_loop
.finish:
; Применяем знак если нужно
test edx, edx
jz .done
neg eax
.done:
pop esi
pop edx
pop ecx
pop ebx
ret
; Процедура вывода числа из EAX
output_number:
push eax
push ebx
push ecx
push edx
push esi
mov esi, buffer + 31
mov byte [esi], 0
dec esi
mov byte [esi], 0xA
dec esi
mov ecx, 10
test eax, eax
jns .positive
; Отрицательное число
neg eax
mov byte [esi], '-'
dec esi
.positive:
xor edx, edx
div ecx
add dl, '0'
mov [esi], dl
dec esi
test eax, eax
jnz .positive
; Вывод строки
inc esi
mov ecx, esi
mov edx, buffer + 32
sub edx, esi
mov eax, 4
mov ebx, 1
int 0x80
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret
_start:
; Ввод первого числа
call input_number
mov [num1], eax
; Ввод второго числа
call input_number
mov [num2], eax
; Сложение чисел
mov eax, [num1]
add eax, [num2]
mov [sum], eax
; Вывод результата
mov ecx, result
mov edx, 11
mov eax, 4
mov ebx, 1
int 0x80
mov eax, [sum]
call output_number
; Вывод новой строки
mov ecx, newline
mov edx, 2
mov eax, 4
mov ebx, 1
int 0x80
; Завершение программы
mov eax, 1
xor ebx, ebx
int 0x80
c2VjdGlvbiAuZGF0YQogICAgcHJvbXB0MSAgIGRiICLQktCy0LXQtNC40YLQtSDQv9C10YDQstC+0LUg0YfQuNGB0LvQvjogIiwgMAogICAgcHJvbXB0MiAgIGRiICLQktCy0LXQtNC40YLQtSDQstGC0L7RgNC+0LUg0YfQuNGB0LvQvjogIiwgMAogICAgcmVzdWx0ICAgIGRiICLQoNC10LfRg9C70YzRgtCw0YI6ICIsIDAKICAgIG5ld2xpbmUgICBkYiAweEEsIDB4RCwgMAogICAgYnVmZmVyICAgIHRpbWVzIDMyIGRiIDAKICAgIE4gICAgICAgICBlcXUgNCAgICAgICAgICA7INGA0LDQt9C80LXRgCDRh9C40YHQtdC7INCyINCx0LDQudGC0LDRhQoKc2VjdGlvbiAuYnNzCiAgICBudW0xICAgICAgcmVzZCAxCiAgICBudW0yICAgICAgcmVzZCAxCiAgICBzdW0gICAgICAgcmVzZCAxCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgo7INCf0YDQvtGG0LXQtNGD0YDQsCDQstCy0L7QtNCwINGH0LjRgdC70LAgKNCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINCyIEVBWCkKaW5wdXRfbnVtYmVyOgogICAgcHVzaCBlYngKICAgIHB1c2ggZWN4CiAgICBwdXNoIGVkeAogICAgcHVzaCBlc2kKICAgIAogICAgOyDQktGL0LLQvtC0INC/0YDQuNCz0LvQsNGI0LXQvdC40Y8KICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIG1vdiBlZHgsIDIxCiAgICBpbnQgMHg4MAogICAgCiAgICA7INCS0LLQvtC0INGB0YLRgNC+0LrQuAogICAgbW92IGVheCwgMwogICAgbW92IGVieCwgMAogICAgbW92IGVjeCwgYnVmZmVyCiAgICBtb3YgZWR4LCAzMgogICAgaW50IDB4ODAKICAgIAogICAgOyDQn9GA0LXQvtCx0YDQsNC30L7QstCw0L3QuNC1INGB0YLRgNC+0LrQuCDQsiDRh9C40YHQu9C+CiAgICBtb3YgZXNpLCBidWZmZXIKICAgIHhvciBlYXgsIGVheAogICAgeG9yIGVieCwgZWJ4CiAgICBtb3YgZWN4LCAxMAogICAgeG9yIGVkeCwgZWR4ICAgICAgICA7INGE0LvQsNCzINC30L3QsNC60LAKICAgIAogICAgOyDQn9GA0L7QstC10YDQutCwINC90LAg0LfQvdCw0Log0LzQuNC90YPRgQogICAgY21wIGJ5dGUgW2VzaV0sICctJwogICAgam5lIC5wYXJzZV9sb29wCiAgICBpbmMgZWR4ICAgICAgICAgICAgIDsg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YTQu9Cw0LMg0L7RgtGA0LjRhtCw0YLQtdC70YzQvdC+0LPQvgogICAgaW5jIGVzaSAgICAgICAgICAgICA7INC/0YDQvtC/0YPRgdGC0LjRgtGMINC80LjQvdGD0YEKICAgIAoucGFyc2VfbG9vcDoKICAgIG1vdiBibCwgW2VzaV0KICAgIGNtcCBibCwgMHhBICAgICAgICAgOyDQutC+0L3QtdGGINGB0YLRgNC+0LrQuCAoTEYpCiAgICBqZSAuZmluaXNoCiAgICBjbXAgYmwsIDB4RCAgICAgICAgIDsg0LrQvtC90LXRhiDRgdGC0YDQvtC60LggKENSKQogICAgamUgLmZpbmlzaAogICAgY21wIGJsLCAnMCcKICAgIGpiIC5maW5pc2gKICAgIGNtcCBibCwgJzknCiAgICBqYSAuZmluaXNoCiAgICAKICAgIHN1YiBibCwgJzAnCiAgICBpbXVsIGVjeCAgICAgICAgICAgIDsgZWF4ID0gZWF4ICogMTAKICAgIGFkZCBlYXgsIGVieAogICAgaW5jIGVzaQogICAgam1wIC5wYXJzZV9sb29wCiAgICAKLmZpbmlzaDoKICAgIDsg0J/RgNC40LzQtdC90Y/QtdC8INC30L3QsNC6INC10YHQu9C4INC90YPQttC90L4KICAgIHRlc3QgZWR4LCBlZHgKICAgIGp6IC5kb25lCiAgICBuZWcgZWF4CiAgICAKLmRvbmU6CiAgICBwb3AgZXNpCiAgICBwb3AgZWR4CiAgICBwb3AgZWN4CiAgICBwb3AgZWJ4CiAgICByZXQKCjsg0J/RgNC+0YbQtdC00YPRgNCwINCy0YvQstC+0LTQsCDRh9C40YHQu9CwINC40LcgRUFYCm91dHB1dF9udW1iZXI6CiAgICBwdXNoIGVheAogICAgcHVzaCBlYngKICAgIHB1c2ggZWN4CiAgICBwdXNoIGVkeAogICAgcHVzaCBlc2kKICAgIAogICAgbW92IGVzaSwgYnVmZmVyICsgMzEKICAgIG1vdiBieXRlIFtlc2ldLCAwCiAgICBkZWMgZXNpCiAgICBtb3YgYnl0ZSBbZXNpXSwgMHhBCiAgICBkZWMgZXNpCiAgICAKICAgIG1vdiBlY3gsIDEwCiAgICB0ZXN0IGVheCwgZWF4CiAgICBqbnMgLnBvc2l0aXZlCiAgICAKICAgIDsg0J7RgtGA0LjRhtCw0YLQtdC70YzQvdC+0LUg0YfQuNGB0LvQvgogICAgbmVnIGVheAogICAgbW92IGJ5dGUgW2VzaV0sICctJwogICAgZGVjIGVzaQogICAgCi5wb3NpdGl2ZToKICAgIHhvciBlZHgsIGVkeAogICAgZGl2IGVjeAogICAgYWRkIGRsLCAnMCcKICAgIG1vdiBbZXNpXSwgZGwKICAgIGRlYyBlc2kKICAgIHRlc3QgZWF4LCBlYXgKICAgIGpueiAucG9zaXRpdmUKICAgIAogICAgOyDQktGL0LLQvtC0INGB0YLRgNC+0LrQuAogICAgaW5jIGVzaQogICAgbW92IGVjeCwgZXNpCiAgICBtb3YgZWR4LCBidWZmZXIgKyAzMgogICAgc3ViIGVkeCwgZXNpCiAgICAKICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIGludCAweDgwCiAgICAKICAgIHBvcCBlc2kKICAgIHBvcCBlZHgKICAgIHBvcCBlY3gKICAgIHBvcCBlYngKICAgIHBvcCBlYXgKICAgIHJldAoKX3N0YXJ0OgogICAgOyDQktCy0L7QtCDQv9C10YDQstC+0LPQviDRh9C40YHQu9CwCiAgICBjYWxsIGlucHV0X251bWJlcgogICAgbW92IFtudW0xXSwgZWF4CiAgICAKICAgIDsg0JLQstC+0LQg0LLRgtC+0YDQvtCz0L4g0YfQuNGB0LvQsAogICAgY2FsbCBpbnB1dF9udW1iZXIKICAgIG1vdiBbbnVtMl0sIGVheAogICAgCiAgICA7INCh0LvQvtC20LXQvdC40LUg0YfQuNGB0LXQuwogICAgbW92IGVheCwgW251bTFdCiAgICBhZGQgZWF4LCBbbnVtMl0KICAgIG1vdiBbc3VtXSwgZWF4CiAgICAKICAgIDsg0JLRi9Cy0L7QtCDRgNC10LfRg9C70YzRgtCw0YLQsAogICAgbW92IGVjeCwgcmVzdWx0CiAgICBtb3YgZWR4LCAxMQogICAgbW92IGVheCwgNAogICAgbW92IGVieCwgMQogICAgaW50IDB4ODAKICAgIAogICAgbW92IGVheCwgW3N1bV0KICAgIGNhbGwgb3V0cHV0X251bWJlcgogICAgCiAgICA7INCS0YvQstC+0LQg0L3QvtCy0L7QuSDRgdGC0YDQvtC60LgKICAgIG1vdiBlY3gsIG5ld2xpbmUKICAgIG1vdiBlZHgsIDIKICAgIG1vdiBlYXgsIDQKICAgIG1vdiBlYngsIDEKICAgIGludCAweDgwCiAgICAKICAgIDsg0JfQsNCy0LXRgNGI0LXQvdC40LUg0L/RgNC+0LPRgNCw0LzQvNGLCiAgICBtb3YgZWF4LCAxCiAgICB4b3IgZWJ4LCBlYngKICAgIGludCAweDgw