.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)
-- Esercizio ricorsione (http://www.dsy.it/forum/showthread.php?threadid=42737)


Posted by pintu on 25-02-2012 14:28:

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


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

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


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

grazie uLori ;) comunque ho fatto oggi l'esame dovrebbe essere andato bene attendo i risultati!


All times are GMT. The time now is 17:14.
Show all 3 posts from this thread on one page

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