Pokud jste se rozhodli, že budete ve svých BASICovských programech používat strojové podprogramy, které si sami napíšete, pak jsou následující řádky určeny právě Vám.
Pro správné pochopení dalších řádků je nutné uvědomit si, jak pracuje struktura zásobník (stack):
Nejjednodušší je představit si ho jako hromádku karet. Na tuto hromádku můžeme vždy nahoru položit další kartu nebo (opět pouze horní kartu) odebrat. Tato struktura se nazývá FILO - zkratka First In Last Out - neboli - První dovnitř poslední ven. Tímto je jasné, že číslo, které vložíme do zásobníku jako první bude postupně zaskládáváno dalšími čísly. Tato čísla budeme moci odebírat pouze postupně a v opačném pořadí, než jak byla vkládána.
Zásobník, který je implementován v počítačích Atari XE/XL umožňuje ukládat jednobytová čísla (tedy čísla rozsahu 0 až 255). Celkový počet čísel, která můžeme do zásobníku uložit je omezen na 256.
Pro uložení čísla do zásobníku je určena instrukce PHA - uloží se obsah akumulátoru na vrchol zásobníku.
Pro výběr čísla ze zásobníku používáme instrukci PLA - naplní akumulátor číslem z vrcholu zásobníku.
Jako příklad s využitím předávání parametrů jsem napsal strojový podprogram, který převezme dvě čísla a vrátí jejich součet.
Okomentovaný výpis tohoto podprogramu je součástí této výukové lekce.
Způsob volání:
SOUCET=USR(ZačátekStrPrg,CISLO1,CISLO2)
Až BASIC program dojde do místa, kde narazí na tento řádek, provede následující:
Důležité upozornění:
Ve strojovém podprogramu musíme bezpodmínečně zajistit vybrání hodnot počtu parametrů a všech dvojic (HBYTE,DBYTE) až po návratovou adresu (ale tuto už tam necháme) ze zásobníku.
Nezapomeňte na to, že procesor si do zásobníku ukládá i další hodnoty - jako například při vykonání instrukce JSR bude do zásobníku uložen dolní a horní byte návratové adresy, nebo při vykonání RTS se 2 byte odeberou a použijí jako návratová adresa. Vybrání parametrů by proto mělo být hned na začátku podprogramu, aby se předešlo zbytečným problémům.
Pokud tedy použijete ve svém strojovém podprogramu instrukce PLA pro převzetí parametrů z BASICu (nebo TurboBASICu), budete dostávat tyto hodnoty:
PLA - Poprvé .. akumulátor bude naplněn počtem parametrů, které byly použity při volání z BASICu (jedná se o počet dvojic HBYTE,DBYTE !!!). Kontrolou této hodnoty můžeme ověřit, zda bylo užito správného počtu parametrů a vyhnout se zhroucení systému. PLA - Podruhé .. akumulátor bude obsahovat HORNÍ byte prvního parametru. PLA - Potřetí .. akumulátor bude obsahovat DOLNÍ byte prvního parametru. PLA - Počtvrté .. HORNÍ byte druhého parametru. PLA - Popáté .. DOLNÍ byte druhého parametru. atd. atd. atd.
Obecně: Volání:
A=USR(RunAdr,PAR1,PAR2,..,PARn) Stav zásobníku při zavolání str.podpr.: Nahoře PočetParametrů (=n) HorníBytePAR1 -PAR1 DolníBytePAR1 / HorníBytePAR2 -PAR2 DolníBytePAR2 / ... ... HorníBytePARn -PARn DolníBytePARn / HorníByteNávratovéAdresy Dole DolníByteNávratovéAdresy Dno ---------------------------------