.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Architettura degli elaboratori e delle reti (http://www.dsy.it/forum/forumdisplay.php?forumid=210)
-- Preparazione al Laboratorio F49 (http://www.dsy.it/forum/showthread.php?threadid=42442)


Posted by uLori on 02-11-2011 08:56:

Preparazione al Laboratorio F49

Ciao ragazzi, mi devo preparare per sostenere a gennaio la parte di laboratorio dell esame per informatica f49.
Qualcuno saprebbe indicarmi dove trovare il materiale giusto per la preparazione? e magari un esempio delle procedure ricorsive che sono richieste nelle nuova modalità di esame?
Grazie 1000


Posted by gab217 on 02-11-2011 11:24:

Mi accodo


Posted by pintu on 02-11-2011 12:46:

idem..qualcuno sta seguendo le lezioni per caso??


Posted by vivian.souza on 02-11-2011 15:55:

Per l'esame con D'Antona indico questo link : http://homes.dico.unimi.it/~dantona...age=laboratorio
Dove si possono trovate i testi delle esercitazioni e le sue soluzioni.


Posted by pintu on 03-11-2011 11:40:

@vivian.souza: hai gia sostenuto la parte di laboratorio??


Posted by uLori on 03-11-2011 14:15:

nessuno sà darci un esempio di esame di laboratorio? :(


Posted by aPiso on 05-11-2011 16:33:

Io ho fatto laboratorio per F1X quindi non so aiutarvi, se sul sito non c'è nulla secondo me la cosa migliore è provare a mandare una mail al dottor Codara.


Posted by uLori on 05-11-2011 17:33:

io ho guardato il sito e ci sono gli esempi del laboratorio..ma è un sacco di codice io spero non sia da fare così tanto..


Posted by CowBoy on 05-11-2011 18:20:

Io questo esame l'ho dato tanto tempo fa... era molto semplice perché le richieste non erano poi fuori dal mondo:

- variabili assembly
- chiamate a funzione (i vari jump)
- gestione di chiamata a funzione ricorsiva (gestione dello stack)
- somme, sottrazioni, moltiplicazioni, divisioni (matematica di base)
- mascheramento di variabili (operatori binari AND, OR, XOR, SHIFT)
... e qualcos'altro

Svolgendo gli esercizi di laboratorio nel ambiente SPIM (simulatore MIPS) vi andrà via tutta questa ansia da prestazione.

MA DOVETE SCRIVERE VOI LA SOLUZIONE!!! NON CERCATE DI SCOPIAZZARE ALTRIMENTI SARA' TUTTO TEMPO PERSO! IMPEGNATEVI E ANDRÀ TUTTO LISCIO. :D

In bocca al lupo!

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by vivian.souza on 06-11-2011 18:28:

@pintu sì l'ho sostenuto a luglio. L'esame consiste nella stesura di una procedura ricorsiva in linguaggio assembly MIPS - senza main, soltanto la procedura. Per esempio, la risoluzione dell'esame di giugno:

alfa = gamma(n) - beta(alfa(n-1))

alfa:
addi $sp, $sp, -12 #alloco spazio per salvare l'indirizzo di ritorno e altre variabile
sw $ra, 8($sp) #salvo l'indirizzo di ritorno
sw $a0, 4($sp) #salvo il valore originale di n

beq $a0, $zero, fine #se a0(n) = 0, salto a fine (caso base)

jal gamma #altrimenti chiamo la procedura gamma

sw $v0, 0($sp) #salvo il risultato di gamma

lw $a0, 4($sp) #carico in a0 il valore originale di n

addi $a0, $a0, -1 #decrementa a0 di 1 (n - 1)

jal alfa #chiamo la procedura alfa

move $a0, $v0 #a0 <- v0 (risultato della procedura alfa)

jal beta #chiamo la procedura beta

lw $t0, 0 ($sp) #carico in t0 il risultato della procedura gamma

sub $v0, $t0, $v0 #v0 = risultato di gamma - risultato di beta

lw $ra, 8($sp) #carico in ra l'indirizzo di ritorno salvato sullo stack

addi $sp, $sp, 12 #realloco lo stack nella sua posizione originale

jr $ra #ritorno al chiamante

fine:
addi $sp, $sp, 12 #realloco lo stack
li $v0, 0 #caso base, ritorno 0
jr $ra


Posted by uLori on 07-11-2011 08:09:

la richiesta era solo alfa = gamma(n) - beta(alfa(n-1)) ?

non avendo ancora studiato mi risulta difficile capire cosa si richide..


Posted by vivian.souza on 07-11-2011 12:39:

scusami... vediamo Alfa è la funzione che tu deve risolvere creando una procedura. Alfa richiama se stessa e una seconda procedura chiamata beta che sappiamo a priore che esiste ma non ci importa che cosa veramente faccia, la dobbiamo soltanto chiamare e prendere il suo risultato per risolvere alfa.
Per un esempio di enunciato simile a questo suggerisco prendere le tracce dei progetti che sono ancora disponibili nel sito, sono tutti simili. Più tarderà proverò a trovare l'enunciato completo di questo problema perché adesso sono in uni...


Posted by uLori on 23-11-2011 10:45:

nessuno sà altro riguardo questo esame?!


Posted by uLori on 27-11-2011 17:45:

stò provando a capire qualcosa, ma gli esercizi di esempio non mi sono chiari come faccio ad arrivare al risultato. ad esempio questo:

Si consideri la coppia di sequenze de nite da
(1) F(n) = n - M(F(n - 1)) ;
(2) M(n) = n - F(M(n - 1)) ;
con valori iniziali
(3) F(0) = 1 ;
(4) M(0) = 0 :
Scrivere un programma per il calcolo dei valori di F(n) e M(n). Il programma
dovra contenere due procedure: una per il calcolo di F(n) e una per il calcolo di
M(n). Il programma principale si occupera della lettura di un numero n >= 0 da
tastiera, del calcolo di F(n) e M(n) e della visualizzazione del risultato.


Posted by CowBoy on 27-11-2011 20:00:

Allora:

code:
#include <stdio.h> int F( int a ); int M( int b ); int main( void ) { int n = 0; printf("Inserire un numero intero n >= 0: "); scanf("%d", &n); printf("\nIl risultato della funzione F è: %d\n", F(n)); printf("Il risultato della funzione M è: %d\n", M(n)); return 0; } int F( int a ) { int n = a; if (n == 0) return 1; else return n - M(F(n-1)); } int M ( int b ) { int n = b; if (n == 0) return 0; else return n - F(M(n-1)); }


Chiaro, no?!

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by uLori on 28-11-2011 15:46:

il codice è chiaro..ma il calcolo matematico che avviene non lo capisco..
ad esempio se metto n=3

F(3) = 3 - M(F(3-1))
M(3) = 3 - F(M(3-1))

come si arriva ad un risultato?


Posted by CowBoy on 28-11-2011 20:17:

Avvengono diverse chiamate tra le funzioni F e M, ricorsivamente. Se vuoi puoi effettuare delle modifiche al codice (in C) per stampare le chiamate e vedere cosa accade durante l'esecuzione.

code:
1: F(3) = 3 - M(F(2)) (mettilo nello stack e chiama 2) 2: F(2) = 2 - M(F(1)) (mettilo nello stack e chiama 3) 3: F(1) = 1 - M(1) (mettilo nello stack e chiama 4) 4: M(1) = 0 (ritorna il risultato a 3, e rimettilo in esecuzione) 5: F(1) = 1 (ritorna il risultato a 2, e rimettilo in esecuzione) 6: F(2) = 2 - M(1) (mettilo nello stack e chiama 7) 7: M(1) = 0 (ritorna il risultato a 6, e rimettilo in esecuzione) 8: F(2) = 2 (ritorna il risultato a 1, e rimettilo in esecuzione) 9: F(3) = 3 - M(2) (mettilo nello stack e chiama 10) 10: M(2) = 2 - F(M(1)) (mettilo nello stack e chiama 11) 11: M(1) = 1 - F(0) (ritorna il risultato a 10, e rimettilo in esecuzione) 12: M(2) = 2 - 1 (ritorna il risultato a 9, e rimettilo in esecuzione) 13: F(3) = 3 - 1 = 2!!!


Ta-da, provare M(3) per credere!

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by pintu on 10-12-2011 09:51:

Sui computer del laboratorio per l'esame cosa viene usato? PCSpim?


Posted by uLori on 14-12-2011 09:51:

ragazzi qualche altro esempio di tema d'esame? così da esercitarsi con altri esercizi oltre a quelli di esempio sul sito..
grazie! :)


Posted by aPiso on 14-12-2011 16:50:

Originally posted by pintu
Sui computer del laboratorio per l'esame cosa viene usato? PCSpim?


Ahaha sarebbe bello eh?

Per le esercitazioni si usa MARS, che è meglio di PC Spim a mio avviso, e per l'esame di laboratorio puoi solo riempire una casella di testo su JLI, non puoi far girare il codice per vedere se funziona, deve venirti in prima botta o comunque te lo devi eseguire con carta e penna per fare un controllo...


Posted by pintu on 17-12-2011 13:10:

ah quindi praticamente consegno un file di testo e poi se la vedono loro? Sarà perchè non ho ancora studiato ma le esercitazioni che ci sono sul sito non sono x niente chiare! Anche l'esercizio che ha postato uLori..come sarebbe risolto in assembly??


Posted by pintu on 17-12-2011 13:11:

Oppure questo..qualcuno è cosi paziente da provare a risolverlo?? :)

Si realizzi un programma per il calcolo della potenza. Il programma dovra:
(1) leggere da tastiera due numeri interi a; b  0;
(2) visualizzare in output la potenza ab.
Il programma deve contenere una apposita procedura power che riceve in ingresso
due parametri (a e b) e restituisce il valore calcolato ab.
Si ricorda che devono essere rispettate le convenzioni descritte a lezione.


Posted by uLori on 17-12-2011 16:57:

Originally posted by pintu
ah quindi praticamente consegno un file di testo e poi se la vedono loro? Sarà perchè non ho ancora studiato ma le esercitazioni che ci sono sul sito non sono x niente chiare! Anche l'esercizio che ha postato uLori..come sarebbe risolto in assembly??


la risoluzione del esercizio in assembly c'è sul sito del prof..comunque ora sto iniziando a capire e fidati non è poi così difficile :)

le cose importanti sono:
-all inizio preparare lo stack pointer con il numero di spazi in base alle variabili che userai + quelle che ti servono sempre come $ra e $a0

e fai così: addi $sp, $sp, -12 (-12 lasc lo spazio per 3 dati)
sw $ra , 8($sp) salvi il registro di ritorno
sw $a0, 4($sp) salvi il dato $a0 che è il dato passato dal esercizio di solito n

-poi devi ricordati che quando fai una Jal, una chiamata ad una funzione, questa prende in ingresso sempre il dato salvato in $a0 e ti dà il risultato in uscita sempre nel registro $v0

-poi alla fine devi sempre caricare il registro di ritorno
lw $ra, 8($sp) lo carichi dalla posizione 8 xkè era li che lo avevi salvato

poi rigeneri lo stack pointer
addi $sp,$sp,12
fai un salto al registro di ritorno
JR $ra

e l'esericizio finisce :)


Posted by CowBoy on 19-12-2011 09:48:

I miei complimenti uLori... è così che si fa!

Ciao

__________________
.. ±·ø·±-`` MuSiC iS My LanGuAGe ´´-±·ø·± ..


Posted by pintu on 19-12-2011 17:22:

scusa uLori ma dato che non è richiesto il main, se per esempio devo risolvere l'esercizio dell'esponente, devo preoccuparmi di allocare lo stack con indirizzi di ritorno ecc o basta che mi limito a scrivere la procedura richiesta?? nel senso..nelle soluzioni proposte sul sito (se escludiamo il main) la soluzione richiesta all'esame dovrebbe essere questa:

power:
li $v0, 1
ciclopower:
beq $a1, $0, finepower
andi $t0, $a1, 1
beq $t0, $0, salta
mul $v0, $v0, $a0
addi $a1, $a1, -1
salta:
mul $a0, $a0, $a0
div $a1, $a1, 2
j ciclopower
finepower:
jr $ra # ritorno al chiamante

oppure no??
Dato che non devo neanche far girare il codice ma scrivere semplicemente un file di testo potrebbero anche accontentarsi :D :D


Posted by uLori on 20-12-2011 11:39:

mi sà che ci vedremo all esame di gennaio :)

comunque il main non lo dovremo scrivere però l'allocazione e la preparazione dello stack si..ma è facile e ripetitivo :D


Posted by pintu on 20-12-2011 12:57:

se riesco a prepararmi credo di si! Quando sarebbe l'appello?


Posted by uLori on 20-12-2011 14:44:

Originally posted by pintu
se riesco a prepararmi credo di si! Quando sarebbe l'appello?


la data ancora non c'è, dobbiamo iscriverci sul sifa..


Posted by gab217 on 21-12-2011 23:07:

Originally posted by uLori
la data ancora non c'è, dobbiamo iscriverci sul sifa..


Esce tutto sul sifa?


Posted by uLori on 22-12-2011 08:22:

Originally posted by gab217
Esce tutto sul sifa?


penso di si, leggendo sul sito del prof dice che serve l'iscrizione al sife per fare l'esame di laboratorio e poter verbalizzare. quindi penso prima o poi uscirà. per ora c'è solo quello di borghese..


Posted by gab217 on 02-01-2012 16:28:

Originally posted by uLori
penso di si, leggendo sul sito del prof dice che serve l'iscrizione al sife per fare l'esame di laboratorio e poter verbalizzare. quindi penso prima o poi uscirà. per ora c'è solo quello di borghese..

Ok perchè ancora non trovo riferimenti in merito


Posted by uLori on 02-01-2012 18:40:

già...come facciamo per iscriverci e sapere quando è questo esameee??


Posted by pintu on 03-01-2012 11:10:

Sul SIFA non c'è un tubo mannaggia! Ma mettere un avviso sul sito del corso no eh??? Ragazzi mi confermate che l'esame consiste solo nella scrittura di una procedura ricorsiva?? E che il tutto va fatto in un file di testo, senza bisogno di far girare il codice??


Posted by uLori on 04-01-2012 10:45:

ciao, si si io sono stato dal prof qualche mese fà e anche lui mi ha confermato..bisogna solo scrivere la procedura ricorsiva senza main quindi deduco che sia impossibile da provare.. non sò se magari il main lo fà lui e lo prova o lo corregge leggendo il codice..


Posted by pintu on 04-01-2012 16:32:

Misteri dell'esame di architettura :D Comunque...non mi è chiara una cosa...

li $v0 1
syscall

in questo modo si richiede la print_int? L'ho preso dalle esercitazioni che ci sono sul sito.. Ma non dovrei passare un intero come argomento tramite il registro $a0?? Perchè, sempre dalle esercitazioni --->

msg1: .asciiz "stringa"

li $v0 4 #chiamata a print_string
la $a0 msg1 #carico indirizzo di msg1 in $a0
syscall


Posted by uLori on 04-01-2012 17:01:

ma io non credo questo serva saperlo...i vari print non avvengono nella parte della procedura ricorsiva ma nel main..almeno credo..


Posted by pintu on 04-01-2012 17:10:

Si l'ho pensato anche io però non si sa mai :) Non ci sono altri esercizi o esempi di procedure ricorsive?? E poi un'altra cosa...Si può usare la pseudoistruzione 'move' o va sostituita con qualcos'altro??


Posted by uLori on 04-01-2012 17:16:

altri esercizi non sò, ma qui non c'è nessuno che ha già fatto questo esame e sà dirci gli esercizi che sono stati dati??

l'istruzione move si la puoi usare anche perchè senza non saprei come fare.. :)


Posted by pintu on 04-01-2012 18:35:

eh infatti! :)

si comunque davvero... già il sito non è che dica molto..delle info su data e modalità d'esame non diciamo niente che è meglio! Possibile che su 775 visualizzazioni nessun'altro abbia già sostenuto questo esame?? :(


Posted by pintu on 07-01-2012 17:03:

Sto provando a fare l'esercizio che ha postato uLori..

F(n) = n - M(F(n - 1))
M(n) = n - F(M(n - 1))

con F(0) = 1 e M(0) = 0

La funzione F dovrebbe essere cosi..

F: addi $sp $sp -8 #alloco spazio per variabil
sw $a0 0($sp) #salvo il valore di n
sw $ra 4($sp) # salvo il return address
beq $a0 $zero fineF #se n=0 salto a fineF
subi $a0 $a0 1 # n = n -1
jal F #chiamo di nuovo F
add $a0 $zero $v0 #metto il risultato di F in $a0 per passarlo come parametro alla funzione M
jal M
.
.
.


fineF: addi $v0 $zero 1
lw $a0 0($sp)
lw $ra 4($sp)
addi $sp $sp 8
jr $ra

Dopo la jal M mi sono perso :( qualcuno riesce ad aiutarmi??


Posted by uLori on 08-01-2012 16:28:

secondo me prima di tutto ti conviene fare i casi base

F: bne $a0, $zero, calc_f
li $v0, 1
jr $ra

calc_f: addi $sp, $sp, -8
sw $ra, 4($sp)
sw $a0, 0($sp)
addi $a0,$a0, -1
jal F
move $a0, $v0
jal M
lw $a0, 0($sp)
sub $v0,$a0, $v0
lw $ra, 4($sp)
addi $sp,$sp, 8
jr $ra

e poi per M è tutto uguale...


ma allora si sà quando è l'esame?


Posted by pintu on 08-01-2012 21:04:

Grazie per la risposta! Comunque ancora niente..ho mandato una mail a Dantona (venerdi sera) ma non ha ancora risposto..spero in domani!


Posted by aPiso on 08-01-2012 21:44:

le print ti può servire sapere cosa fanno perchè nell'esercizio "capire il codice" ci sono spesso e anche se ci arrivi lo stesso sapere prima cosa fanno aiuta :P

Dantona qualche volta non risponde...io l'ho sempre braccato in Comelico!!


Posted by pintu on 09-01-2012 01:41:

Ma non devo solo preoccuparmi della funzione ricorsiva?? Questo esame sta diventando sempre di più un mistero o.O


Posted by pintu on 09-01-2012 12:27:

Mi sorge un dubbio, forse stupido.. Suppongo di avere come input n = 2, quindi chiamo per la prima volta la fuzione F. Eseguo la branch che mi fa saltare a calc_f, alloco lo spazio sullo stack e salvo $a0 ( = 2) e $ra ( che contiene l'indirizzo dell'istruzione successiva alla chiamata di F), e decremento $a0 di 1 (quindi $a0 = 1).
A questo punto richiamo di nuovo F, con input $a0 = 1 giusto? La branch mi fa saltare nuovamente a calc_f, alloco nuovamente lo spazio, salvo $a0 e $ra ecc..
La mia domanda è... Questo stack che sto allocando, non centra niente con la prima chiamata che avevo fatto ma si riferisce solamente a QUESTA chiamata di F giusto? E inoltre..il valore di $a0 che ora è 1...vale solo in QUESTA chiamata?


Posted by gab217 on 12-01-2012 14:51:

Ancora niente sulla data dell'esame ?


Posted by pintu on 12-01-2012 15:15:

No! Dantona ha bellamente ignorato la mia mail e rischio di dover pure rifare l'orale!


Posted by gab217 on 14-01-2012 11:51:

Sono uscite le date.


Posted by uLori on 14-01-2012 14:36:

ma sul sifa non c'è ancora l'appello per iscriversi...


Posted by gab217 on 14-01-2012 14:44:

Originally posted by uLori
ma sul sifa non c'è ancora l'appello per iscriversi...


No, non lo vedo per ora ci sono solo le date


Posted by gab217 on 14-01-2012 14:57:

Originally posted by gab217
No, non lo vedo per ora ci sono solo le date


Qualcuno ha qualche es da postare in preparazione?
Grazie.


Posted by uLori on 27-01-2012 08:24:

ecco un bel esercizio:

E(n, k) = (n − k + 1)E(n − 1, k − 1) + kE(n − 1, k) ,
con condizioni iniziali
(2) E(n, 1) = 1 , e
(3) E(n, k) = 0 , per k > n .
Per esempio,
E(3, 2) = 2E(2, 1) + 2E(2, 2) = 2 + 2E(1, 1) + 4E(1, 2) = 2 + 2 + 0 = 4

come si cestiscono 2 dati? uno è in $a0 e l'altro in $a1 ?


Posted by gab217 on 27-01-2012 08:48:

Qst era un vecchio progetto che io avevo risolto chiamando la procedura e passando n e k rispettivamente in a0 e a1


Posted by uLori on 27-01-2012 10:14:

ok grazie ;)


Posted by gab217 on 27-01-2012 13:52:

Originally posted by uLori
ok grazie ;)


ulori scusa una cosa tu hai fatto tutti i vecchi progetti?


Posted by uLori on 27-01-2012 15:55:

fatti no, ho preso solo le procedure ricorsive per esercitarmi per il laboratorio :)


Posted by gab217 on 27-01-2012 16:11:

Originally posted by uLori
fatti no, ho preso solo le procedure ricorsive per esercitarmi per il laboratorio :)


Ma hai guardato solo quelli più recenti?


Posted by uLori on 27-01-2012 17:04:

quelli di codara, se vai troppo indietro ho visto che cambia il prof, c'era un certo Marra e le procedure erano decisamente più difficili


Posted by gab217 on 27-01-2012 17:13:

Originally posted by uLori
quelli di codara, se vai troppo indietro ho visto che cambia il prof, c'era un certo Marra e le procedure erano decisamente più difficili


Si esatto volevo proprio sapere questo.


Posted by uLori on 27-01-2012 17:38:

io sono stato da codara a dicembre e gli ho fatto vedere alcuni esercizi che usavo per prepararmi e gli ho chiesto se anche i prossimi esami saranno simili e lui mi ha detto di si.

quindi se sappiamo fare i suoi ultimi proetti come q-numbers per esempio dovremmo essere a posto :)

una domanda. sai se esiste un comando per fare la moltiplicazione e la divisione immediata con un numero come è per la addi?
oppure và messo il numero in un registro temporaneo e poi fare la mult o div ?


Posted by gab217 on 27-01-2012 21:38:

Che io sappia no per entrambe serve sempre un registro temporaneo


Posted by gab217 on 28-01-2012 11:35:

Originally posted by uLori
quelli di codara, se vai troppo indietro ho visto che cambia il prof, c'era un certo Marra e le procedure erano decisamente più difficili


Per caso hai provato anche altre procedure ricorsive al di fuori del sito del prof?


Posted by uLori on 28-01-2012 12:14:

no solo quelle del prof, spero l'esame segua sempre la stessa linea di procedure e di problemi non ce ne saranno


Posted by gab217 on 28-01-2012 13:12:

Originally posted by uLori
no solo quelle del prof, spero l'esame segua sempre la stessa linea di procedure e di problemi non ce ne saranno


Ok, ti chiedo anche un'altra cosa all'interno della procedura segui una logica nello scegliere trai registri $s0 e $t0?


Posted by uLori on 28-01-2012 13:28:

di registri $s non ne ho mai usati.
perchè quando preparo lo stack pointer lascio sempre uno spazio in più per salvare li i risultati parziali, che poi quando mi servono richiamo mettendoli in $t0 al momento di fare il conto


Posted by gab217 on 28-01-2012 13:37:

Originally posted by uLori
di registri $s non ne ho mai usati.
perchè quando preparo lo stack pointer lascio sempre uno spazio in più per salvare li i risultati parziali, che poi quando mi servono richiamo mettendoli in $t0 al momento di fare il conto


Ti ringrazio per il chiarimento. Perchè in alcuni es già risolti vedevo che venivano usati anche i registri $s* ma pure io solitamente utilizzo solo quelli temporanei


Posted by pintu on 29-01-2012 13:14:

L'esame è domani giusto? Chi lo sostiene può postare poi il testo dell'esercizio? Grazie :)


Posted by uLori on 01-02-2012 09:46:

testo dell esame f49 del 30/1/2012:

P(n,h)=P(n-1,h)+P(n-h-1,h) se n>h+1;
P(n.h)=n+1,altrimenti.


Posted by gab217 on 02-02-2012 14:14:

Originally posted by uLori
testo dell esame f49 del 30/1/2012:

P(n,h)=P(n-1,h)+P(n-h-1,h) se n>h+1;
P(n.h)=n+1,altrimenti.


Ma per verbalizzare, qualcuno sa come funziona?


Posted by uLori on 02-02-2012 14:40:

Originally posted by gab217
Ma per verbalizzare, qualcuno sa come funziona?


piacerebbe saperlo pure a me, io ho scritto una mail al prof d'antona l'altro giorno ma non mi ha ancora risposto...aspettiamo...


Posted by gab217 on 02-02-2012 14:54:

Originally posted by uLori
piacerebbe saperlo pure a me, io ho scritto una mail al prof d'antona l'altro giorno ma non mi ha ancora risposto...aspettiamo...


Siamo in due, ho scritto pure io al prof.


Posted by uLori on 03-02-2012 08:46:

ha risposto il prof? a me no... uff


Posted by gab217 on 03-02-2012 09:41:

Originally posted by uLori
ha risposto il prof? a me no... uff


No ancora no, appena risponde ti aggiorno per ora no.


Posted by gab217 on 04-02-2012 10:46:

Originally posted by uLori
ha risposto il prof? a me no... uff


uLori a te per caso ha risposto? A me ancora niente.


Posted by uLori on 04-02-2012 12:42:

no niente...prima ho scritto al prof codara..vediamo se almeno lui dice qualcosa


Posted by uLori on 04-02-2012 12:44:

codara mi ha risposto subito, mi ha detto di di parlare con d'antona che prima o poi mi risponderà, o di passare nel suo ufficio lunedì o mercoledì pomeriggio che forse c'è..


Posted by gab217 on 04-02-2012 13:04:

Originally posted by uLori
no niente...prima ho scritto al prof codara..vediamo se almeno lui dice qualcosa

Nel caso fammi sapere.
Grazie


Posted by uLori on 06-02-2012 12:56:

finalmente ha risposto, mi ha detto di passare mercoledì o giovedì pomeriggio senza dirmi un orario preciso..


Posted by gab217 on 06-02-2012 14:47:

Originally posted by uLori
finalmente ha risposto, mi ha detto di passare mercoledì o giovedì pomeriggio senza dirmi un orario preciso..


Si confermo ha risposto anche a me.


Posted by pintu on 23-02-2012 10:30:

Ragazzi com'è andato poi l'esame?


Posted by uLori on 23-02-2012 10:40:

Originally posted by uLori
testo dell esame f49 del 30/1/2012:

P(n,h)=P(n-1,h)+P(n-h-1,h) se n>h+1;
P(n.h)=n+1,altrimenti.


questo è il testo dell esame...io ho preso 26 e comunque in generale è andato bene solo 1 bocciato


Posted by pintu on 23-02-2012 11:22:

grazie mille per averlo postato uLori :) io non ho potuto darlo perchè sono dovuto stare dietro ad algoritmi.. alla fine la modalità era quella che si diceva? Hai una casella di testo in cui scrivere il codice, senza compilatori ecc?


Posted by pintu on 23-02-2012 11:22:

PS: scusami 26 è il voto di lab o la media con il voto di orale?


Posted by uLori on 23-02-2012 11:23:

esatto nessun compilatore..si scrive del normalissimo testo come se si facesse su carta :)


Posted by uLori on 23-02-2012 11:24:

ho preso 26 sia al lab che all'orale...la media vien facile ;)


Posted by pintu on 23-02-2012 11:26:

Grazie delle info ;) spero di farcela l'esame è lunedi e inizio ora a prepararmi! Oggi provo a fare l'esercizio dell'appello poi magari lo posto e approfitto della tua pazienza per una correzione rapida :)


Posted by uLori on 23-02-2012 11:27:

ok non c'è problema...comuqne se leggi indietro avevo fatto un post con i punti base da sapere..


Posted by uLori on 23-02-2012 11:29:

Originally posted by uLori
la risoluzione del esercizio in assembly c'è sul sito del prof..comunque ora sto iniziando a capire e fidati non è poi così difficile :)

le cose importanti sono:
-all inizio preparare lo stack pointer con il numero di spazi in base alle variabili che userai + quelle che ti servono sempre come $ra e $a0

e fai così: addi $sp, $sp, -12 (-12 lasc lo spazio per 3 dati)
sw $ra , 8($sp) salvi il registro di ritorno
sw $a0, 4($sp) salvi il dato $a0 che è il dato passato dal esercizio di solito n

-poi devi ricordati che quando fai una Jal, una chiamata ad una funzione, questa prende in ingresso sempre il dato salvato in $a0 e ti dà il risultato in uscita sempre nel registro $v0

-poi alla fine devi sempre caricare il registro di ritorno
lw $ra, 8($sp) lo carichi dalla posizione 8 xkè era li che lo avevi salvato

poi rigeneri lo stack pointer
addi $sp,$sp,12
fai un salto al registro di ritorno
JR $ra

e l'esericizio finisce :)


Posted by pintu on 23-02-2012 11:29:

sisi avevo letto quando mi stavo preparando per gennaio e mi è stato utilissimo per capire il funzionamento base.. ora sono un pò arrugginito devo rimettermi a pari per lunedi :)


Posted by pintu on 24-02-2012 10:17:

Ho provato a fare questo esercizio:

P(n, h) = P(n-1, h) + P(n-h-1, h) se n > h+1
P(n, h) = n+1 altrimenti

Provo a postare il codice anche se so per certo che è sbagliato, e ho un paio di dubbi da sciogliere!

P: addi $sp, $sp, -12 #spazio per 3 variabili
sw $ra, 0($sp) #salvo il registro di ritorno
sw $a0, 4($sp) #$a0 = n
sw $a1, 8($sp) #$a1 = h

addi $s0, $a1, 1 #$s0 = h + 1
bgt $a0, $s0, calc_P #se n > h+1 salta a calc_P
addi $a0, $a0, 1 # n = n + 1
lw $v0, $a0 # risultato = n + 1
jr $ra

calc_P: subi $a0, $a0, 1 #n = n-1
jal P #chiamo P(n-1, h)
sub $a0, $a0, $a1 #n = n - h
subi $a0, $a0, 1 #n = n -1
jal P #chiamo P(n-h-1, h)
lw $a0, 4($sp) #ripristino reg $a0
lw $ra, 0($sp) #ripristino return address
lw $a1, 8($sp) #ripristino reg $a1
addi $sp, $sp, 12 #ripristino stack
jr $ra



Dubbio (1) : Dato che la funzione ha due parametri n, h è giusto passarli come ho fatto io tramite i registri $a0, $a1?

Dubbio (2) : Prima di calcolare la funzione devo eseguire il test per vedere se n > h + 1. Va bene mettere il valore di h+1 nel registro $s0? Oppure potevo incrementare direttamente $a1 ( che contiene h) ?

Dubbio (3) : Se la mia funzione (cosi come l'ho scritta) mette sempre il risultato in $v0 non potrò mai avere il risultato giusto poichè devo sommare il risultato di P(n-1, h) a quello di P(n-h-1, h). Come posso fare?


Posted by uLori on 24-02-2012 10:39:

1) si n verrà salvato in $a0 e h in $a1 però lo stack lo devi preparare da 16 e non 12 perchè devi lasciare un altro spazio proprio per salvare i risultati parziali che come nel punto 3 dici di non saper dove mettere

2) io ho incrementato $a1 per il test. i registra $s non li ho mai usati per nessun esercizio

3) come detto prima, per salvare i risultati parziali devi mettere il contenuto di $v0 nello stack così: sw $v0, 0($sp) in questo caso è zero perchè l'ultimo spazio libero per esempio..poi dipende da dove salvi i vari $a0,$ra ecc..

poi per ricaricare quel valore per fare il conto usi lw $t0, 0($sp)

vai a ricaricarlo in una variabile temporanea $t0 recuperandola dallo spazio 0 dello stack


Posted by pintu on 24-02-2012 10:50:

Ma devo caricare $v0 nello stack al'inizio della procedura quando carico gli altri registri, oppure solo quando ho il risultato parziale? Madò che confusione :(


Posted by pintu on 24-02-2012 10:57:

Una cosa..se io per eseguire il test incremento direttamente $a1 ($a1 = h), quando poi vado a chiamare P(n-1, h) , h non avrà più il suo valore originario ma sarà h = h+1 no? quindi in teoria è sbagliato..


Posted by pintu on 24-02-2012 11:23:

Ho fatto due modifiche ma non sono ancora sicuro!

P(n, h) = P(n-1, h) + P(n-h-1, h) se n > h+1
P(n, h) = n+1 altrimenti


P: addi $sp, $sp, -16 #spazio per 3 variabili
sw $ra, 0($sp) #salvo il registro di ritorno
sw $a0, 4($sp) #$a0 = n
sw $a1, 8($sp) #$a1 = h
sw $v0, 12($sp) #salvo reg $v0 <------

addi $a1, $a1, 1 #$s0 = h + 1 <--------
bgt $a0, $a1, calc_P #se n > h+1 salta a calc_P
addi $a0, $a0, 1 # n = n + 1
move $v0, $a0 #metto n+1 in $v0 <------------
jr $ra

calc_P: subi $a0, $a0, 1 #n = n-1
jal P #chiamo P(n-1, h)
lw $t0, 12($sp) #risultato parziale in $t0 <-----------------
sub $a0, $a0, $a1 #n = n - h
subi $a0, $a0, 1 #n = n -1
jal P #chiamo P(n-h-1, h)
add $v0, $v0, $t0 #sommo i risultati parziali <--------------
lw $a0, 4($sp) #ripristino reg $a0
lw $ra, 0($sp) #ripristino return address
lw $a1, 8($sp) #ripristino reg $a1
lw $v0, 12($sp) #ripristino reg $v0 <-----------------
addi $sp, $sp, 16 #ripristino stack
jr $ra


Posted by uLori on 24-02-2012 12:18:

no $v0 è un registro non devi preparare lo stack salvandolo xkè all inizio è vuoto..

fai così
addi $sp, $sp, -16 #spazio per i 2 val passati, 1 per i ris temp, e 1 per il reg di ritorno
sw $ra, 0($sp) #salvo il registro di ritorno
sw $a0, 4($sp) #$a0 = n
sw $a1, 8($sp) #$a1 = h

lasi la posizione 12 dello stack pointer per salvare il valore contenuto in $v0 successivamente dopo che avrai fatto i calcoli e $v0 conterrà qualcosa


Posted by pintu on 24-02-2012 13:54:

ah ok ho capito grazie, sempre gentilissimo! :) per quanto rigurada $t0 invece posso usarlo tranquillamente senza doverlo mettere nello stack perchè è un registro temporaneo giusto?


Posted by uLori on 24-02-2012 14:40:

si esatto $t0 usalo come vuoi, ma ricorda che dura solo fino alla prima jal poi perde il valore...quindi ti conviene caricare un valore in $t0 per poi usarlo subito per un calcolo..


Posted by pintu on 24-02-2012 14:54:

quando o se hai tempo puoi postare la tua soluzione? o comunque come lo risolveresti?


Posted by uLori on 27-02-2012 11:40:

io l'ho risolto così, non è prefetto perchè se no avrei preso 30 ma comunque almeno la base c'è :

P: addi $a1,$a1,1 #h+1
blt $a0,$a1,fine #salto se n<h a fine

addi $sp,$sp,-16
sw $ra,12($sp)
sw $a0,8($sp)
sw $a1,4($sp)

addi $a0,$a0,-1 #n-1
jal P
sw $v0,0($sp) #salvo il risultato nello stack
lw $a0,8($sp) #ricarico n originale
lw $a1,4($sp) #ricarico h
addi $a1,$a1,-1 #h-1
sub $a0,$a0,$a1 #n-h
lw $a1,4($sp) #ricarico h originale
jal P
lw $t0,4($sp) #carico il ris della prima parte di procedura
add $v0,$v0,$t0 #effettuo la somma conclusiva
lw $ra,12($sp)
addi $sp,$sp,16
jr $ra

fine: addi $a0,$a0,1 #n+1
jr $ra


Posted by pintu on 27-02-2012 18:54:

Sperando sia utile a qualcuno, posto il testo dell'esame di oggi 27/02:

M(n) = 3*M(n-1) - 2*M(n-2) se n > 3
M(n) = 2^(n+4) - 20 altrimenti


All times are GMT. The time now is 08:16.
Show all 100 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.