Jump to content

Modifica Stile
Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Photo

Esercizio Somma di 2 Vettori


  • Please log in to reply
35 replies to this topic

#1
Mr.Hope

Mr.Hope

    Advanced Member

  • Utente
  • PipPipPip
  • 627 posts
Facendo qst programma stile esame, sono incappato in un errore nella funzione somma_vettori e, purtroppo, non riesco a capire quale sia il mio errore...se qlkno d buona voltà può darci uno sguarda e sa qual è l'errore, potrebbe gentilmente spiegarmelo? Allego il file...
Grazie anticipatamente....

Attached Files




Immagine inviata

#2
Mr.Hope

Mr.Hope

    Advanced Member

  • Utente
  • PipPipPip
  • 627 posts
up

Ragazzi possibile ke nessuno mi riesca a dare una mano??? O magari siete tutti qnt al mare??? :cray:
Immagine inviata

#3
alfio

alfio

    Advanced Member

  • Utente
  • PipPipPip
  • 30 posts
we Mario non ti preoccupare ci siamo, anche noi dobbiamo subire il calvario degli esami a luglio ._.
Cmq ho dato un occhiata al tuo programma e mi sembra fatto bene o c'è qualche piccolo errore che non si fa vedere e per questo sto provando a farlo da capo,appena lo finisco te lo posto
ciao
alfred_web88@hotmail.it

#4
Mr.Hope

Mr.Hope

    Advanced Member

  • Utente
  • PipPipPip
  • 627 posts

we Mario non ti preoccupare ci siamo, anche noi dobbiamo subire il calvario degli esami a luglio ._.
Cmq ho dato un occhiata al tuo programma e mi sembra fatto bene o c'è qualche piccolo errore che non si fa vedere e per questo sto provando a farlo da capo,appena lo finisco te lo posto
ciao

Che bello alfrè!!! Credevo d esser solo!!! Cmq vedi un pò e fammi sapere...aspetto tue risposte!!!
Immagine inviata

#5
Mr_fox

Mr_fox

    Newbie

  • Utente
  • PipPipPip
  • 680 posts
Neppure io riesco a trovare errori... Ma....
ciò che resta è la netta consapevolezza di non poter cambiare la vita... (luigi pirandello)

#6
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
salve a tutti... anche io ho provato a svogere questo esercizio... ma per ora ancora non sono riuscito ad individuare l errore.. ora vi posto il mio programma... e se avete tempo e pazienza di darci una sbirciatina... magari potete darmi un enorme aiuto...

Attached Files



#7
GiX

GiX

    Advanced Member

  • Utente
  • PipPipPip
  • 108 posts
Ecco la mia risoluzione, a me funziona perfettamente.

Ora do uno sguardo rapido ai vostri programmi e vedo se riesco a individuare l'errore.

Attached Files



#8
GiX

GiX

    Advanced Member

  • Utente
  • PipPipPip
  • 108 posts
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 :laugh:

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...

#9
GiX

GiX

    Advanced Member

  • Utente
  • PipPipPip
  • 108 posts

salve a tutti... anche io ho provato a svogere questo esercizio... ma per ora ancora non sono riuscito ad individuare l errore.. ora vi posto il mio programma... e se avete tempo e pazienza di darci una sbirciatina... magari potete darmi un enorme aiuto...



Il tuo errore nella stampa è qui:

mul §t0,§s0,4
add §t2,§a0,§t0 <--*
lw §t1,0(§t2)


* Stai usando a0 per determinare l'indirizzo da usare nella load word, ma questo implica che il valore in a0 dovrebbe restare invariato, invece subito dopo guarda che succede:

li §v0,4
la §a0,msg4 <-- **


** Viene caricato proprio in a0 l'indirizzo di msg4, e così nelle successive iterazioni se ne va tutto a farsi friggere...

#10
Mr.Hope

Mr.Hope

    Advanced Member

  • Utente
  • PipPipPip
  • 627 posts

Ecco tutto, spero di essere stato utile e di non essere arrivato troppo tardi...

Che erroraccio!! :doh: Sono stato a ricontrollare l'esercizio per giorni, ma quella parte l'ho sempre sorvolata!!! Grazie 1000 GiX!!!
Immagine inviata

#11
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
Infatti GiX. Sono stato anch io giornate sane senza risuscirlo ad individuare... Allora ho provato a mettere il contenuto di $a0 in un registro temporaneo appena prima del ciclo for in modo da far sempre riferimento a quest ultimo... Ma cosa stana mi fa stampare solo il primo vettore... Mica potresti darmi un consiglio sulla base di quanto ti posto ora?? Grazie...

Attached Files



#12
HDM

HDM

    Advanced Member

  • Utente
  • PipPipPip
  • 405 posts

Infatti GiX. Sono stato anch io giornate sane senza risuscirlo ad individuare... Allora ho provato a mettere il contenuto di $a0 in un registro temporaneo appena prima del ciclo for in modo da far sempre riferimento a quest ultimo... Ma cosa stana mi fa stampare solo il primo vettore... Mica potresti darmi un consiglio sulla base di quanto ti posto ora?? Grazie...


Nella funzione di stampa utilizzi il registro t1 che nel main contiene la base del vettore, visto che non hai salvato i registri temporanei prima della chiamata a funzione, è normale che quando vai a chiamare per la seconda volta la stampa, tu alla funzione non passi l'indirizzo della base del vettore, ma l'ultimo elemento del primo vettore (che dovrebbe essere l'ultimo valore che assume t1).
Prova ad effettuare le chiamate a funzione in questo modo:
addi sp,sp,-16
sw t0,16(sp)
sw t1,12(sp)
sw t2,8(sp)
sw t3,4(sp)

/*passaggio parametri da includere*/
jal stampa

lw t0,16(sp)
lw t1,12(sp)
lw t2,8(sp)
lw t3,4(sp)
addi sp,sp,16

In questo modo ti salvi il contenuto dei registri temporanei che usi e non dovresti avere problemi, almeno che non ci sia qualche altro errore. ^_^
Immagine inviata

#13
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
HMD, ho fatto come mihai consigliato... questa volta mi stampa anche il secondo vettore, ma arriva a v[3] e comincia a darmi numeri srambi...Il terzo non viene stampato... Cmq volevo chiederti se potevo sopperire all allocazione in memoria dei registri t0 a t3, magari utilizzando piu registri (se non erro arriviamo a t9)... Che ne pensi, è una scelta possibile???
PS: Scusa se ti rubo tempo prezioso...alrimanti lancio tutto dal balcone!!!!

#14
HDM

HDM

    Advanced Member

  • Utente
  • PipPipPip
  • 405 posts

HMD, ho fatto come mihai consigliato... questa volta mi stampa anche il secondo vettore, ma arriva a v[3] e comincia a darmi numeri srambi...Il terzo non viene stampato... Cmq volevo chiederti se potevo sopperire all allocazione in memoria dei registri t0 a t3, magari utilizzando piu registri (se non erro arriviamo a t9)... Che ne pensi, è una scelta possibile???
PS: Scusa se ti rubo tempo prezioso...alrimanti lancio tutto dal balcone!!!!


Di sicuro non è una buona scelta se si vuol passare l'esame con un buon voto :D
il tuo errore è quì
addi $a0,$a3,0
addi $a1,$s0,0
jal stampa

la base del vettore sta in t2 non in a3.

Inoltre devi usare quella sintassi di prima per TUTTE le chiamate a funzioni. Il tuo programma funziona se correggi queste cose
Immagine inviata

#15
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
GIX... ho provAto il tuo programma... ma a me, quello da te postato, non funziona...

#16
HDM

HDM

    Advanced Member

  • Utente
  • PipPipPip
  • 405 posts

GIX... ho provAto il tuo programma... ma a me, quello da te postato, non funziona...

Il programma di GiX funziona, probabilmente non hai settato bene il PcSpim.
Che errore ti da?
Immagine inviata

#17
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
l errore ke mi da è:

Exception occurred at PC=0x00400140
Unaligned address in inst/data fetch: 0x1001001e
Attempt to execute non-instruction at 0x80000180

Da cosa potrebbe essere dovuto??? cosa dovrei cambiare nei settaggi?? Grazie!!!

#18
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
Che corrisponde all' istruzione:

[0x00400140] 0x8d090000 lw $9, 0($8) ; 109: lw $t1, 0($t0)

In effetti mi segnala errore anche nel mio di programma... Il motivo non mi è chiaro... L istuzione ho visto che è corretta anche a me... ma mi viene segnalato il problema di prima..

#19
mar.co88

mar.co88

    Advanced Member

  • Utente
  • PipPipPip
  • 123 posts
:help: :beg: :notworthy:

#20
HDM

HDM

    Advanced Member

  • Utente
  • PipPipPip
  • 405 posts
Ho riprovato ancora il programma e funziona correttamente, non mi segnala alcun errore.
Assicurati che nelle impostazioni del PcSpim siano spuntate soltanto le seguenti opzioni:

- Allow pseudo-instruction
- Save window position
- Mapped I/O

tutte le altre NON devono essere attive.
Immagine inviata




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users