Online Compiler Nasm

extern io_get_dec extern io_print_dec section .bss: x1 resd 1 x2 resd 1 x3 resd 1 y1 resd 1 y2 resd 1 y3 resd 1 B resd 1 S2 resd 1 I2 resd 1 section .text: global main abs_val: push ebp mov ebp, esp mov eax, [ebp + 8] cmp eax, 0 jge .done neg eax .done: pop ebp ret .gcd_func: push ebp mov ebp, esp mov eax, [ebp + 8] mov ecx, [ebp + 12] ;eax > ecx cmp eax, ecx jge .loop mov ebx, eax mov ecx, eax mov eax, ebx .loop: test ecx, ecx jz .done xor ebx, ebx div ecx mov eax, ecx mov ecx, edx jmp .loop .get_boundary_pts: mov eax, [ebp + 8] sub eax, [ebp + 16] ;считаем |xa - xb| push eax call abs_val add esp, 4 mov ebx, eax mov eax, [ebp + 12] sub eax, [ebp + 20] ;считаем |ya - yb| push eax call abs_val add esp, 4 mov ecx, eax ;считаем их НОД push ebx push ecx call gcd_func main: call io_get_dec mov [x1], eax call io_get_dec mov [x2], eax call io_get_dec mov [y1], eax call io_get_dec mov [y2], eax call io_get_dec mov [z1], eax call io_get_dec mov [z2], eax mov dword [B], 0 push dword [y2] push dword [x2] push dword [y1] push dword [x1] call get_boundary_pts add dword [B], eax add esp, 16 push dword [y3] push dword [x3] push dword [y2] push dword [x2] call get_boundary_pts add dword [B], eax add esp, 16 push dword [y3] push dword [x3] push dword [y1] push dword [x1] call get_boundary_pts add dword [B], eax add esp, 16 mov eax, x2 sub eax, x1 mov ebx, y3 sub ebx, y1 imul [S2], eax, ebx mov eax, x3 sub eax, x1 mov ebx, y2 sub ebx, y1 imul ecx, eax, ebx sub [S2], ecx mov [I2], [S2] sub [I2], [B] add [I2], 2 shr dword [I2], 1 xor eax, eax ret
1) Этот код вычисляет количество целочисленных точек внутри треугольника по координатам вершин, используя формулу Пика. Он считывает координаты, считает граничные точки (B), площадь (S2) и внутренние точки (I2).

2) Подсказки:
- В функции `.gcd_func` есть ошибка в логике обмена значений `eax` и `ecx`, если `eax < ecx`. Внимательно проверь этот блок.
- В секции `.bss` объявлена переменная `z1`, но в коде `main` считывается `z1` и `z2`, которые нигде не используются. Возможно, это опечатка, и должны быть `x3` и `y3`.