Ho trovato l'inghippo di Mr.hope.
Ci sono alcune imperfezioni.
-Hai salvato l'indirizzo che punta alla prima word di ogni vettore in un registro t, e fin qui nessun problema, ma ogni volta che chiami una funzione, durante il prologo devi salvare tutti i tuoi registri temporanei che contengono informazioni utili al ritorno, e l'indirizzo della prima word di quei vettori è sicuramente un'informazione utile
Andando a esaminare in modo spicciolo, l'errore è ben annidato ma si è presentato in questo pezzo del codice:
#chiamata somma
addi §a0, §t1, 0 #v1 <--- *
addi §a1, §t2, 0 #v2
addi §a2, §s0, 0 #riemp
addi §a3, §t3, 0 #v3
jal somma
* Qui non c'è più l'indirizzo di v1, bensì il valore 0, perchè hai usato t1 durante stampa per immagazzinare i valori contenuti nei vari vettori, e l'ultimo valore di v2 era proprio 0, ed è quello che è rimasto memorizzato in t1. L'errore si è quindi propagato fino a qui:
move §t0, §a0 #vett1
move §t1, §a1 #vett2
move §t3, §a3 #vett3
FOR_1: bge §s0, §a2, END_1
#calcolo valore v1[i]
mul §t0, §s0, 4
add §t0, §a0, §t0 <---**
lw §t1, 0(§t0)
** Come puoi vedere qui non hai fatto altro che sommare 0 a 0 (il primo in a0, copiato da t1 prima, il secondo per via della mul) e poi hai chiesto al sistema di caricare la word all'indirizzo 0, quindi SPIM ti restituisce un bad address.
Ecco tutto, spero di essere stato utile e di non essere arrivato troppo tardi...