extern scanf, printf
section .data
fin db "%d %d %d %d %d %d", 0
fout db "%d", 10, 0
section .bss
x1 resd 1
y1 resd 1
x2 resd 1
y2 resd 1
x3 resd 1
y3 resd 1
granica resd 1
section .text
global main
main:
push ebp
mov ebp, esp
push y3
push x3
push y2
push x2
push y1
push x1
push fin
call scanf
add esp, 28
mov dword [granica], 0
mov eax, [x2]
sub eax, [x1]
mov ebx, [y2]
sub ebx, [y1]
call nod
add [granica], eax
mov eax, [x3]
sub eax, [x2]
mov ebx, [y3]
sub ebx, [y2]
call nod
add [granica], eax
mov eax, [x1]
sub eax, [x3]
mov ebx, [y1]
sub ebx, [y3]
call nod
add [granica], eax
mov eax, [x2]
sub eax, [x1]
mov ebx, [y3]
sub ebx, [y1]
imul ebx
mov ecx, eax
mov edi, edx
mov eax, [x3]
sub eax, [x1]
mov ebx, [y2]
sub ebx, [y1]
imul ebx
sub ecx, eax
sbb edi, edx
cmp edi, 0
jge .ploshad
not edi
not ecx
add ecx, 1
adc edi, 0
.ploshad:
sub ecx, [granica]
sbb edi, 0
add ecx, 2
adc edi, 0
shr edi, 1
rcr ecx, 1
push ecx
push fout
call printf
add esp, 8
mov eax, 0
mov esp, ebp
pop ebp
ret
nod:
cmp eax, 0
jge .znak
neg eax
.znak:
cmp ebx, 0
jge .cikl
neg ebx
.cikl:
cmp ebx, 0
je .end
mov edx, 0
div ebx
mov eax, ebx
mov ebx, edx
jmp .cikl
.end:
ret