Stránka 1 z 1
instrukcia CALL
Napsal: 12 led 2007, 19:49
od mikollar
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
Napsal: 12 led 2007, 20:08
od meno
CALL uloží návratovú adresu z registru PC(Program counter)+1 do registru Stack
Napsal: 12 led 2007, 20:10
od mikollar
a keby ze tento register vynulujem tak potom budem v programe ako keby som nepouzil call?
Napsal: 12 led 2007, 20:13
od meno
mikollar píše:a keby ze tento register vynulujem tak potom budem v programe ako keby som nepouzil call?
To prsene neviem ale asi ak ho vynuluješ tak bude návratový adresa začiatok programu.

Napsal: 12 led 2007, 20:14
od mikollar
dikes skusim to a dam vediet
Napsal: 12 led 2007, 20:49
od Mica
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
Napsal: 12 led 2007, 20:50
od Mica
meno píše:CALL uloží návratovú adresu z registru PC(Program counter)+1 do registru Stack
Stack neni registr, ale celej segment

Napsal: 12 led 2007, 21:57
od mikollar
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
Napsal: 12 led 2007, 23:37
od Mica
mikollar 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
Asi to nechápu

Napsal: 13 led 2007, 08:39
od mikollar
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
RE
Napsal: 13 led 2007, 10:14
od nop
Když Vynuluješ registry PCL a PCLATH tak se program vrátí ůplně na začátek...
Napsal: 13 led 2007, 11:05
od mikollar
dik to sa zijde pre buducnost, len to START nie je zaciatok programu lebo pred zaciatkom je definovanie portov a stav portov sa mi nesmie zmenit pocas programu kym to nezadam priamo v programe
RE
Napsal: 13 led 2007, 12:10
od nop
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
Napsal: 13 led 2007, 12:13
od mikollar
dikes pomohlo a veelmi dakujeem