fbpx
Skip to main content
  1. Valerio Battaglia
  2. Ingegneria Informatica - Triennale
  3. Mercoledì, 09 Maggio 2007
  4.  Subscribe via email
e quest'ultimo lo apro io :D buon lavoro a tutti..
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
fino a pagina 19
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
domandina easy :)

il prof per fare gli accessi in memoria usa sempre uno dei 7 registri di tipo "s". ad esempio nelle ultime slide mostrate oggi per accedere in memoria ha scritto una cosa tipo 4($s3) cioè $s3+4. ora mi chiedo.. $s3 è un registro collegato alla memoria? o è un semplice registro di 32bit e basta? grazie
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
La seconda che hai detto.

nel processore MIPS non ci sono registri dedicati alla memoria. in questo caso si può usare un qualsiasi registro. per convenzione, tuttavia, si associano variabili dei linguaggi di livello superiore (come è il C) a registri del tipo $s*. la prossima settimana vedremo meglio i motivi di questa convenzione.

domandina easy

il prof per fare gli accessi in memoria usa sempre uno dei 7 registri di tipo "s". ad esempio nelle ultime slide mostrate oggi per accedere in memoria ha scritto una cosa tipo 4($s3) cioè $s3+4. ora mi chiedo.. $s3 è un registro collegato alla memoria? o è un semplice registro di 32bit e basta? grazie
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se sei veramente il proffessore, ammazza che efficienza! risponde ovunque non importa il canale di comunicazione o l'orario! Mitico!
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se sei veramente il proffessore, ammazza che efficienza! risponde ovunque non importa il canale di comunicazione o l'orario! Mitico!


Penso che sia veramente lui :lol: :lol: :D
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Scusate ma fino dove è arrivato il professore? Mercoledi pemeriggio ero assente.
P.S. Mitico Lo Presti!!!
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Scusate ma fino dove è arrivato il professore? Mercoledi pemeriggio ero assente.
P.S. Mitico Lo Presti!!!

Slide sul "Set di istruzioni MIPS" fino pag 48 compresa (ci sono due esercizi da svolgere scrivendo il codice assembler su carta (credo))
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se sei veramente il proffessore, ammazza che efficienza! risponde ovunque non importa il canale di comunicazione o l'orario! Mitico!

caso unico purtroppo..si contano sulle dita di una mana i prof di ing informatica che si curano della didattica...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
se sei veramente il proffessore, ammazza che efficienza! risponde ovunque non importa il canale di comunicazione o l'orario! Mitico!


E' lui, è lui!! :lol:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Stavo facendo gli esercizi e non mi è chiara una cosa....
quando siamo in un for e aggiorniamo la variabile indice dell'array, dobbiamo ogni volta aggiornare l'indice, moltiplicarlo per 4 e poi sommarlo all'indirizzo base?
Oppure, se per esempio l'incremento di i è di 1, possiamo semplicemente ad ogni passo aumentare di 4 l'indirizzo base? (magari preventivamente "copiato" in un altro registro, così il valore iniziale rimane)

In generale non ho capito se dobbiamo ottenere lo stesso effetto del programma in C scritto oppure dobbiamo precisamente imitarlo.
Per esempio: se ho B[i] = B[i] + 2, se io il valore di B[i] ce l'ho già in un registro, per esempio in $t2, posso fare
addi $t2, $t2, 2
e poi scrivere il contenuto di $t2 nel giusto indirizzo di memoria?
Oppure, seguendo ciò che fa il codice, devo caricare in un registro il contenuto di B[i], sommargli 2 e poi riscriverlo allo stesso indirizzo, anche se io ciò che è in B[i] lo so già?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
A lezione fin dove siete arrivati nelle slide Set_Istruzioni.pdf?
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
scusate la domanda, forse molto stupida.. supponendo di avere un array A con indirizzo base $s1, se volessi memorizzarmi il valore di A[0] ad esempio in $t0, che differenza c'è tra le due linee di codice?

add $t0, $s1, $zero

e

lw $t0, 0($s1)

so che non vanno bene entrambe e che probabilmente la prima copia in t0 solo l'indirizzo di A[0] ma non capisco bene quando una istruzione si riferisce ad un indirizzo e quando ad un valore contenuto in quell'indirizzo..
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
sarebbe d'aiuto far funzionare il compilatore per fare queste prove
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Stavo facendo gli esercizi e non mi è chiara una cosa....
quando siamo in un for e aggiorniamo la variabile indice dell'array, dobbiamo ogni volta aggiornare l'indice, moltiplicarlo per 4 e poi sommarlo all'indirizzo base?
Oppure, se per esempio l'incremento di i è di 1, possiamo semplicemente ad ogni passo aumentare di 4 l'indirizzo base? (magari preventivamente "copiato" in un altro registro, così il valore iniziale rimane)

In generale non ho capito se dobbiamo ottenere lo stesso effetto del programma in C scritto oppure dobbiamo precisamente imitarlo.
Per esempio: se ho B[i] = B[i] + 2, se io il valore di B[i] ce l'ho già in un registro, per esempio in $t2, posso fare
addi $t2, $t2, 2
e poi scrivere il contenuto di $t2 nel giusto indirizzo di memoria?
Oppure, seguendo ciò che fa il codice, devo caricare in un registro il contenuto di B[i], sommargli 2 e poi riscriverlo allo stesso indirizzo, anche se io ciò che è in B[i] lo so già?


Per come la vedo io, ti conviene usare un registro che contenga l'indice e che te incrementi di uno ogni volta (o di quanto vuoi), in modo tale da poter effettuare senza problemi il confronto che sta in testa al for e il relativo incremento come da codice C. Per il calcolo dell'indirizzo della cella dell'array non fai altro che prendere un registro temporaneo e moltiplicare per 4 il valore dell'indice, dopidichè sommerai a quel registo temporaneo il valore del registro che contiene l'indirizzo dell'array ed ecco che puoi fare la tua lw o la tua sw a seconda del caso...

Spero di essere stato chiaro :wink:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
scusate la domanda, forse molto stupida.. supponendo di avere un array A con indirizzo base $s1, se volessi memorizzarmi il valore di A[0] ad esempio in $t0, che differenza c'è tra le due linee di codice?

add $t0, $s1, $zero

e

lw $t0, 0($s1)

so che non vanno bene entrambe e che probabilmente la prima copia in t0 solo l'indirizzo di A[0] ma non capisco bene quando una istruzione si riferisce ad un indirizzo e quando ad un valore contenuto in quell'indirizzo..


Allora a quanto ho capito gli array sono memorizzati in memoria all'indirizzo base $s1... quindi per prima cosa devi caricare nei registri il contenuto dalla memoria, per fare questo devi necessariamente fare:

lw $t0, 0($s1)

Credo che la prima istruzione sia sbagliata...
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Mannaggia che nn c'è l'EDIT, cmq il registro $s1 contiene L'INDIRIZZO DI MEMORIA a quanto ho capito, una sorta di puntatore all'ARRAY contenuto nella memoria.

Se tu caricassi con la prima istruzione $s1 in $t0 praticamente avresti che $t0 non contiene il valore in posizione 0 dell'array, ma il suo indirizzo di memoria.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Detta più breve: la differenza sta che nel primo caso tu carichi l'INDIRIZZO di memoria, nel secondo carichi effettivamente il CONTENUTO.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Detta più breve: la differenza sta che nel primo caso tu carichi l'INDIRIZZO di memoria, nel secondo carichi effettivamente il CONTENUTO.

thank:D molto chiaro.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Detta più breve: la differenza sta che nel primo caso tu carichi l'INDIRIZZO di memoria, nel secondo carichi effettivamente il CONTENUTO.

thank:D molto chiaro.


De nada... spero solo di nn aver detto castronerie :? :lol:
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
si puo' fare in entrambi i modi. il primo metodo corrisponde a lavorare con gli indici, mentre il secondo corrisponde a lavorare con i puntatori. vedremo che il secondo è migliore (in termini di efficienza con degli esempi a lezione (cosa vera anche in C).

in generale mi interessa che il codice realizzi la stessa funzione. io parto dal codice C perché immagino che per molti di voi sia più semplice. sicuramente non è necessario ne il metodo migliore.

Stavo facendo gli esercizi e non mi è chiara una cosa....
quando siamo in un for e aggiorniamo la variabile indice dell'array, dobbiamo ogni volta aggiornare l'indice, moltiplicarlo per 4 e poi sommarlo all'indirizzo base?
Oppure, se per esempio l'incremento di i è di 1, possiamo semplicemente ad ogni passo aumentare di 4 l'indirizzo base? (magari preventivamente "copiato" in un altro registro, così il valore iniziale rimane)

In generale non ho capito se dobbiamo ottenere lo stesso effetto del programma in C scritto oppure dobbiamo precisamente imitarlo.
Comment
There are no comments made yet.


There are no replies made for this post yet.
Be one of the first to reply to this post!