fork download
  1. section .data
  2. ; Длины трех отрезков
  3. a dd 5
  4. b dd 7
  5. c dd 10
  6.  
  7. ; Сообщения
  8. msg_triangle db "Triangle can be formed", 0xA, 0
  9. msg_no_triangle db "Triangle cannot be formed", 0xA, 0
  10. msg_test db "Testing segments: ", 0
  11. msg_comma db ", ", 0
  12. newline db 0xA, 0
  13.  
  14. section .bss
  15. buffer resb 16
  16.  
  17. section .text
  18. global _start
  19.  
  20. _start:
  21. ; Выводим тестируемые отрезки
  22. mov rax, 1
  23. mov rdi, 1
  24. mov rsi, msg_test
  25. mov rdx, 18
  26. syscall
  27.  
  28. ; Выводим длину a
  29. mov eax, [a]
  30. call print_number
  31.  
  32. mov rax, 1
  33. mov rdi, 1
  34. mov rsi, msg_comma
  35. mov rdx, 2
  36. syscall
  37.  
  38. ; Выводим длину b
  39. mov eax, [b]
  40. call print_number
  41.  
  42. mov rax, 1
  43. mov rdi, 1
  44. mov rsi, msg_comma
  45. mov rdx, 2
  46. syscall
  47.  
  48. ; Выводим длину c
  49. mov eax, [c]
  50. call print_number
  51.  
  52. mov rax, 1
  53. mov rdi, 1
  54. mov rsi, newline
  55. mov rdx, 1
  56. syscall
  57.  
  58. ; Проверяем условие треугольника: a + b > c
  59. mov eax, [a]
  60. add eax, [b] ; eax = a + b
  61. cmp eax, [c] ; сравниваем с c
  62. jle .no_triangle ; если a + b <= c, треугольник невозможен
  63.  
  64. ; Проверяем: a + c > b
  65. mov eax, [a]
  66. add eax, [c] ; eax = a + c
  67. cmp eax, [b] ; сравниваем с b
  68. jle .no_triangle ; если a + c <= b, треугольник невозможен
  69.  
  70. ; Проверяем: b + c > a
  71. mov eax, [b]
  72. add eax, [c] ; eax = b + c
  73. cmp eax, [a] ; сравниваем с a
  74. jle .no_triangle ; если b + c <= a, треугольник невозможен
  75.  
  76. ; Все условия выполнены - треугольник возможен
  77. mov rax, 1
  78. mov rdi, 1
  79. mov rsi, msg_triangle
  80. mov rdx, 22
  81. syscall
  82. jmp .exit
  83.  
  84. .no_triangle:
  85. ; Хотя бы одно условие не выполнено
  86. mov rax, 1
  87. mov rdi, 1
  88. mov rsi, msg_no_triangle
  89. mov rdx, 26
  90. syscall
  91.  
  92. ; Завершаем программу
  93. mov rax, 60
  94. mov rdi, 0
  95. syscall
  96.  
  97. ; Функция для вывода числа из EAX
  98. print_number:
  99. push rax
  100. push rbx
  101. push rcx
  102. push rdx
  103. push rsi
  104.  
  105. mov rsi, buffer + 15
  106. mov byte [rsi], 0
  107. mov ecx, 10
  108.  
  109. .convert_loop:
  110. xor edx, edx
  111. div ecx
  112. add dl, '0'
  113. dec rsi
  114. mov [rsi], dl
  115. test eax, eax
  116. jnz .convert_loop
  117.  
  118. mov rdx, buffer + 16
  119. sub rdx, rsi
  120.  
  121. mov rax, 1
  122. mov rdi, 1
  123. syscall
  124.  
  125. pop rsi
  126. pop rdx
  127. pop rcx
  128. pop rbx
  129. pop rax
  130. ret
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
Testing segments: 5, 7, 10
Triangle can be formed