![](//www.dsy.it/forum/images/space.gif) |
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
pintu |
Esercizio ricorsione |
25-02-2012 14:28 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
pintu |
.illuminato.
Registered: Jul 2010
Posts: 248 (0.05 al dì)
Location: Novara
Corso: informatica
Anno:
Time Online: 2 Days, 0:46:30 [...]
Status: Offline
Edit | Report | IP: Logged |
Esercizio ricorsione
é un vecchio esercizio trovato qui su dsy. Ho provato a risolverlo. Può andare??
F(n) = n se n < 2
F(n) = F(n/2) * F(n/3) altrimenti
F: bge $a0, 2, funct # se n >= 2 salta a funct
move $v0, $a0 #se n<2 , $v0 = n (ritorna n)
jr $ra
funct: addi $sp $sp -12
sw $ra, 0($sp)
sw $a0, 4($sp)
div $a0, $a0, 2 #n = n/2
jal F #richiamo F con parametro n/2
sw $v0, 8($sp) #metto nello stack il risultato parziale
div $a0, $a0, 3 #n = n/3 (qui $a0 contiene sempre n oppure ora contiene n/2?)
jal F #richiamo F con parametro n/3
lw $t0, 8($sp) #recupero il risultato parziale dallo stack
mul $v0, $v0, $t0
lw $ra, 0($sp)
lw $a0, 4($sp)
lw $v0, 8($sp)
addi $sp, $sp, 12
jr $ra
|
25-02-2012 14:28 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
uLori |
ciao, allora è abbastanza giusto secondo me, ma c ... |
27-02-2012 11:24 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
uLori |
.illuminato.
![](avatar.php?userid=12672&dateline=1368021021)
Registered: Feb 2010
Posts: 159 (0.03 al dì)
Location: Milano
Corso: Informatica
Anno: IV
Time Online: 15:19:53 [...]
Status: Offline
Edit | Report | IP: Logged |
ciao, allora è abbastanza giusto secondo me, ma ci sn degli errori:
funct: addi $sp $sp -12
sw $ra, 0($sp)
sw $a0, 4($sp)
div $a0, $a0, 2 #n = n/2 il risultato della div finisce in mflo, da li lo devi spostare..e la div non puoi farla così la devi fare tra 2 registri, quindi devi mettere il valore 2 in un registro e poi dividere..
jal F #richiamo F con parametro n/2
sw $v0, 8($sp) #metto nello stack il risultato parziale
qui devi ricaricare nuovamente $a0 con il valore originale se no ti utilizzerà quello modificato precedentemente e tutto l'esercizio sballa
lw $a0, 4($sp)
div $a0, $a0, 3 #n = n/3 (qui $a0 contiene sempre n oppure ora contiene n/2?)
il risultato di una div o di una mult vanno a finire nel registro mflo..da li lo devi spostare facendo mflo $.. e il registro dove vuoi metterlo
jal F #richiamo F con parametro n/3
lw $t0, 8($sp) #recupero il risultato parziale dallo stack
mul $v0, $v0, $t0 non è mul ma mult e il risultato si trova in mflo..quindi non va scritta così, ma mult $v0,$t0
lw $ra, 0($sp)
lw $a0, 4($sp) #non serve che ricarichi $a0 tanto ora non ti serve piu
lw $v0, 8($sp) #questa non ha senso..
addi $sp, $sp, 12
jr $ra
Last edited by uLori on 27-02-2012 at 11:27
|
27-02-2012 11:24 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
pintu |
grazie uLori ;) comunque ho fatto oggi l'esame dov ... |
27-02-2012 18:52 |
|
![Contract Post Collapse](//www.dsy.it/forum/images/collapse.gif) |
pintu |
.illuminato.
Registered: Jul 2010
Posts: 248 (0.05 al dì)
Location: Novara
Corso: informatica
Anno:
Time Online: 2 Days, 0:46:30 [...]
Status: Offline
Edit | Report | IP: Logged |
grazie uLori comunque ho fatto oggi l'esame dovrebbe essere andato bene attendo i risultati!
|
27-02-2012 18:52 |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
![](//www.dsy.it/forum/images/space.gif) |
All times are GMT. The time now is 05:40. |
|
|
![Post New Thread](images/newthread.gif) |
|
![Post A Reply](images/reply.gif) |
|
|
| ![](//www.dsy.it/forum/images/space.gif) |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|