Direktivy, konstanty...

Definovanie konstant
Ciselne a textove konstanty
Konstanty definovane prekladacom

COMMENT | DISPLAY | DOSSEG | GLOBAL | INCLUDE
INCLUDELIB | JUMPS | MULTERRS | ORG | SMART

COMMENT - direktiva sa pouziva na oznacenie bloku textu. Takto oznaceny text bude prekladac povazovat za komentar.

Syntax: COMMENT [znak] [text] [znak]

Prekladac ignoruje text medzi dvoma rovnakymi znakmi.

Priklad:
COMMENT /Toto je komentar a prekladac ho ignoruje./


DISPLAY - pri preklade zobrazi text na standartne vystupne zariadenie (obrazovku, tlaciaren, pripadne do suboru). Text musi byt ohraniceny uvodzovkami.

Syntax: DISPLAY "text"

Priklad:
DISPLAY "Wait please"


DOSSEG - ak pouzijeme tuto direktivu vo svojom programe, budu segmenty zoradene tvz. DOSovsky. Direktiva sa obvykle pouziva v spojeni s direktivou .MODEL. DOSSEG "oznamuje" linkeru, ze zoradenie segmentov je analogicke so zoradenim segmentov vyssich programovacich jazykov. Direktiva sa pouziva hlavne u cisto assemblerskych programov. Ak je assembler pripojovany k vyssiemu programovaciemu jazyku, stara sa sam o zoradenie segmentov.


GLOBAL - direktiva nahradza direktivy PUBLIC a EXTRN.

Syntax: GLOBAL [definicia], [definicia],...

Ak je dany symbol v zdrojovom texte nadefinovany, potom je urceny ako PUBLIC, inak ako EXTRN. Tuto direktivu tiez pouzijeme pre spojenie symbolov v suboroch pripojenych direktivou INCLUDE.


INCLUDE - vlozi zdrojovy text (meno_suboru) do prave prekladaneho textu a prelozi ho ako jeho sucast (podobne ako vo vyssich programovacich jazykoch).

Syntax: INCLUDE meno_suboru

Vlozenie prebieha podla nasledujuceho algoritmu: Ak prekladac najde pri preklade direktivu INCLUDE, prerusi preklad, prelozi vlozeny subor a potom pokracuje v preklade povodneho suboru. Direktivy INCLUDE mozu byt vnorene i do suborov uz vlozenych a jedinou prekazkou pre ich pocet je maximalna dlzka zdrojoveho textu, ktory je mozne pouzit. Ak subor nema uvedenu priponu, je implicitne zvolena pripona *.ASM.

Priklad: INCLUDE prog1.ASM

Vkladane subory su hladane v aktualnom adresari a tiez v adresaroch nastavenych pomocou volby /i v prikazovom riadku. Parameter /i nastavuje cestu pre vkladane subory. V pripade pouzitia direktivy INCLUDE bude prehladany aktualny adresar a adresare uvedene v prikazovom riadku s tymto parametrom. Parameter /i mozete pouzit viackrat.

Napriklad: TASM /i\prog /ic:\asm\pokus /id:\asm\zdroje


INCLUDELIB - direktiva vlozi do suboru s priponou *.OBJ informaciu pre linker, aby externe funkcie hladal okrem kniznic uvedenych v prikazovom riadku, aj v kniznici meno_suboru.

Syntax: INCLUDELIB meno_suboru

Pre nazov suboru je pouzita syntax MS DOSu, a pokial nie je uvedena pripona suboru, je implicitne zvolena pripona LIB.

Priklad: INCLUDELIB graphics.LIB.


JUMPS - Casto sa pri pouzivani podmienenych skokov dostanu ciele mimo hranicu, ktoru procesor umoznuje spracovat (-128 az +127 bajtov od vyskytu skoku). Prekladac ohlasi chybu (Relative jump out of range by # bytes) a je potrebne jeden podmieneny skok nahradit dvojicou skok podmieneny a skok nepodmieneny. Ak pouzijete direktivu JUMPS, potom tuto nahradu vykona prekladac automaticky. Povodna podmienka skoku je negovana a za negovanou podmienkou nasleduje nepodmieneny skok. Prekladac sam rozhodne, ci instrukciu podmieneneho skoku ponecha (velkost kodu 2 bajty), alebo nahradi (velkost kodu 5 bajtov). Turbo assembler vykonava standartne preklad iba na jeden priechod. Toto sposobuje, ze rozhodnutie moze vykonat iba pri skoku na navestie definovane skor, nez pouzity skok. Ak pouzijeme dopredny odkaz, prekladac je nuteny automaticky zvolit dlhsiu variantu kodu. Ak prekladac neskor zisti, ze skok je mimo hranice -128 az +127 bajtov, potom dvojicu skokov nahradi postupnostou tychto instrukcii: Povodny podmieneny skok, 3-krat instrukcia NOP. Tym sa program nielen zvacsi, ale sa jeho cinnost i ciastocne spomali. Branit sa mozeme dvoma sposobmi: Pouzijeme pri doprednom odkaze direktivu NOJUMPS, ktora rusi platnost direktivy JUMPS. Direktiva NOJUMPS je implicitne urcena pri spusteni prekladu. Druha moznost je v niektorych pripadoch vyhodnejsia - povolime prekladacu dvojpriechodovy preklad. Ten je mozne nastavit pomocou parametra /m v prikazovom riadku. Bez pouzitia volby /m pracuje turbo assembler ako jednopriechodovy prekladac. Pouzitim parametra (/m) bez dalsieho upresnenia sa pocet priechodov nastavi na pat. Inak je urceny cislom nasledujucim za parametrom /m (napr. TASM prog1.ASM /m4).


MULTERRS - prekladac bezne informuje programatora iba o prvej chybe, ktoru na jednom riadku najde. V pripade, ze pouzijeme direktivu MULTERRS, vypise prekladac vsetky chyby, ktore sa na riadku vyskytuju. Zrychli sa tym ladenie programov. Direktivu MULTERRS je mozne zrusit direktivou NOMULTERRS.

Priklad:
MULTERRS
MOV AL,10000H Do reg. AL cislo 10000H

**Error** Constant too large
**Error** Extra characters on line

Dve chyby na jednom riadku. Prva chyba je, ze cislo je velke a nezmesti sa do 8-bitoveho registra. Druha je taka, ze komentar za instrukciou nie je oddeleny bodkociarkou.


ORG - nastavi poziciu pocitadla v aktualnom segmente.

Syntax: ORG vyraz

Pokial vyraz je meno symbolu, potom symbol musi byt uz nadefinovany. Je mozne pouzit i preddefinovanu konstantu $, pripadne inu znamu konstantu.

Priklad:
ORG 100H
.CODE
MOV AX,1000
ADD AX,AX


SMART - povoluje preklad s automatickou optimalizaciou kodu. Direktiva SMART je povolena implicitne. SMART nahradzuje nasledujuce instrukcie takto: Daleke skoky (JMP FAR) v ramci jedneho segmentu, upravi na blizke (JMP NEAR) alebo kratke (JMP SHORT). Daleke volania CALL v ramci jedneho segmentu nahradi pomocou PUSH CS a blizkeho volania CALL. Instrukcia LEA je nahradena zodpovedajucou instrukciou MOV. U instrukcii AND, OR, XOR, a TEST je operacia so slovami nahradena zodpovedajucou operaciou s bajtami (iba ak je to mozne). SMART umoznuje pouzitie aj instrukcii, ktore procesor priamo nepozna. Su to nasledujuce instrukcie:

PUSH konstanta (procesor 8086)

PUSH a POP DWORD (procesor 80286)

PUSH a POP PWORD (procesor 80386 a 80486)

Tieto instrukcie budu vo vyslednom programe nahradene postupnostou instrukcii. Platnost direktivy SMART, je mozne zrusit direktivou NOSMART.