|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2005
Messaggi: 3
|
Progetto Assembly Ricorsivo
Ciao a tutti, sto facendo un progetto assembly, sono in crisi perchè la ricorsione mi fa impazzire
![]() D(n)=(n-1)(D(n-1)+D(n-2) grazie mille |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Assembly x86? 8086 o 80386+?
O altro?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#3 | |
Junior Member
Iscritto dal: Oct 2005
Messaggi: 3
|
Quote:
|
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Feb 2005
Città: Prato
Messaggi: 149
|
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 ![]()
__________________
Venite a visitarci qui:http://www.bottomap.com Bottomap is a proud Masterdrive.it moderator |
![]() |
![]() |
![]() |
#5 | |
Junior Member
Iscritto dal: Oct 2005
Messaggi: 3
|
Quote:
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:40.