Rekurze – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Rekurze – Assembler – Fórum – Programujte.comRekurze – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
johny
~ Anonymní uživatel
78 příspěvků
18. 3. 2013   #1
-
0
-

Ahoj,

mám prosbu nemůžu přijít na výpočet rekurzivně hodnotu n-tého fibonacciho čísla.

 Toto je můj špatný dosavadní kód:

unsigned int fib(unsigned short n) {
	_asm {
		mov ecx,dword ptr n;
		cmp ecx,0;
		je return0;
		cmp ecx,1;
		je return1;

		dec ecx;
		push ebx;
		push ecx;
		call fib;
		pop ecx;
		pop ebx;

		dec ecx;
		push ebx;
		push ecx;
		call fib;
		pop ecx;
		pop ebx;
		
		mov [ebp + 12],ebx;
		mov eax,ebx;
		jmp konec;
return0:
		jmp konec;
return1:
		add ebx,1;
konec:
	}
}

Nenapadá mě jak mám předávat výsledky :-/

Byl bych vděčný za nějaký vysvětlení.

Děkuji :-)

Nahlásit jako SPAM
IP: 46.33.117.–
Reklama
Reklama
illioner0
Stálý člen
18. 3. 2013   #2
-
0
-

Nerozumim proc predavas dva parametry do funkce fib()
ta ti prebira jen short n, takze jeden push pred call fib smaz (ten s ebx)
Vysledek muzes predavat skrz eax. Jen tim ze je nastavene (nemusi se pushovat nic).

Po prvnim volani call fib() pak z eax das do EDX napriklad. (mov edx,eax)
Pak druhy volani prictes z EAX.
Tozn.  ADD  EAX,EDX
V eax se drzi vysledek.
U porovnavani vstupu na zacatku funkce tzn. je 0,1 v ecx? -> naplnis EAX 0 nebo 1 a tvuj spravnej
naslednej return ponechas. Jinak v opacnem pripade pro vyssi ecx dojde k rekurzi....
Instrukce Dec ecx jsou spravne.

smaz:
mov [ebp + 12],ebx;
mov eax,ebx;
add ebx,1

Ebx nepotrebujes ani zadne pametove misto, pokud nepredavas pointerem
jazyk C tusim ocekava klasicky vystupni int v EAX.
takze  int vysledek=fib(100);  si do vysledek ulozi registr eax.

Nahlásit jako SPAM
IP: 90.178.107.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
illioner0
Stálý člen
18. 3. 2013   #3
-
0
-

jo doslo mi ze si prepisujes registr ECX uvnitř ty funkce takze zasobnik na tohle používat, to je ok.

Nahlásit jako SPAM
IP: 90.178.107.–
Nechápu softwarové firmy, ktere utrácejí za čim dál těžkopádnější DRM ochranu!! Vidět kolem snahu o free2play model je jako příjemné připomenutí časů shareware (jen ten Microsoft stále nic nepochopil)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 242 hostů

Podobná vlákna

Rekurze — založil CML

Rekurze — založil NevimCoSemVyplnit

Použití rekurze — založil ST33L

Nalezení rekurze — založil sh00ter

Rekurze SPĚCHÁ — založil Hanmir1

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý