Vai al contenuto

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

Ultimo esercizio assegnato


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 13 risposta/e

#1
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
eccovi lo svolgimento ,spero di aver fato bene almeno funziona prrr :clap2:
per dubbi o se c'è qualche errore scrivetemi pure.

(per chi l'avesso già scaricato ho apportato una modifica perchè c'era un'errore e ho postato la soluzione giusta.)


Chi si ferma è perduto.

#2
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
a chi servono spiegazioni fatevi avanti...
Chi si ferma è perduto.

#3
Raziel

Raziel

    Member

  • Utente
  • StellaStella
  • 14 Messaggi:
Avrei preferito trovare insieme al prg in asm anche il relativo codice in C. Magari era + chiaro quello che avevi scritto.

#4
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
vabbè... si capisce dalle stringhe cosa fa il programma... per il resto, più che altro, avresti potuto mettere commenti e rendere il codice un pò più leggibile separando certe sequenze le une dalle altre: ci vuole un pò per sbrogliare tutto il codice.
Anche scrivere all'inizio in quali registri sono state messe le diverse variabili non sarebbe stato malvagio...

lol ti ho ucciso un attimo prrr cmq, usando la classica frase, "il programma funziona"...

:doofy:


EDIT: ma lo stack pointer nel MIPS non punta, in genere, solo all'ultima cella di memoria occupata?
Vabbè, certo, l'uso che se ne fa dipende dal programmatore... ma Conte l'ha sempre usato così...
Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#5
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
ciao ok hai ragione ..per i commenti ma andavo di fretta l'ho fatto in 20 min cmq per lo stack pointer punta sempre all'ultima cella di memoria utilizzata almeno io così ho sempre letto ed imparato...sei hai altri commenti fatti avanti pure np.
Chi si ferma è perduto.

#6
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
zeus se la tua intenzione era di far puntare lo stack pointer all'ultima posizione occupata hai fatto un errore durante il caricamento dei valori nello stack:


addi ssp,ssp,-24
addi ss0,ssp,4
addi ssp,ssp,-24
addi ss1,ssp,4
...
li st0,1
sw st0,4(ssp)
li st0,2
sw st0,8(ssp)
li st0,3
sw st0,12(ssp)
li st0,4
sw st0,16(ssp)
...
li st0,7
sw st0,44(ssp)
li st0,10
sw st0,48(ssp)

quello che succede è che che i dati vengono scritti nella cella di memoria immediatamente successiva a quella puntata da sp: in pratica, nella posizione puntata da sp non si trova nulla (come se puntasse alla prima locazione libera) e va a scrivere l'ultimo elemento del secondo vettore proprio nella locazione in cui si trovava sp all'inizio del programma (che teoricamente, se sp punta all'ultima cella occupata, dovrebbe già essere occupata da un altro dato)

nella prima istruzione di store dovresti porre l'offset pari a 0, e poi a crescere di 4 in 4 fino a 44, non fino a 48 (con un offset di 48 scrivi sullla posizione già occupata di cui sopra)

EDIT: a questo punto dovresti anche cambiare i valori di ss0 e ss1: infatti, dovresti fare move ss0,ssp prima e move ss1,sp direttamente, senza somme...
Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#7
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
ti sbagli lo stack cresce verso l'alto e la prima posizione libera è 4($sp)
Chi si ferma è perduto.

#8
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
indubbiamente cresce verso l'alto, ma se sp punta all'ultima cella occupata per la stessa definizione ci deve essere qualcosa in 0(sp), tu carichi i dati in memoria a partire da 4(sp) mangiandoti una posizione... mi sono preso anche la briga di fare un esempio grafico...


la posizione 1 nel mio esempio è dove si trova inizialmente sp, l'ultima posizione occupata sullo stack.
La posizione 2 è dove si trova dopo il primo decremento, la posizione 3 dopo il secondo decremento.

se inizi a caricare le posizioni da s1 = 4(sp), contando che hai decrementato in totale sp di 48 posizioni (cioè 12 word), le prime 11 le scrivi correttamente, l'ultima sarà scritta in una posizione già occupata, che è la posizione 1 dove si trovava inizialmente sp...

spero di essermi chiarito

File allegato


Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#9
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
ciao se ti vedi le soluzioni di esame degli anni scorsi puoi accorgerti che il riempimento parte tutto da 4( £ sp) e vedi che sono corretti ti ripeto a 0 (£ sp) si trova una cella per la quale non hai allocato memoria perchè sta al di sotto di $sp mentre a 4 (£ sp)
hai la prima posizione libera.
Guardati gli esami vecchi e fai il confronto.


EDIT (by bocco): ragazzi usate il carattere £ per identificare il "dollaro" in quanto quest'ultimo da problemi di visualizzazione ;)
Chi si ferma è perduto.

#10
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
è ben altro discorso se sp deve puntare alla prima cella di memoria libera... però giusto ieri hai detto:

lo stack pointer punta sempre all'ultima cella di memoria utilizzata almeno io così ho sempre letto ed imparato


cmq ho trovato sui miei appunti la soluzione per quello stesso esercizio fatta da conte in aula (con la differenza rispetto al tuo che vengono caricati 10 elementi per vettore, quindi in totale sp viene decrementato di 80), la parte in cui si caricano gli elementi nei vettori è questa:


addi ssp,ssp,-80

li st0,7
sw st0,0(ssp)
li st0,8
sw sto,4(ssp)
...
li st0,12
sw st0,36(ssp)
li st0,0
sw st0,40(ssp)
...
li st0,9
sw st0,76(ssp)

addi ss0,ssp,0
addi ss1,ssp,40

come puoi vedere, il primo elemento viene messo in 0(sp),e non in 4(sp) e l'ultimo elemento in 76(sp), e non in 80(sp)...

qualcuno che ha seguito l'ultima lezione di LLAP potrebbe confermare?
Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#11
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
aggiungo che guardando una traccia d'esame dell'anno scorso ho notato che in effetti i dati vengono salvati a partire da 4(sp); ma ciò implica che sp punta alla prima cella di memoria libera, e non all'ultima occupata!
infatti, 0(sp) sarà sempre una posizione libera, poichè si inizia a scrivere partendo da 4(sp).

cmq rimane il fatto che conte all'ultima lezione il programma l'ha scritto iniziando a scrivere da 0(sp)...
allora come si deve fare?
Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#12
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
io ho sempre caricato da 4$sp
e ho sempre visto fare così
poichè se tu fai sp-k la prima cella libera risulta essere 4sp

File allegato


Chi si ferma è perduto.

#13
Blackjack

Blackjack

    Moderatore globale

  • Moderatore
  • 2542 Messaggi:
ho mandato una mail a conte per chiarimenti. ecco la sua risposta:

l’indirizzo al quale far puntare il registro sp dipende dalla convenzione che si sceglie. Non c’è un metodo giusto o sbagliato ma solo una scelta (mi pare di averlo detto a lezione). Detto questo basta scegliere la convenzione: negli esercizi dell’anno scorso era stato scelto di far puntare sp alla prima cella libera mentre negli esercizi da me proposti ho scelto di far puntare sp all’ultima cella occupata. In conclusione gli esercizi sono corretti in tutti e due i modi basta che scegliate una convenzione e la manteniate per tutto l’esercizio.


:cheers:
Immagine inviata
Immagine inviata
Immagine inviata

"L'amore è la capacità di avvertire il simile nel dissimile"

#14
Dolcezeus

Dolcezeus

    Advanced Member

  • Utente
  • StellaStellaStella
  • 418 Messaggi:
benone abbiamo ragione entrambi :cheers:
Chi si ferma è perduto.




Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi