X RicoWolf
visto il link che offre la soluzione più semplice che è quella di accettare direttamente i floating.
io ti propongo questa soluzione che ti permette di imparare qualcosa che in futuro ti potrà tornare utile
.data
consegna1: .asciiz "Ciao Riccardo, quanti numeri vuoi inserire? "
a_capo: .asciiz "\n"
consegna2: .asciiz "Inserisci un numero: "
risposta: .asciiz "La media è: \n"
somma: .asciiz "la somma per il momento è = "
error: .asciiz "Errore! Chiusura programma.\n"
.text
main:
li $t2, 0 # inizializzo la somma nel reg $t2
li $t0, 0 # inizializzo il contatore nel reg $t0
li $v0, 4
la $a0, consegna1
syscall
li $v0, 4
la $a0, a_capo
syscall
li $v0, 5
syscall
move $t1, $v0 # in $t1 ho il numero di numeri
beq $t1, 0, errore
move $t2,$zero
inserisci_numero:
beq $t0, $t1, calcolo_media
li $v0, 4
la $a0, consegna2
syscall
li $v0, 5
syscall
add $t2, $t2, $v0
addi $t0, $t0, 1
j inserisci_numero
calcolo_media:
mtc1 $t0, $f1
cvt.s.w $f1,$f1 #converte il numero di elementi in float
mtc1 $t2,$f2
cvt.s.w $f2,$f2 #converte la somma ottenuta dei vari numeri
div.s $f12,$f2,$f1 #effettua la divisione tra float $f12=$f2/$f1
li $v0, 4
la $a0, risposta
syscall
li $v0, 2
syscall
j fine # risparmi al compilatore una chiamata alla syscall
errore:
li $v0, 4
la $a0, error
syscall
fine:
li $v0, 10
syscall
spero di esserti stato di aiuto