Salve a tutti; ho bisogno di un aiuto nel programma che, come da titolo, deve stampare la somma di una serie di interi inseriti dall'utente...
Non riesco però bene a gestire il ritorno della somma. Ho cercato di usare una funzione somma con accesso allo stack.
Grazie in anticipo a chi mi riesce a darmi una mano
.data
title: .asciz " *** SOMMA DI NUMERI ***\n"
in_num: .asciz " Quanti numeri vuoi inserire: "
in_value: .asciz " Inserisci un valore: "
out_sum: .asciz "\n La somma è: "
zero_num: .asciz "\n Non hai inserito numeri da sommare\n"
.text
.global _main
_main:
la a0, title
li a7, 4
ecall
start:
la a0, in_num
li a7, 4
ecall
li a7, 5
ecall
mv s3, a0 # Salvo nel registro s3 la quantità di numeri che l'utente vuole inserire
blez s3, end_loop # Confronto per verificare che venga inserito un numero > 0
# Blocco per inserire i valori da sommare
li t0, 1 # Inizializzo il contatore
loop:
bgt t0, s3, end
la a0, in_value
li a7, 4
ecall
li a7, 5
ecall
jal function_sum # Salto alla funzione somma
addi t0, t0, 1 # Incremento il contatore (i++)
j loop
# Blocco eseguito se si inserisce un valore <= 0
end_loop:
la a0, zero_num
li a7, 4
ecall
j start
end:
li a7, 1
ecall
# *** Fine del programma *** #
li a7, 10
ecall
# *** Funzione Somma *** #
function_sum:
addi sp, sp, -8
sw s0, 0(sp)
addi s0, a0, 0 # Da controllare questa porzione di codice che non esegue la somma
mv a0, s0
lw s0, 0(sp)
addi, sp, sp, 8
ret