Online Compiler Nasm

section .text global main extern io_get_dec extern io_print_double extern io_newline main: call io_get_dec mov ebx, eax call io_get_dec mov esi, eax call io_get_dec mov edi, eax call io_get_dec push eax call io_get_dec mov ecx, eax call io_get_dec mov edx, eax mov eax, [esp] sub eax, edx imul eax, ebx mov ebp, eax mov eax, edx sub eax, esi imul eax, edi add ebp, eax mov eax, esi sub eax, [esp] imul eax, ecx add ebp, eax mov eax, ebp cdq xor eax, edx sub eax, edx pxor xmm0, xmm0 cvtsi2sd xmm0, eax movsd xmm1, [two] divsd xmm0, xmm1 movsd xmm1, xmm0 call io_print_double call io_newline add esp, 4 xor eax, eax ret section .rodata align 8 two: dq 2.0
1) Этот код вычисляет площадь треугольника по формуле Гаусса (через координаты вершин), используя целочисленные операции, а затем выводит результат как число с плавающей точкой.

2) Обрати внимание на то, как код обрабатывает знак при вычислении определителя — используется трюк с `cdq` и `xor/sub` для получения абсолютного значения.  
   Помни, что `[esp]` после `push eax` хранит одну из координат, поэтому важно следить за очисткой стека (`add esp, 4`) в конце.