POPIS PROGRAMU [ M80.COM ] strana:19 ----------------------------------------------------------------- 4.13. Abecední přehled direktiv. ================================ Následující přehled direktiv obsahuje všechny direktivy, které zpracovává překladač M80, včetně direktiv pro mikroproceso- ry typu Z80 a direktiv pro vytváření makroinstrukcí a opakovacích bloků. Direktivy jsou abecedně setříděny podle svých jmen, při- čemž se nebere v úvahu znak tečka nebo dolar, kterými některé di- rektivy začínají. Popis každé direktivy začíná uvedením jejího tvaru. Většina direktiv může být opatřena návěštím, návěští získává hodnotu počítadla adres před zpracováním vlastní direkti- vy. Na výjimky bude upozorněno. Direktiva .8080 --------------- Tato direktiva nastavuje režim, ve kterém překladač zpra- covává symbolické vyjádření strojových instrukcí mikroprocesoru 8080 na rozdíl od mikroprocesoru Z80. Tento režim je implicitní, lze jej změnit parametrem /Z při spuštění překladu nebo uvnitř zdrojového textu direktivou .Z80. Direktiva ASEG -------------- Tato direktiva nastavuje počítadlo adres do absolutního úseku. Následující zdrojový text se překládá na pevné absolutní adresy. Při první direktivě ASEG se počítadlo adres nastavuje na absolutní 0, při dalších se nastavuje na adresu následující za poslední slabikou minulého úseku ASEG. Počítadlo adres uvnitř úseků lze nastavovat direktivou ORG. Umístění absolutního úseku je dáno již při překladu a nelze jej spojovacím programem L80 ovlivnit. Direktiva .COMMENT otexto -------------------------- Tato direktiva umožňuje umísťovat do zdrojového textu rozsáhlejší komentáře. Má výše uvedený tvar, kde: o omezovač komentářového textu, první znak operandu rozdíl- ný od mezery nebo tabelátoru je chápán jako omezovač text vlastní komentář, nesmí obsahovat výše definovaný omezo- vač, může být umístěn na více řádcích Direktiva COMMON [jméno] ------------------------- Tato direktiva nastavuje počítadlo adres do zadaného úse- ku COMMON. Počítadlo adres se nastavuje vždy na začátek úseku. Úseky COMMON jsou datové relativní úseky, jejich konečné umístění v paměti zajišťuje spojovací program. Úseky COMMON stejného jména se v paměti navzájem překrývají. jméno jméno společného datového úseku COMMON. Pokud jméno není zadáno, jedná se o nepojmenovaný datový úsek COMMON. POPIS PROGRAMU [ M80.COM ] strana:20 ----------------------------------------------------------------- Direktiva COND výraz --------------------- Jedná se o zahájení podmíněně překládaného bloku. Direk- tiva patří mezi direktivy Z80 a je ekvivalentní direktivám IF, nebo IFT. Direktiva .CREF --------------- Tato direktiva povoluje vytváření křížových odkazů po předchozím zákazu direktivou .XCREF. Direktivy .CREF a .XCREF ma- jí smysl pouze tehdy, je-li při spuštění překladače zadán parame- tr /C (požadavek na vytvoření křížových odkazů). Při zadaném pa- rametru /C je direktiva .CREF implicitní. Direktiva CSEG -------------- Tato direktiva nastavuje počítadlo adres do relativního kódového úseku CSEG. Následující zdrojový text se překládá na re- lativní adresy kódového úseku. Při první direktivě CSEG se počítadlo adres nastavuje na relativní 0, při dalších se nastavu- je na relativní adresu následující za poslední slabikou z minulé- ho úseku CSEG. Počítadlo adres uvnitř úseku lze nastavovat direk- tivou ORG. Umístění úseku v paměti je dáno spojovacím programem L80. Direktiva DB par [,par]... --------------------------- Tato direktiva umísťuje hodnoty výrazů nebo znaků řetězce do posloupnosti slabik paměti od adresy dané počítadlem adres. V případě řetězce nejvyšší bit slabik nuluje. par výraz nebo znakový řetězec uzavřený apostrofy nebo uvo- zovkami. Hodnota výrazu se musí vejít do jedné slabiky, tzn. vyšší slabika hodnoty musí být nulová nebo musí být rovna 255. Direktiva DC řetězec --------------------- Tato direktiva umísťuje hodnoty znaků řetězce do posloup- nosti slabik paměti od adresy dané počítadlem adres. Na rozdíl od direktivy DB nejvyšší bit u poslední slabiky nastavuje na jednič- ku, u ostatních slabik nejvyšší bit nuluje. V direktivě DC není přípustný prázdný řetězec. řetězec je posloupnost znaků ASCII uzavřené do apostrofů nebo uvozovek. Direktiva DEFB výraz[,výraz]... -------------------------------- Tato direktiva definuje obsah slabik paměti. Direktiva patří mezi direktivy Z80 a je ekvivalentní direktivě DB. POPIS PROGRAMU [ M80.COM ] strana:21 ----------------------------------------------------------------- Direktiva DEFL výraz --------------------- Tato direktiva definuje jméno. Patří mezi direktivy Z80 a je ekvivalentní direktivě SET. Direktiva DEFM řetězec[,řetězec]... ------------------------------------ Umístění řetězce znaků ASCII do paměti. Direktiva patří mezi direktivy Z80 a je ekvivalentní direktivě DB. Direktiva DEFS výraz --------------------- Rezervování místa v paměti. Direktiva patří mezi direkti- vy Z80 a odpovídá direktivě DS. Direktiva DEFW výraz[,výraz]... -------------------------------- Definování obsahu slov paměti. Direktiva patří mezi di- rektivy Z80 a odpovídá direktivě DW. Direktiva .DEPHASE ------------------ Ukončení vložené posloupnosti příkazů zahájené direktivou .PHASE, která se překládá s počítadlem adres nastaveným direkti- vou .PHASE. Direktiva DS výraz ------------------- Direktiva DS rezervuje místo v paměti tak, že zvětší po- čítadlo adres o hodnotu zadaného výrazu. Všechna jména použitá ve výrazu musí být definována předem, tzn. v průběhu prvního průcho- du před uvedením v direktivě DS. výraz absolutní výraz, jehož hodnotu určuje počet slabik, který se má v daném místě rezervovat. Direktiva DSEG -------------- Tato direktiva nastavuje počítadlo adres do relativního datového úseku DSEG. Následující zdrojový text se překládá na relativní adresy datového úseku. Při první direktivě DSEG se počítadlo adres nastaví na absolutní 0, při dalších se nastaví na relativní adresu následující za poslední slabikou z minulého úseku DSEG. Počítadlo adres uvnitř úseku je možné nastavit direk- tivou ORG. Konečné umístění úseku v paměti je dáno spojovacím programem L80. POPIS PROGRAMU [ M80.COM ] strana:22 ----------------------------------------------------------------- Direktiva DW výraz[,výraz]... ------------------------------ Tato direktiva slouží k definování posloupnosti slov pa- měti. výraz výraz, jehož hodnota se umístí do slova na adresu danou počítadlem adres. Na nižší adresu se umístí nižší slabika hodnoty, na vyšší adresu vyšší slabika hodnoty výrazu. Direktiva ELSE -------------- Tato direktiva umožňuje rozdělit podmíněně překládaný blok na část, ve které se uplatňuje podmínka v původním smyslu (mezi IF a ELSE) a na část, kde se podmínka uplatňuje v opačném smyslu (mezi ELSE a ENDIF). Pro dané IF je přípustné pouze jedno ELSE. Direktiva ELSE se vztahuje vždy k naposled zpracovávanému IF. Direktivy $EJECT,*EJECT ----------------------- Výše uvedené direktivy způsobí přechod na novou stránku ve výpisu překládaného programu. Tvar $EJECT je zpracováván z dů- vodu kompatability s překladačem ASM80 ze systému DOS-MVS. Tvar *EJECT patří mezi direktivy Z80. Oba dva tvary odpovídají direk- tivě PAGE uvedené bez parametru. Direktiva END [výraz] ---------------------- Tato direktiva zakončuje zdrojový text programu. Po jejím nalezení překladač končí první případně druhý průchod překladu. Startovací adresa je předávána prostřednictvím souboru REL spojo- vacímu programu L80. výraz výraz, jehož hodnota představuje startovací adresu prog- ramu. Direktiva ENDC -------------- Tato direktiva zakončuje blok podmíněně překládaného zdrojového textu. Direktiva ENDC patří mezi direktivy Z80 a odpo- vídá direktivě ENDIF. Direktiva ENDIF --------------- Tato direktiva zakončuje blok podmíněně překládaného zdrojového textu, zahájený některou z direktiv IF. Každé direkti- vě ENDIF musí odpovídat jedna direktiva typu IF. POPIS PROGRAMU [ M80.COM ] strana:23 ----------------------------------------------------------------- Direktiva ENDM -------------- Tato direktiva zakončuje definici makroinstrukce zaháje- nou direktivou MACRO nebo opakovací blok REPT, IRP, IRPC. Ke kaž- dé direktivě ENDM musí existovat právě jedna z výše uvedených di- rektiv. Direktiva ENTRY jméno[,jméno]... -------------------------------- Zveřejnění jmen mimo hranice překládaného modulu. Podrob- něji viz direktiva PUBLIC, která je synonymem k direktivě ENTRY. Dalším synonymem je direktiva GLOBAL pro Z80. Direktiva jméno EQU výraz ----------------------------- Direktiva EQU umožňuje nezměnitelně nadefinovat jméno. jméno jméno, které chceme definovat, výraz výraz, jehož hodnota a atribut se přiřadí jménu. Výraz nesmí být vnější. Direktiva EXITM --------------- Tato direktiva umožňuje ukončit rozvoj makroinstrukce ne- bo opakovacího bloku před nalezením konce definice ENDM. Nachází- li se direktiva EXITM ve vložené makroinstrukci, přechází se po jejím zpracování na rozvoj nejbližší vnější makroinstrukce. Direktivy EXT, EXTERNAL, EXTRN jméno[,jméno]... ------------------------------------------------ Výše uvedené direktivy umožňují označit zadaná jména jako vnější. Vnější jména jsou jména, která jsou použita v překládaném modulu v poli operandů, ale definována jsou v jiných modulech, ve kterých by měla být označena za veřejná (ENTRY, GLOBAL, PUBLIC). Výše uvedené direktivy jsou synonyma. Direktiva EXTERNAL patří mezi direktivy Z80. Místo výše uvedených direktiv je možné použít k označení vnějšího jména v poli operandů dvojici znaků ##, která se uvádí bezprostředně za jménem. jméno jméno, které chcme definovat jako vnější Direktiva GLOBAL jméno[,jméno] ------------------------------- Zveřejnění jmen mimo hranice překládaného modulu. Podrob- něji viz direktiva PUBLIC, která je synonymem direktivy GOBAL. Direktiva GLOBAL patří mezi direktivy Z80. POPIS PROGRAMU [ M80.COM ] strana:24 ----------------------------------------------------------------- Direktiva IF výraz ------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text se bude překládat, jestliže výraz bude mít hodnotu růz- nou od nuly. Direktivy IF, IFT a COND (Z80) jsou synonyma. výraz má-li výraz hodnotu různou od nuly, je podmínka splněna. Direktiva IF1 ------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text se bude překládat pouze v průběhu 1.průchodu překladu. Direktiva IF2 ------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text se bude překládat pouze v průběhu 2.průchodu překladu. Direktiva IFB -------------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text bude překládán pouze v případě, že parametr je prázdný. parametr je-li parametr prázdný, je podmínka splněna. Parametr musí být uzavřen do lomených závorek. Direktiva IFDEF jméno ---------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text bude překládán pouze v případě, jestliže v okamžiku zpracování direktivy IFDEF je specifikované jméno definováno nebo označeno jako vnější. jméno je-li jméno definováno, podmínka je splněna. Direktiva IFE, IFF výraz ------------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text je překládán pouze v případě, že zadaný výraz má hodno- tu 0. Direktivy IFE a IFF jsou synonyma. výraz má-li hodnotu 0, je podmínka splněna. Direktiva IFNB -------------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text se bude překládat pouze v případě, že parametr není prázdný. parametr je-li parametr neprázdný, je podmínka splněna. Parametr musí být uzavřen do lomených závorek. POPIS PROGRAMU [ M80.COM ] strana:25 ----------------------------------------------------------------- Direktiva IFNDEF jméno ----------------------- Zahájení podmíněně překládaného bloku. Následující zdro- jový text se překládá pouze v případě, jestliže v okamžiku zpra- cováni direktivy IFNDEF specifikované jméno není definováno ani označeno jako vnější. jméno není-li jméno definováno, je podmínka splněna. Direktiva IFT výraz -------------------- Zahájení podmíněně překládaného bloku. Viz direktiva IF, která je synonymem direktivy IFT. Direktivy INCLUDE,$INCLUDE jspec --------------------------------- Direktiva INCLUDE umožňuje přepnout vstup z právě překlá- daného zdrojového souboru na vstup ze specifikovaného vedlejšího zdrojového souboru. Překladač při nalezení direktivy INCLUDE otevře vedlejší zdrojový soubor a překládá jej. Po dosažení konce souboru se vstup přepne zpět na původní soubor a překlad pokraču- je prvním řádkem za direktivou INCLUDE. Ve výpisu programu jsou řádky pocházející z vložených souborů označeny znakem C. Ve vedlejších zdrojových souborech není přípustné použí- vat direktivu INCLUDE, tzn. není možné vkládat zdrojové soubory do více úrovní (hlásí se chyba O). Jestliže specifikovaný vedlejší soubor (zdrojový) neexis- tuje, hlásí se chyba V a direktiva INCLUDE je ignorována. Direktivy INCLUDE,$INCLUDE a MACLIB jsou synonyma. jspec jednoznačná specifikace vkládaného zdrojového souboru. Implicitní přípona jména souboru je MAC. Implicitním zařízením je vybraný disk. Direktiva IRP fpar,<[spar][,spar]...> -------------------------------------- Tato direktiva zahajuje opakovací blok se seznamem para- metrů. Blok musí být zakončen direktivou ENDM. Počet opakování je dán počtem skutečných parametrů. Při každém opakování je postupně nahrazován formální parametr uvedený v tělě bloku skutečnými parametry se seznamu skutečných parametrů. V případě, že seznam skutečných parametrů je prázdný, provede se jedno opakování, přičemž formální parametr je z textu odstraněn. Následující příklad generuje deset direktiv DB 1 až DB 10. IRP X,<1,2,3,4,5,6,7,8,9,10> DB X ENDM POPIS PROGRAMU [ M80.COM ] strana:26 ----------------------------------------------------------------- fpar formální parametr, který je při rozvoji v těle opakovací- ho bloku postupně nahrazován skutečnými parametry spar. spar skutečný parametr, seznam skutečných parametrů musí být uzavřen v lomených závorkách < >. Direktiva IRPC fpar,<řetězec> ------------------------------ Tato direktiva zahajuje opakovací blok se znakovým řetěz- cem. Blok musí být zakončen direktivou ENDM. Počet opakování je dán počtem znaků řetězce. Při každém opakování je v textu bloku nahrazen formální parametr jedním znakem ze zadaného řetězce. Následující příklad generuje deset direktiv DB n+1, kde n je 0,1 ... 9. IRPC X,0123456789 DB X+1 ENDM fpar formální parametr, který je při rozvoji postupně nahra- zován jednotlivými znaky řetězce. ře- posloupnost znaků, jejíž jednotlivé znaky se chápou jako tězec skutečné parametry. Obsahuje-li řetězec oddělovače, musí být uzavřen do lomených závorek < >. Direktiva .LALL --------------- Tato direktiva slouží k řízení výpisu rozvoje makroin- strukcí a opakovacích bloků. Při zadání direktivy .LALL se vypi- suje úplný rozvoj makroinstrukce včetně příkazů, které negenerují cílový kód. Direktiva .LIST --------------- Direktiva slouží k obnovení výpisu po předchozím potlače- ní výpisu direktivou .XLIST. Direktiva .LIST je implicitní. Má smysl pouze tehdy, je-li soubor výpisu vytvářen. Directiva LOCAL jméno[,jméno]... --------------------------------- Pomocí direktivy LOCAL můžeme v rámci definice makroin- strukce zadat tzv. lokální jméno. Taková jména překladač při roz- voji makroinstrukce nahradí jedinečnými jmény ve tvaru ..nnnn, kde nnnn je hexadecimální číslo. použití lokálních jmen umožňuje vyhnout se vícenásobné definici návěští při rozvoji makroinstruk- cí, které obsahují návěští. Překladač generuje jména ve tvaru ..nnnn tak, že postupně zvyšuje hexadecimální číslo od 0001 až do FFFF. Programátor by tedy neměl jména výše uvedeného typu použí- vat. Pokud direktivu LOCAL použijeme, musí být prvním příkazem definice makroinstrukce. POPIS PROGRAMU [ M80.COM ] strana:27 ----------------------------------------------------------------- jméno lokální jméno, za které překladač při rozvoji makroin- strukce generuje jedinečné jméno ve tvaru ..nnnn. Direktiva MACLIB jspec ----------------------- Tato direktiva slouží k přepnutí vstupu z hlavního zdro- jového souboru na vedlejší, daný jednoznačnou specifikací jspec. Viz direktiva INCLUDE, která je synonymem direktivy MACLIB. Direktiva jméno MACRO [fpar][,fpar]... -------------------------------------- jméno jméno makroinstrukce, pomocí kterého se makroinstrukce volá. fpar formální parametr. Directiva MACRO zahajuje definici makroinstrukce, definu- je jméno makroinstrukce a formální parametry, které jsou použity v definici makroinstrukce. Definice makroinstukce musí být zakon- čena direktivou ENDIM. Při volání makroinstrukce jsou formální parametry použité v textu definice makroinstrukce nahrazeny skutečnými parametry. Volání makroinstrukce má tvar: jméno [spar][,spar]... spar skutečný parametr; obsahuje-li skutečný parametr oddělo- vače, musí se uzavřít do lomených závorek < >. Počet skutečných parametrů nemusí odpovídat počtu formál- ních parametrů. Je-li skutečných parametrů více, jsou přebytečné ignorovány. Je-li skutečných parametrů méně, jsou chybějící pova- žovány za prázdné a při rozvoji makroinstrukce jsou příslušné formální parametry z textu bez náhrady odstraněny. Následující příklad představuje definici makroinstrukce MACDB s vloženým opakovacím blokem REPT, která po volání vygene- ruje deset diektiv DB 1 až DB 10. MACDB MACRO X Y SET 0 REPT X Y SET Y+1 DB Y ENDM ENDM Volání makroinstrukce bude potom příkazem: MACDB 10 POPIS PROGRAMU [ M80.COM ] strana:28 ----------------------------------------------------------------- Následující příklad generuje tentýž kód, ilustruje od- stranění jedné úrovně lomených závorek při vkládání skutečného parametru. MACDB1 MACRO X IRP Y, DB Y ENDM ENDM Zavoláme-li makroinstrukci: MACDB1 <1,2,3,4,5,6,7,8,9,10> bude rozvoj makroinstrukce: IRP Y,<1,2,3,4,5,6,7,8,9,10> DB Y ENDM Direktiva NAME ('jméno') ------------------------- Pomocí této direktivy můžeme definovat jméno modulu. V případě, že direktivu NAME nepoužijeme, bere se jméno modulu z direktivy TITLE. V případě, že ani direktiva TITLE není použi- ta, je jméno modulu vytvářeno ze jména zdrojového souboru. jméno jméno modulu, v úvahu se bere pouze prvních 6 znaků. Direktiva ORG výraz -------------------- Pomocí direktivy ORG lze v rámci právě překládaného úseku nastavit počítadlo adres na požadovanou hodnotu. Všechna jména použitá ve výrazu musí být definována předem v průběhu 1. průcho- du. Hodnota výrazu musí být absolutní nebo musí příslušet ke stejnému úseku jako počítadlo adres. výraz výraz, jehož hodnota se umístí do počítadla adres. Direktiva PAGE [výraz] ----------------------- Pomocí direktivy PAGE je možné nastavit počet řádek na stránce, implicitně má stránka výpisu 64 řádek. Jestliže v direk- tivě výraz neuvedeme, zpracovává se jako průchod na novou strán- ku. Pro nastavení na novou stránku překladač generuje znak FF, tedy Form Feed - hodnota 0CH. výraz absolutní výraz, jehož hodnota určuje počet řádek na stránce. Hodnota výrazu se může pohybovat v rozmezí 10 až 255. POPIS PROGRAMU [ M80.COM ] strana:29 ----------------------------------------------------------------- Direktiva .PHASE výraz ----------------------- Tato direktiva zahajuje blok zdrojového textu, který se bude překládat a absolutním počítadlem adres nastaveným hodnotou zadaného výrazu. Generovaný kód se však stane součástí právě překládaného úseku. Takto získaný kód je však před provedením zpravidla třeba umístit na adresu uvedenou v direktivě .PHASE. Blok zahájený direktivou .PHASE se zakončuje direktivou .DEPHASE. Čistě ilustrativní příklad: 0000' C3 0006' JMP ALFA 0003' C3 0216' JMP BETA 0006' C3 0018' ALFA: JMP GAMA .PHASE 210H 0210 C3 0006' JMP ALFA 0213 C3 0216 JMP BETA 0216 C3 0018' BETA: JMP GAMA .DEPHASE 0012' C3 0006' JMP ALFA 0015' C3 0006' JMP BETA 0018' C3 0006' GAMA: JMP GAMA U bloku .PHASE jsou ve výpisu uvedeny absolutní ukládací adresy 210 až 216, nicméně generovaný kód je součástí právě pře- kládaného kódového úseku a ukládá se na relativní adresy 9' až 11'. výraz absolutní výraz, jehož hodnota se dočasně umístí do počí- tadla adres. Direktiva .PRINTX otexto ------------------------- Tato direktiva je užitečná při dlouhých překladech nebo při podmíněném překladu, kdy na obrazovce informuje o průběhu překladu. Text direktivy .PRINTX vystupuje na obrazovku jak v prvním tak v druhém průchodu. Chceme-li, aby text vystoupil pouze v jednom průchodu je třeba pro direktivu .PRNTX použít pod- míněně překládaný blok řízený direktivou IF1 nebo IF2. Například: IF2 IF BIOS .PRINTX /BIOS VERZE A0/ ENDIF ENDIF o omezovač textu, první znak po typu operace rozdílný od mezery nebo tabulátoru je chápán jako omezovač. text posloupnost znaků ASCII, která vystupuje na obrazovku terminálu. POPIS PROGRAMU [ M80.COM ] strana:30 ----------------------------------------------------------------- Direktiva PUBLIC jméno[,jméno]... ---------------------------------- Tato direktiva slouží k definování veřejných jmen, t.j. jmen, na které je možné se odvolávat i z jiných modulů. Všechna jména musí být v rámci modulu definována (jako návěstí nebo pomo- cí direktiv EQU nebo SET), jinak je hlášena chyba U. V případě, že jméno je definováno jako vnější nebo je jménem bloku COMMON, je hlášena chyba M. Návěští je možno označit jako veřejné též po- užitím dvojice dvojteček při jeho definici. Direktivy ENTRY a GLOBAL (Z80) jsou synonyma direktivy PUBLIC. jméno jméno, jehož hodnotu a atributy chceme zveřejnit mimo rá- mec překládaného modulu. Direktiva .RADIX výraz ----------------------- Implicitní číselnou soustavou je soustava desítková. Di- rektiva .RADIX umožňuje měnit implicitní základ v rozmezí od 2 do 16. Nově definovaný základ platí do další direktivy .RADIX. Čí- selné konstanty pužité ve výrazu direktivy .RADIX bez indikace číselné soustavy se chápou vždy v soustavě desítkové. výraz výraz, jehož hodnota se stane novým implicitním základem číselných konstant. Direktiva .REQUEST jméno[,jméno]... Direkiva .REQUEST umožňuje předat spojovacímu programu L80 prostřednictvím cílového souboru REL jména souborů, ve kte- rých má spojovací program hledat nedefinovaná vnější jména. Jména souboru musí odpovídat konvencím platným v překladači M80 pro jména. Specifikace souborů nesmí obsahovat příponu jména souborů ani označení disku. Za příponu a disk si spojovací program dosadí implicitní hodnoty (REL a vybraný disk). Spojovací program pro- hledává knihovny v pořadí v jakém byly zadány. jméno jméno souboru, ve kterém má spojovací program hledat ne- definovaná vnější jména. Direktiva .SALL --------------- Tato direktiva slouží k řízení výpisu rozvoje makroin- strukcí. Po zpracování direktivy .SALL se při rozvoji makroin- strukce vypisuje pouze generovaný cílový kód. Direkiva jméno SET výraz ----------------------------- Direktiva SET umožňuje definovat jméno podobně jako di- rektiva EQU s tím rozdílem, že jméno definované direktivou SET lze jinou direktivou SET předefinovat. jméno jméno, které chceme definovat výraz výraz, jehož hodnota a atributy se přířadí jménu. Výraz nesmí být vnější. POPIS PROGRAMU [ M80.COM ] strana:31 ----------------------------------------------------------------- Direktiva SUBTTL text ---------------------- Tato direktiva umožňuje umísťovat do výpisu podtitulek stránky. v programu může být použit libovolný počet direktiv SUBTTL. Text podtitulku je omezen na 60 znaků. text posloupnost znaků ASCII, která se objeví jako druhý řádek hlavičky každé stránky výpisu. Direktiva .XALL --------------- Direkiva .XALL slouží k řízení výpisu rozvoje makroin- strukcí. Direktiva .XALL nastavuje režim, při kterém se vypisuje generovaný cílový kód a ze zdrojových řádek pouze ty příkazy, které tento kód generují. Direktiva .XALL je implicitní. Direktiva TITLE,$TITLE text Tato direktiva umožňuje umístit do výpisu titulek strán- ky. Direktiva TITLE se může v programu uvést pouze jedna, jinak je hlášena chyba Q. V případě, že není uvedena direktiva NAME, bere se prvních 6 znaků direktivy TITLE jako jméno modulu. V případě, že mezi těmito znaky je mezera nebo tabulátor, berou se za jméno znaky pouze do tohoto oddělovače. V případě, že není uvedena ani direktiva TITLE, bere se jméno modulu ze jména zdro- jového souboru. Tvar $TITLE je zpracováván z důvodu kompatability s makroassem- blerem ASM80 ze systému DOS-MVS. text posloupnost znaků ASCII, která se objeví jako první řádek každé stránky výpisu. Direktiva .XCREF ---------------- Tato direktiva potlačuje vytváření křížových odkazů. K obnovení zpracování křížových odkazů slouží direktiva .CREF. Obě direktivy mají smysl pouze tehdy, je-li při spuštění překla- dače zadán arametr /C (požadavek na vytváření křížových odkazů). Direktiva .XLIST ---------------- Tato direktiva potlačuje výpis překládaného programu. Výpis lze obnovit direktivou .LIST. Obě direkivy mají smysl pouze tehdy, je-li soubor výpisu vytvářen. Direktiva .Z80 -------------- Tato direktiva nastavuje režim, ve kterém překladač zpra- covává symbolické vyjádření strojových instrukcí mikroprocesoru Z80 na rozdíl od mikroprocesoru 8080. Tento režim lze též nasta- vit parametrem /Z při spuštění překladače. POPIS PROGRAMU [ M80.COM ] strana:32 ----------------------------------------------------------------- 5. PŘENOSITELNOST ZDROJOVÉHO TEXTU. ----------=========================================---------- Chceme-li, aby programy byly na úrovni zdrojového textu přenositelné bez větších problémů pod makroassembler ASM80 pracu- jící na vývojových systémech pod DOS-MVS případně ISIS-II, je třeba věnovat pozornost následujícímu doporučení: a, nepoužívat direktivy: .8080, .COMMENT, COMMON, .CREF, COND, DC, .DEPHASE, ENTRY, EXT, IF1, IF2, IFB, IFDEF, IFE, IFF, IFNB, IFNDEF, IFT, INCLUDE, .LALL, .LIST, MACLIB, PAGE, .PHASE, .PRINTX, .RADIX, .REQUEST, .SALL, SUBTTL, TITLE, .XALL, .XCREF, .XLIST, .Z80 b, nepoužívat direktivy pro Z80: COND, DEFB, DEFL, DEFM, DEFS, DEWF, ENDC, * EJECT, EXTERNAL, GLOBAL c, pro některé z výše uvedených direktiv existují v jazyku M80 synonyma, která jsou přípustná pro ASM80 d, při přechodu pod ASM80 je možné některe z výše uvedených direktiv nahradit řídícími příkazy překladače ASM80 umístěnými ve zdrojovém textu (řádky začínají znakem $) e, jako omezovače znakových řetězců používat apostrofy namísto uvozovek f, ve jménech používat pouze písmena, číslice a znaky ? @, ne- používat znaky $ . a podtržítko g, nepoužívat pro hexadecimální konstanty tvar X'nnnn' h, obezřetně používat jména instrukcí jako operandy (poněkud odlišné zpracování) i, obezřetně používat operátory HIGH a LOW, v M80 pracují s rela- tivními operandy jako s absolutními j, nepoužívat implicitní direktivu DB, (nezadání typu operace) k, nedefinovat globální návěští pomocí znaků :: l, neoznačovat vnější jména v poli operandů pomocí znaků ** m, nepoužívat implicitní nastavení počítadla adres; pod M80 je implicitní relativní 0 kódového úseku, pod ASM80 absolutní 0. POPIS PROGRAMU [ M80.COM ] strana:33 ----------------------------------------------------------------- Při přenosu zdrojového textu z překladače ASM80 pod překladač M80 je třeba si uvědomit, že překladač M80: a, nezpracovává řídící příkazy překladače ASM80 (řádky začínající znakem $), výjimku tvoří $EJECT,$TITLE a do jisté míry $INCLU- DE b, nezpracovává parametry PAGE a INPAGE v direktivách CSEG a DSEG, hlásí chybu Q a parametry ignoruje. Z toho vyplývá, že překladač M80 generuje přemístitelné úseky pouze po slabikách (volně přemístitelné úseky) c, nezpracovává vnější jména, jejichž hodnota se má ukládat na jednu slabiku d, operátory HIGH a LOW dodávají v případě relativních operandů absolutní výsledek e, může hlásit chyby při zpracování některých zápisů instrukcí použitých jako operandy f, nastavuje počítadlo adres implicitně na relativní 0 kódového úseku CSEG g, nezpracovává jména MEMORY a STACK jako rezervovaná jména, ale jako běžná uživatelská jména a nepřisuzuje jim žádný speciální význam. ----------------------------------------------------------------- Podle příručky CP/M - Základní programy I vydané JZD AK Slušo- vice upravil: Meo'soft - Ing.Jírovec Roman, Komenského 1316, 031 01 L.Mikuláš 1991. -----------------------------------------------------------------