Al momento non ho una soluzione pronta di questa traccia, cmq ci ho dato un'occhiata e ho subito notato questo:
All'inizio proprio del programma hai scritto:
.globl main
e poi dopo
main:
La scrittura corretta è
.globl __start
__start:
dopo questo puoi iniziare a fare il prologo.
Secondo errore che ho notato:
Nel prologo quando vai ad allocare spazio in memoria, hai fatto:
#alloco lo spazio per 15+ fp+ ra valori= 17 . 17 x 4=68
addi $sp, $sp, -68
sw $s0, 64($sp) #$s0--->v1
sw $s1, 60($sp) #$s1--->v2
sw $s2, 56($sp) #$s2--->v3
sw $s3, 52($sp) #$s3--->r1
sw $s4, 48($sp) #$s4--->r2
sw $s5, 44($sp) #$s5--->r3
sw $fp, 40($sp)
addi $fp, $sp, 68
Allora, del primo vettore ti serve solo la testa, visto che dopo lo allochi con la malloc, e quindi sono 4 byte, poi te ne servono 20 per ognuno degli altri due vettori e siamo a 44byte.
Ora devi allocare spazio per r1, r2, r3, i ed fp sono 5 quindi altri 20 byte ed arriviamo a 64byte.
Il codice giusto è questo:
addi $sp, $sp, -64
sw $s0, 64($sp) #$s0--->v1
sw $s1, 60($sp) #$s1--->v2[5]
sw $s2, 40($sp) #$s2--->v3[5]
sw $s3, 20($sp) #$s3--->r1
sw $s4, 16($sp) #$s4--->r2
sw $s5, 12($sp) #$s5--->r3
sw $s6, 8($sp) #$s6--->i
sw $fp, 4($sp)
addi $fp, $sp, 64
Anche se in questo caso la maxdim non va gestita in questo modo, dovrebbe essere una variabile globale, definita tramite
maxdim: .word 5
nell'area dei dati globali.