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: 1406
Registrován: 26 pro 2004, 01: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, 02: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: 1406
Registrován: 26 pro 2004, 01: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, 02: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: 1406
Registrován: 26 pro 2004, 01: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, 02: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, 02: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: 1406
Registrován: 26 pro 2004, 01: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, 02: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: 1406
Registrován: 26 pro 2004, 01: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: 1406
Registrován: 26 pro 2004, 01: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: 1406
Registrován: 26 pro 2004, 01: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ů“