.text .globl main # Funzione sum_of_factorials sum_of_factorials: li t0, 0 # sum = 0 li t1, 1 # i = 1 loop_start: slt t2, a0, t1 # i >? n bne t2, x0, loop_end # se (i > n) esci loop_body: andi t2, t1, 1 # t2 = i % 2 beq t2, x0, even # se i pari, vai a even add t0, t0, t1 # somma += i (caso dispari) b increment # vai a increment even: mul t2, t1, t1 # t2 = i * i (quadrato) add t0, t0, t2 # somma += t2 (aggiungi quadrato) increment: addi t1, t1, 1 # i++ b loop_start # ripeti il ciclo loop_end: mv a0, t0 # restituisci la somma ret # Funzione double_sum_of_factorials double_sum_of_factorials: addi sp, sp, -8 # Creare spazio nello stack sd ra, 0(sp) # Salvare l'indirizzo di ritorno call sum_of_factorials # Chiamare sum_of_factorials slli a0, a0, 1 # a0 = a0 * 2 (raddoppiare il risultato) ld ra, 0(sp) # Ripristina l'indirizzo di ritorno addi sp, sp, 8 # Ripristina lo stack ret # Funzione main main: li a0, 5 # n = 5 call double_sum_of_factorials # Chiamare double_sum_of_factorials # Stampa il risultato li a7, 1 # syscall per print_int ecall # Chiamare il sistema li a7, 10 # ecall per uscire ecall # Chiamare il sistema