Vysvět. PAGE a skoku CALL: pagesel při návratu z podprogramu

Muzete mi neko prosim vysvetlit, ze kdyz mam v PAGE0 skok (CALL) na podprogram v PAGE1, proc musim po navratu z podprogramu z PAGE1, dat opet zapis pagesel … (podprogram v PAGE0).

PAGE0 main ... ... pagesel podprogram call podprogram pagesel main (proc tento zapis) ... ... PAGE1 podprogram ... ... return

Podle dokumentu od microchipu by se mela ukladat cela navratova hodnota, alespon tak jsem si to přeložil a snad pochopil.

:arrow_right: administrator: přejmenováno z “Vysvetleni PAGE a skoku CALL”

Když skáčeš do bank1 tak se musí přednastavit registr PCLATH, aby výsledná adresa která se skládá z PCL (nižší bajt) a PCLATH (vyšší bajt), ukazovala na adresu v bance 1 . Když se vracíš zpátky, tak zase potřebuješ nastavit registr PCLATH na banku 0 aby byl nastavenej na správnou banku v který zrovna probíhá program.

Tohle vim a je mi myslim jasne, ale proc po navratu musim davat navrat do page 0, kdyz v tom datasheetu pisou, ze instrukce CALL uklada do stacku celou hodnotu 13bitu. Tak by se obsah PCLATH mel obnovit uz s hodnotou page 0. Therefore, manipulation of the PCLATH<4:3> bits is not required for the RETURN instructions (which POPs the address from the stack). Zde primo pisou, ze pro return neni treba PCLATH menit. Skok se provede zpet. Proto mi tam neni jasny duvod proc pak opet zadavat “pagesel main” (page 0), protoze uz bych tam mel byt.

Když se podíváš do “Instruction set summary”, tak tam uvidíš, že Instrukce GOTO a CALL pracuje s 10b adresou. Zvláštní je že STACK má šířku 15b, žřejmě tam je ještě 5b nějaký ukazatel či co…

Myslim si, ze to neni vysvetleni, zaprve CALL i GOTO pracuje s 11b (10:0), a to pro rozsah skoku, proto se pred tuto instrukci musi davat PAGESEL x. Neznamena to tedy, kolik bitu se uklada do stacku, jen jaky adresni prostor se instrukci CALL muze obslouzit. Zaroven v popisu datasheetu je napsano toto If a return from a CALL instruction (or interrupt) is executed, the entire 13-bit PC is POPed off the stack. Therefore, manipulation of the PCLATH<4:3> bits is not required for the RETURN instructions (which POPs the address from the stack). Pokud dobre prekladam, je zde receno ze bude tech 13b tedy vcetne PCLATH<4:3> nacteno ze stacku.