Загрузка данных


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