Online Compiler Nasm

extern io_get_dec, io_print_dec, io_print_string section .bss x1 resd 1 y1 resd 1 x2 resd 1 y2 resd 1 x3 resd 1 y3 resd 1 section .data dot db ".", 0 section .text global main main: call io_get_dec mov [x1], eax call io_get_dec mov [y1], eax call io_get_dec mov [x2], eax call io_get_dec mov [y2], eax call io_get_dec mov [x3], eax call io_get_dec mov [y3], eax mov eax, y2 sub eax, y3 xor edx, edx mul x1 mov ecx, eax mov eax, y3 sub eax, y1 xor edx, edx mul x2 add ecx, eax mov eax, y1 sub eax, y2 xor edx, edx mul x3 add ecx, eax mov eax, ecx xor edx, edx div 2 mul edx, 5 call io_print_dec mov eax, dot call io_print_string mov eax, edx call io_print_dec xor eax, eax ret
1) Этот код вычисляет площадь треугольника по координатам трёх вершин, используя формулу площади через векторное произведение. Результат выводится как целая часть, точка и дробная часть (умноженная на 5, что странно).

2) Обрати внимание, что для работы с знаковыми числами при умножении (`mul`) и делении (`div`) нужно использовать регистры `eax` и `edx` правильно — `mul` работает с беззнаковыми, а `imul` со знаковыми. Также проверь, что `div 2` делит на 2, но дробная часть умножается на 5 — возможно, это ошибка и нужно умножать на 10 для десятичной дроби.