Online Compiler Nasm

section .bss ptx resd 3 pty 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 [ptx + ecx*4], eax call io_get_dec mov [pty + ecx*4], eax inc ecx cmp ecx, 3 jl .r mov eax, [ptx] mov ebx, [pty+4] sub ebx, [pty+8] imul eax, ebx mov edx, [ptx+4] mov ebx, [pty+8] sub ebx, [pty] imul edx, ebx add eax, edx mov edx, [ptx+8] mov ebx, [pty] sub ebx, [pty+4] imul edx, ebx add eax, edx cdq xor eax, edx sub eax, edx mov edi, eax xor esi, esi mov eax, [ptx] sub eax, [ptx+4] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [pty] sub eax, [pty+4] cdq xor eax, edx sub eax, edx call g add esi, eax mov eax, [ptx+4] sub eax, [ptx+8] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [pty+4] sub eax, [pty+8] cdq xor eax, edx sub eax, edx call g add esi, eax mov eax, [ptx+8] sub eax, [ptx] cdq xor eax, edx sub eax, edx mov ebx, eax mov eax, [pty+8] sub eax, [pty] 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`.