Direktíva END

end

Funkcia Ukončuje preklad zdrojového textu
Syntax end
Popis Slúži prekladaču ako príkaz aby ukončil preklad. Ak sa za riadkom s touto direktívou nachádzajú ešte nejaké ďalšie príkazy, budú ignorované.

Veľkou chybou začiatočníkov je že si myslia že direktíva END ukončí vykonávanie programu mikropočítačom. Pripomeniem že direktívy sú príkazy pre prekladač a nie pre procesor. Prekladač teda na základe direktívy END ukončí preklad zdrojového súboru. Samozrejme že toto nie je povel pre mikropočítač aby zastal. Program v mikropočítači beží stále pokiaľ je prítomné napájacie napätie. Zastaviť ho je možné iba uvedením do niektorého kľudového režimu príslušným nastavením riadiacich bitov v registri PCON. Toto sa ale v mikropočítačoch často vôbec ani nevyužíva. Skrátka niečo také ako koniec činnosti nepripadá do úvahy. Mikropočítač musí neustále riadiť zariadenie v ktorom sa nachádza. Inštrukcie pred direktívou END teda musia poslať riadenie znova niekam do časti ktorá sa neustále opakuje.
Program MUSÍ byť napísaný tak aby sa nikdy nevymkol z kontroly a prechádzal iba cez príkazy ktoré mu určil programátor.

Príklad
zaciatok:	inc	p0
wait:		jb	p3.0,wait
		mov	p2,#0

		end			;toto je nespravne ukoncenie. Prekladac sice ukonci preklad
					;ale procesor si vyberie dalsiu instrukciu ktoru najde v pameti.
Otázka je či v pamäti nejaké inštrucie ešte sú. Samozrejme že nejaké čislo v pameti programu bude. Povedzme že tam zostane obsah čistej pamäte čo je číslo 0FFH. Tomu zodpovedá inštrukcia MOV R7,A. Mikropočítač teda vykoná túto inštrukciu a ide na nasledujúcu. To je zase kód 0FFH a tak ďalej. Lenže takto prebehne celú vnútornú pamäť programu a potom automaticky začne vyberať kódy inštrukcií z externej pamäte programu. Okrem iného okamžite zmení obsah brany P2 a P0. Externá pamäť programu ale neexistuje a tak sa dostane na vykonanie úplne náhodný kód inštrukcie. Výsledkom bude že program sa začne uberať svojím životom a celé zariadenie ktoré bolo riadené mikropočítačom začne nepochopiteľne vystrájať.

zaciatok:	inc	p0
wait:		jb	p3.0,wait
		mov	p2,#0

stop:		jmp	stop
		end			;toto je lepsie ukoncenie.
Pred direktívou END je inštrukcia JMP ktorá pošle riadenie programu opäť sama na seba. Toto spôsobí zacyklenie programu. Teda zariadenie prestane reagovať na prípadné podnety. Ale rozhodne sa program nevymkne kontrole a zariadenie nebude vystrájať.

zaciatok:	inc	p0
wait:		jb	p3.0,wait
		mov	p2,#0

		jmp	zaciatok
		end			;toto je najlepsie ukoncenie.
Tento spôsob je najlepší. Inštrukcia JMP presunie riadenie opäť na začiatok a zariadenie naďalej reaguje a samozrejme beh programu je neustále pod kontrolou.

 

Hlavná stránka
Copyrights Peter Plesník 20.9.2005 22:00:06 All rights reserved