global PrintValue
section .note.GNU-stack
section .data
x dq 2
y dq 1
section .text
PrintValue:
push rbx
mov rax,[x] ; rax = x
mov rbx,[y] ; rbx = y
cmp rax,rbx ; сравниваем x и y
jle m1 ; если x <= y, то rax уже минимум
xchg rax,rbx ; иначе меняем местами: rax = min, rbx = max
m1: ; теперь rax = m (min), rbx = M (max)
; rcx = m^2 + 4*m*M + M
mov rcx,rax
imul rcx,rax ; rcx = m*m
mov rdx,rax
imul rdx,rbx ; rdx = m*M
shl rdx,2 ; rdx = 4*m*M
add rcx,rdx ; rcx = m^2 + 4mM
add rcx,rbx ; rcx = m^2 + 4mM + M
; rdx = m + M
mov rdx,rax
add rdx,rbx
mov [x],rcx ; новое x = первая формула
mov [y],rdx ; новое y = вторая формула
mov rax,rcx ; возвращаем новое x в RAX
pop rbx
ret