section .data
; Длины трех отрезков
a dd 5
b dd 7
c dd 10
; Сообщения
msg_triangle db "Triangle can be formed", 0xA, 0
msg_no_triangle db "Triangle cannot be formed", 0xA, 0
msg_test db "Testing segments: ", 0
msg_comma db ", ", 0
newline db 0xA, 0
section .bss
buffer resb 16
section .text
global _start
_start:
; Выводим тестируемые отрезки
mov rax, 1
mov rdi, 1
mov rsi, msg_test
mov rdx, 18
syscall
; Выводим длину a
mov eax, [a]
call print_number
mov rax, 1
mov rdi, 1
mov rsi, msg_comma
mov rdx, 2
syscall
; Выводим длину b
mov eax, [b]
call print_number
mov rax, 1
mov rdi, 1
mov rsi, msg_comma
mov rdx, 2
syscall
; Выводим длину c
mov eax, [c]
call print_number
mov rax, 1
mov rdi, 1
mov rsi, newline
mov rdx, 1
syscall
; Проверяем условие треугольника: a + b > c
mov eax, [a]
add eax, [b] ; eax = a + b
cmp eax, [c] ; сравниваем с c
jle .no_triangle ; если a + b <= c, треугольник невозможен
; Проверяем: a + c > b
mov eax, [a]
add eax, [c] ; eax = a + c
cmp eax, [b] ; сравниваем с b
jle .no_triangle ; если a + c <= b, треугольник невозможен
; Проверяем: b + c > a
mov eax, [b]
add eax, [c] ; eax = b + c
cmp eax, [a] ; сравниваем с a
jle .no_triangle ; если b + c <= a, треугольник невозможен
; Все условия выполнены - треугольник возможен
mov rax, 1
mov rdi, 1
mov rsi, msg_triangle
mov rdx, 22
syscall
.no_triangle:
; Хотя бы одно условие не выполнено
mov rax, 1
mov rdi, 1
mov rsi, msg_no_triangle
mov rdx, 26
syscall
; Завершаем программу
mov rax, 60
mov rdi, 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
add dl, '0'
dec rsi
mov [rsi], dl
test eax, eax
jnz .convert_loop
mov rdx, buffer + 16
sub rdx, rsi
mov rax, 1
mov rdi, 1
syscall
pop rsi
pop rdx
pop rcx
pop rbx
pop rax
ret
c2VjdGlvbiAuZGF0YQogICAgOyDQlNC70LjQvdGLINGC0YDQtdGFINC+0YLRgNC10LfQutC+0LIKICAgIGEgZGQgNQogICAgYiBkZCA3CiAgICBjIGRkIDEwCiAgICAKICAgIDsg0KHQvtC+0LHRidC10L3QuNGPCiAgICBtc2dfdHJpYW5nbGUgZGIgIlRyaWFuZ2xlIGNhbiBiZSBmb3JtZWQiLCAweEEsIDAKICAgIG1zZ19ub190cmlhbmdsZSBkYiAiVHJpYW5nbGUgY2Fubm90IGJlIGZvcm1lZCIsIDB4QSwgMAogICAgbXNnX3Rlc3QgZGIgIlRlc3Rpbmcgc2VnbWVudHM6ICIsIDAKICAgIG1zZ19jb21tYSBkYiAiLCAiLCAwCiAgICBuZXdsaW5lIGRiIDB4QSwgMAoKc2VjdGlvbiAuYnNzCiAgICBidWZmZXIgcmVzYiAxNgoKc2VjdGlvbiAudGV4dAogICAgZ2xvYmFsIF9zdGFydAoKX3N0YXJ0OgogICAgOyDQktGL0LLQvtC00LjQvCDRgtC10YHRgtC40YDRg9C10LzRi9C1INC+0YLRgNC10LfQutC4CiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcnNpLCBtc2dfdGVzdAogICAgbW92IHJkeCwgMTgKICAgIHN5c2NhbGwKICAgIAogICAgOyDQktGL0LLQvtC00LjQvCDQtNC70LjQvdGDIGEKICAgIG1vdiBlYXgsIFthXQogICAgY2FsbCBwcmludF9udW1iZXIKICAgIAogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJzaSwgbXNnX2NvbW1hCiAgICBtb3YgcmR4LCAyCiAgICBzeXNjYWxsCiAgICAKICAgIDsg0JLRi9Cy0L7QtNC40Lwg0LTQu9C40L3RgyBiCiAgICBtb3YgZWF4LCBbYl0KICAgIGNhbGwgcHJpbnRfbnVtYmVyCiAgICAKICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIG1zZ19jb21tYQogICAgbW92IHJkeCwgMgogICAgc3lzY2FsbAogICAgCiAgICA7INCS0YvQstC+0LTQuNC8INC00LvQuNC90YMgYwogICAgbW92IGVheCwgW2NdCiAgICBjYWxsIHByaW50X251bWJlcgogICAgCiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBtb3YgcnNpLCBuZXdsaW5lCiAgICBtb3YgcmR4LCAxCiAgICBzeXNjYWxsCgogICAgOyDQn9GA0L7QstC10YDRj9C10Lwg0YPRgdC70L7QstC40LUg0YLRgNC10YPQs9C+0LvRjNC90LjQutCwOiBhICsgYiA+IGMKICAgIG1vdiBlYXgsIFthXQogICAgYWRkIGVheCwgW2JdICAgICAgICA7IGVheCA9IGEgKyBiCiAgICBjbXAgZWF4LCBbY10gICAgICAgIDsg0YHRgNCw0LLQvdC40LLQsNC10Lwg0YEgYwogICAgamxlIC5ub190cmlhbmdsZSAgICA7INC10YHQu9C4IGEgKyBiIDw9IGMsINGC0YDQtdGD0LPQvtC70YzQvdC40Log0L3QtdCy0L7Qt9C80L7QttC10L0KICAgIAogICAgOyDQn9GA0L7QstC10YDRj9C10Lw6IGEgKyBjID4gYgogICAgbW92IGVheCwgW2FdCiAgICBhZGQgZWF4LCBbY10gICAgICAgIDsgZWF4ID0gYSArIGMKICAgIGNtcCBlYXgsIFtiXSAgICAgICAgOyDRgdGA0LDQstC90LjQstCw0LXQvCDRgSBiCiAgICBqbGUgLm5vX3RyaWFuZ2xlICAgIDsg0LXRgdC70LggYSArIGMgPD0gYiwg0YLRgNC10YPQs9C+0LvRjNC90LjQuiDQvdC10LLQvtC30LzQvtC20LXQvQogICAgCiAgICA7INCf0YDQvtCy0LXRgNGP0LXQvDogYiArIGMgPiBhCiAgICBtb3YgZWF4LCBbYl0KICAgIGFkZCBlYXgsIFtjXSAgICAgICAgOyBlYXggPSBiICsgYwogICAgY21wIGVheCwgW2FdICAgICAgICA7INGB0YDQsNCy0L3QuNCy0LDQtdC8INGBIGEKICAgIGpsZSAubm9fdHJpYW5nbGUgICAgOyDQtdGB0LvQuCBiICsgYyA8PSBhLCDRgtGA0LXRg9Cz0L7Qu9GM0L3QuNC6INC90LXQstC+0LfQvNC+0LbQtdC9CiAgICAKICAgIDsg0JLRgdC1INGD0YHQu9C+0LLQuNGPINCy0YvQv9C+0LvQvdC10L3RiyAtINGC0YDQtdGD0LPQvtC70YzQvdC40Log0LLQvtC30LzQvtC20LXQvQogICAgbW92IHJheCwgMQogICAgbW92IHJkaSwgMQogICAgbW92IHJzaSwgbXNnX3RyaWFuZ2xlCiAgICBtb3YgcmR4LCAyMgogICAgc3lzY2FsbAogICAgam1wIC5leGl0Cgoubm9fdHJpYW5nbGU6CiAgICA7INCl0L7RgtGPINCx0Ysg0L7QtNC90L4g0YPRgdC70L7QstC40LUg0L3QtSDQstGL0L/QvtC70L3QtdC90L4KICAgIG1vdiByYXgsIDEKICAgIG1vdiByZGksIDEKICAgIG1vdiByc2ksIG1zZ19ub190cmlhbmdsZQogICAgbW92IHJkeCwgMjYKICAgIHN5c2NhbGwKCi5leGl0OgogICAgOyDQl9Cw0LLQtdGA0YjQsNC10Lwg0L/RgNC+0LPRgNCw0LzQvNGDCiAgICBtb3YgcmF4LCA2MAogICAgbW92IHJkaSwgMAogICAgc3lzY2FsbAoKOyDQpNGD0L3QutGG0LjRjyDQtNC70Y8g0LLRi9Cy0L7QtNCwINGH0LjRgdC70LAg0LjQtyBFQVgKcHJpbnRfbnVtYmVyOgogICAgcHVzaCByYXgKICAgIHB1c2ggcmJ4CiAgICBwdXNoIHJjeAogICAgcHVzaCByZHgKICAgIHB1c2ggcnNpCiAgICAKICAgIG1vdiByc2ksIGJ1ZmZlciArIDE1CiAgICBtb3YgYnl0ZSBbcnNpXSwgMAogICAgbW92IGVjeCwgMTAKICAgIAouY29udmVydF9sb29wOgogICAgeG9yIGVkeCwgZWR4CiAgICBkaXYgZWN4CiAgICBhZGQgZGwsICcwJwogICAgZGVjIHJzaQogICAgbW92IFtyc2ldLCBkbAogICAgdGVzdCBlYXgsIGVheAogICAgam56IC5jb252ZXJ0X2xvb3AKICAgIAogICAgbW92IHJkeCwgYnVmZmVyICsgMTYKICAgIHN1YiByZHgsIHJzaQogICAgCiAgICBtb3YgcmF4LCAxCiAgICBtb3YgcmRpLCAxCiAgICBzeXNjYWxsCiAgICAKICAgIHBvcCByc2kKICAgIHBvcCByZHgKICAgIHBvcCByY3gKICAgIHBvcCByYngKICAgIHBvcCByYXgKICAgIHJldA==