Ciao a tutti!!! Sto fancedo un programma assembler MIPS che dopo aver inserito da tastiera il numero di righe e colonne, carica una matrice e la stampa a video. Per quanto riguarda il caricamento sembra funzionare, invece la stampa dà i numeri (se ad sempio inserisco una matrice 3x3 : 1 2 3 4 5 6 7 8 9 mi stampa 1 2 7).
Questo è il codice:
codice:
.data
   riga: .asciiz "inserisci la riga: "
   colonna: .asciiz "inserisci la colonna: "
   mat: .asciiz "inserisci la matrice: "
   spazio: .asciiz " "
   acapo:  .asciiz "\n"
   strout: .asciiz "matrice: "
.text
.globl main

main: 

la $a0,riga  #   
li $v0,4     #printf("inserisci la riga: ");
syscall      #

li $v0,5     #scanf("%d",&riga);
syscall      #

move $s1,$v0

la $a0,colonna  #   
li $v0,4        #printf("inserisci la colonna: ");
syscall         #

li $v0,5     #scanf("%d",&colonna);
syscall      #

move $s2,$v0

la $a0,mat    #    
li $v0,4      #printf("inserisci la matrice: ");   
syscall       #
   
   
move $t0,$zero #i=o
 
lui $s0,0x1000 #base matrice

#inizio del for per acquisire i dati

loop_for_lettura:

slt $t2,$t0,$s1                #se i<riga t2=1
beq $t2,$zero end_for_lettura  #se t2==0 esci dal ciclo

#aggiorna l'indice del vettore

mul $t4,$t0,$s2    #t4=i*c

move $t1,$zero #j=o
addi $t0,$t0,1   #i++

loop2:

slt $t3,$t1,$s2                #se j<colonna t3=1
beq $t3,$zero loop_for_lettura  #se t2==0 esci dal ciclo


add $t4,$t4,$t1  # (i*c)+j
sll $t4,$t4,2

add $t5,$s0,$t4  #t5=indirizzo[i][j]

li $v0, 5          #lettura intero da tastiera 
syscall

sw $v0,0($t5)      #Memoria[t1+0]=v0   va mettere il valore letto 
                   #nella posizione t1 della memoria


addi $t1,$t1,1   #j++

j loop2

j loop_for_lettura

end_for_lettura:

#fine del for per acquisire i dati

li $v0, 4 #stampa l'ultima stringa
la $a0, strout 
syscall

move $t0,$zero #i=o

#inizio del for per stampare i dati

loop_for_stampa:

slt $t2,$t0,$s1                #se i<riga t2=1
beq $t2,$zero end_for_stampa  #se t2==0 esci dal ciclo

#aggiorna l'indice del vettore

mul $t4,$t0,$s2    #t4=i*c

move $t1,$zero #j=o
addi $t0,$t0,1   #i++

la $a0,acapo      #
li $v0,4          #va a capo 
syscall           #


loop2stampa:

slt $t3,$t1,$s2                #se j<colonna t3=1
beq $t3,$zero loop_for_lettura  #se t2==0 esci dal ciclo

add $t4,$t4,$t1  # (i*c)+j
sll $t4,$t4,2

add $t5,$s0,$t4  #t5=indirizzo[i][j]

la $a0,spazio     #
li $v0,4          #stampa uno spazio vuoto 
syscall           #

lw $t6,0($t5)     #Carico in t5 l'elemento contenuto in Memoria[t5+0] 

move $a0,$t6     #
li $v0,1         #stampa t6 (l'elemento contenuto in Memoria[t5+0])
syscall          #

addi $t1,$t1,1   #j++

j loop2stampa



j loop_for_stampa


end_for_stampa:

#fine del for per acquisire i dati


li $v0,10   #esci
syscall
Potreste darmi una mano a capire dove è l'errore?
Grazie
p.s. ho provato il programma con QtSpim