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


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