View Full Version : Progetto Assembly Ricorsivo
matrixola10
30-10-2005, 11:32
Ciao a tutti, sto facendo un progetto assembly, sono in crisi perchè la ricorsione mi fa impazzire :muro: qualcuno mi da una mano con questa formula?
D(n)=(n-1)(D(n-1)+D(n-2)
grazie mille
cdimauro
31-10-2005, 10:13
Assembly x86? 8086 o 80386+?
O altro?
matrixola10
31-10-2005, 10:15
Assembly x86? 8086 o 80386+?
O altro?
Mips!!!
bottomap
31-10-2005, 10:30
Ciao,
Qual'è esattamente il problema? La ricorsione in sé, la formula in particolare o la sua implementazione in asm?
La struttura (pesudocodice poco ottimizzato 386+ di quello che chiedi) dovrebbe essere all'incirca:
diciamo che in eax hai n, immagino che la ricorsione si arresti per n==2, il risultato sarà sempre in eax. D(1) e D(0) non so esattamente quanto possano valere, in caso il codice dovrà essere leggermente modificato... quello che posto ritorna 0 in questi due casi. Ovviamente non faccio niente ai registri (push/pop/impostazione di uno stack frame e simili), in caso dovrai provvedere tu...
ricors_proc
mov ebx,eax //Salvo n
cmp eax,2
jle tornaZero
dec eax //prendo n-1
call ricors_proc
mov ecx,eax //salvo D(n-1)
mov eax,ebx //Riprendo n
sub eax,2 //o due dec
call ricors_proc
add ecx,eax //in ecx ho D(n-1)+D(n-2)
xchg eax,ecx //scambio ecx con eax
dec ebx //riprendo n-1 (ebx non mi serve più)
mul ebx //moltiplico eax*ebx (n-1)*(D(n-1)+D(n-2))
jmp esci
tornaZero:
xor eax,eax
esci:
ret
ENDP
Ovviamente trasformarlo in asm 8086 non è difficile (occhio alla moltiplicazione, comunque), trasformarlo in MIPS o altri asm può richiedere un po' di lavoro in più visto che in asm x86 il primo operando è la destinazione dell'operazione e che i nomi dei registri sono diversi...
Ciaociao :)
matrixola10
31-10-2005, 12:18
Ciao,
Qual'è esattamente il problema? La ricorsione in sé, la formula in particolare o la sua implementazione in asm?
La struttura[...]diversi...
Ciaociao :)
Grazie mille già così ho un'idea più chiara
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.