global PrintValue
section .note.GNU-stack
section .text
PrintValue:
push rbx
push rbp
; Задаем переменные согласно условию: x = 2, y = 1, z = 1
mov rax, 2 ; x = 2
mov rbx, 1 ; y = 1
mov rcx, 1 ; z = 1
; --- Вычисление числителя: 45(y^2 - 2x) + 45x + 45yxz ---
; 1. y^2 -> y * y
mov r8, rbx
imul r8, rbx ; r8 = y^2 (1)
; 2. 2 * x
mov r9, 2
imul r9, rax ; r9 = 2 * x (4)
; 3. (y^2 - 2x)
sub r8, r9 ; r8 = 1 - 4 = -3
; 4. 45 * (y^2 - 2x)
mov rdx, 45
imul r8, rdx ; r8 = -135
; 5. 45 * x
mov r9, 45
imul r9, rax ; r9 = 90
; 6. 45 * y * x * z
mov r10, 45
imul r10, rbx
imul r10, rax
imul r10, rcx ; r10 = 90
; Складываем части числителя
add r8, r9 ; -135 + 90 = -45
add r8, r10 ; -45 + 90 = 45 (Числитель в r8)
; --- Вычисление знаменателя: 5x(x + 7y) ---
; 1. 7 * y
mov r9, 7
imul r9, rbx ; r9 = 7
; 2. (x + 7y)
mov r10, rax
add r10, r9 ; r10 = 2 + 7 = 9
; 3. 5 * x
mov rdx, 5
imul rdx, rax ; rdx = 10
; 4. Знаменатель: (5x) * (x + 7y)
imul rdx, r10 ; rdx = 10 * 9 = 90 (Знаменатель в rdx)
; --- Деление (Числитель / Знаменатель) ---
mov rax, r8 ; Числитель (45) в rax
cqo ; Расширяем знак rax в rdx:rax для деления
idiv rdx ; rax = 45 / 90 = 0 (целая часть), остаток в rdx
pop rbp
pop rbx
ret