global PrintValue
section .note.GNU-stack
section .text
PrintValue:
xor rax,rax ; rax = S, общая сумма
mov rcx,1 ; rcx = n
mov r8,1 ; r8 = n!
outer:
imul r8,rcx ; n! = (n-1)! * n
xor r9,r9 ; r9 = T(n), внутренняя сумма
mov rsi,1 ; rsi = l
mov rdi,-1 ; rdi = (-1)^l, для l=1 это -1
inner:
mov r10,rsi
add r10,500 ; l + 500, то есть (l^2+500l)/l
imul r10,rdi ; умножаем на (-1)^l
add r9,r10 ; T += слагаемое
neg rdi ; меняем знак для следующего l
inc rsi
cmp rsi,rcx
jle inner ; пока l <= n
mov r11,r8
lea r11,[r11+2*rcx] ; r11 = n! + 2n
imul r11,r9 ; (n!+2n) * T(n)
add rax,r11 ; S += ...
inc rcx
cmp rcx,8
jle outer ; пока n <= 8
ret ; в rax = -2456523