instrukcia CALL
Moderátor: Moderátoři
instrukcia CALL
Zdravim, kde sa uklada navratova adresa pri pouzity instrukcie CALL? Mam v programe skok na podprogram instrukciu CALL ale v tom podprograme je aj instrukcia GOTO START pri splneni urcitej podmienky a ja mam problem, ze ked urobim to goto start tak program zacne blbnut, aky register treba v ynulovat aby to v programe bolo po instrukcii GOTO START ako keby tam neskocil z podprogramu? dufam ze ste ma pochpili, dakujeem
Přesněji intrukce CALL uloží hodnotu z PC (Programového čítače) na vrchol zásobníku (Stack). Což znamená že bys musel po CALLnutí načíst hodnotu z vrcholu zásobníku (u x86 intrukce POP), ale silně pochybuju že taková instrukce je u jednočipů a i kdyby by byla tak to neni rozhodně dobrej nápad, se takhle šťourat v zásobníku
A vlastně nechápu k čemu ti to je? :-O To jako nemůžeš použít nějakou instrukci nepodmíněnýho skoku (např. JMP)? :-O
![Smile :)](./images/smilies/icon_smile.gif)
picka nemaju JMP ale myslim ze je to GOTO nemozem to pouzit lebo na toto miest sa odvolavam z roznych miest a pri nesplneni podmienky sa vraciam spat odlkiaľ som sa odvolal, ak sa splni podmienka tak pride instrukcia goto v tom podprograme a vtedy ten program zblbne. Ta podmienka je asi tak na 10 riadkov a ak by som ju ma dat namiesto call , to call je pouzite asi 25 krat a taketo podobne podprogramy su 20 na ktore sa odvolavam tiez asi tak 25 krat na kazdy,tak mi to nevlezie do pamate PICka
Asi to nechápumikollar píše:picka nemaju JMP ale myslim ze je to GOTO nemozem to pouzit lebo na toto miest sa odvolavam z roznych miest a pri nesplneni podmienky sa vraciam spat odlkiaľ som sa odvolal, ak sa splni podmienka tak pride instrukcia goto v tom podprograme a vtedy ten program zblbne. Ta podmienka je asi tak na 10 riadkov a ak by som ju ma dat namiesto call , to call je pouzite asi 25 krat a taketo podobne podprogramy su 20 na ktore sa odvolavam tiez asi tak 25 krat na kazdy,tak mi to nevlezie do pamate PICka
![Smile :-)](./images/smilies/icon_smile.gif)
to nic, mna malo kto chape
, mam podprogramy je ich 20 a kazdy ma asi tak 10 riadkov a v kazdom je to GOTO start, keby som nepouzil istrukciu CALL tak by som ten podprogram musel pisat vsade kde ho potrebujem. Ale potom by sa mi nezmestil cely program do pamäte PIC. Nejde Mi do hlavy ze preco to zblbne ked z podprogramu skocim funkciou GOTO preč ale potom už nedavam funkciu RETURN, tak ten program si lieta ako chce
![Very Happy :D](./images/smilies/icon_biggrin.gif)
RE
takže pokud jsem to pochopil správnì tak by ti mìlo pomoci tohle
dejme tomu že hlavní smyèka je tohle
w: call toto; zavoláme podmínku
nop
nop
nop
nop
nop
goto w
start:
nop ;zde se spustí podprogram pro nesplnìnou podmínku
nop
nop
nop
nop
retlw 0 ; a jakmile se vykoná vrátí se zpìt do hlavní smyèky za
instrukci CALL toto
toto: nop
nop
nop
pagesel start; pokud není splnìna tìmato dvìma øádkama
goto start ;provedeme skok na návìští start
return ;pokud je splnìna vrátíme se odkud jsme pøišli
dejme tomu že hlavní smyèka je tohle
w: call toto; zavoláme podmínku
nop
nop
nop
nop
nop
goto w
start:
nop ;zde se spustí podprogram pro nesplnìnou podmínku
nop
nop
nop
nop
retlw 0 ; a jakmile se vykoná vrátí se zpìt do hlavní smyèky za
instrukci CALL toto
toto: nop
nop
nop
pagesel start; pokud není splnìna tìmato dvìma øádkama
goto start ;provedeme skok na návìští start
return ;pokud je splnìna vrátíme se odkud jsme pøišli