Online Compiler Nasm

section .bss ax resd 3 ay resd 3 section .text global main extern io_get_dec, io_print_dec, io_newline main: push ebx push esi push edi xor ecx, ecx .r: call io_get_dec mov [ax + ecx*4], eax call io_get_dec mov [ay + ecx*4], eax inc ecx cmp ecx, 3 jl .r mov eax, [ax] mov ebx, [ay+4] sub ebx, [ay+8] imul eax, ebx mov edx, [ax+4] mov ebx, [ay+8] sub ebx, [ay] imul edx, ebx add eax, edx mov edx, [ax+8] mov ebx, [ay] sub ebx, [ay+4] imul edx, ebx add eax, edx cdq xor eax, edx sub eax, edx mov edi, eax xor esi, esi mov eax, [ax] sub eax, [ax+4] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [ay] sub eax, [ay+4] cdq xor eax, edx sub eax, edx call g add esi, eax mov eax, [ax+4] sub eax, [ax+8] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [ay+4] sub eax, [ay+8] cdq xor eax, edx sub eax, edx call g add esi, eax mov eax, [ax+8] sub eax, [ax] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [ay+8] sub eax, [ay] cdq xor eax, edx sub eax, edx call g add esi, eax mov eax, edi sub eax, esi add eax, 2 sar eax, 1 call io_print_dec call io_newline pop edi pop esi pop ebx xor eax, eax ret g: push ebx push edx .l: test ebx, ebx jz .e xor edx, edx div ebx mov eax, ebx mov ebx, edx jmp .l .e: pop edx pop ebx ret
1) Этот код вычисляет количество целочисленных точек внутри треугольника, заданного тремя вершинами с целочисленными координатами, используя формулу Пика. Вводятся координаты трёх точек, затем вычисляется удвоенная площадь треугольника по формуле через векторное произведение, после чего считается количество целочисленных точек на границе (с помощью НОД длин сторон) и применяется формула Пика.

2) Обрати внимание, что функция `g` — это алгоритм Евклида для вычисления наибольшего общего делителя (НОД). Он используется для подсчёта целочисленных точек на сторонах треугольника.  
   Подсказка: инструкции `cdq; xor eax, edx; sub eax, edx` — это взятие абсолютного значения числа в `eax` (модуль).