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