instrukcia CALL

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

instrukcia CALL

#1 Příspěvek 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
Uživatelský avatar
meno
Příspěvky: 930
Registrován: 04 říj 2004, 00:00
Bydliště: Czechoslovakia

#2 Příspěvek od meno »

CALL uloží návratovú adresu z registru PC(Program counter)+1 do registru Stack
:D :D :D
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#3 Příspěvek od mikollar »

a keby ze tento register vynulujem tak potom budem v programe ako keby som nepouzil call?
Uživatelský avatar
meno
Příspěvky: 930
Registrován: 04 říj 2004, 00:00
Bydliště: Czechoslovakia

#4 Příspěvek 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.
:?: :?: :?:
:D :D :D
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#5 Příspěvek od mikollar »

dikes skusim to a dam vediet
Uživatelský avatar
Mica
Příspěvky: 163
Registrován: 21 říj 2005, 00:00
Bydliště: Praha
Kontaktovat uživatele:

#6 Příspěvek 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
Uživatelský avatar
Mica
Příspěvky: 163
Registrován: 21 říj 2005, 00:00
Bydliště: Praha
Kontaktovat uživatele:

#7 Příspěvek 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 :)
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#8 Příspěvek 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
Uživatelský avatar
Mica
Příspěvky: 163
Registrován: 21 říj 2005, 00:00
Bydliště: Praha
Kontaktovat uživatele:

#9 Příspěvek 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 :-)
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#10 Příspěvek od mikollar »

to nic, mna malo kto chape :D , 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
nop

RE

#11 Příspěvek od nop »

Když Vynuluješ registry PCL a PCLATH tak se program vrátí ůplně na začátek...
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#12 Příspěvek 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
nop

RE

#13 Příspěvek 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
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#14 Příspěvek od mikollar »

dikes pomohlo a veelmi dakujeem
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“