Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    2

    [Assembler MIPS] Problema con la stampa della matrice

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    2
    nemmeno un piccolo aiutino?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.