Direktívy, konštanty...

Definovanie konštánt
Číselné a textové konštanty
Konštanty definované prekladačom

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

COMMENT - direktíva sa používa na označenie bloku textu. Takto označený text bude prekladač považovať za komentár.

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

Prekladač ignoruje text medzi dvoma rovnakými znakmi.

Príklad:
COMMENT /Toto je komentár a prekladač ho ignoruje./


DISPLAY - pri preklade zobrazí text na štandartné výstupné zariadenie (obrazovku, tlačiareň, prípadne do súboru). Text musí byť ohraničený úvodzovkami.

Syntax: DISPLAY "text"

Príklad:
DISPLAY "Wait please"


DOSSEG - ak použijeme túto direktívu vo svojom programe, búdu segmenty zoradené tvz. DOSovsky. Direktíva sa obvykle používa v spojení s direktívou .MODEL. DOSSEG "oznamuje" linkeru, že zoradenie segmentov je analogické so zoradením segmentov vyšších programovacích jazykov. Direktíva sa používa hlavne u čisto assemblerských programov. Ak je assembler pripojovaný k vyššiemu programovaciemu jazyku, stará sa sám o zoradenie segmentov.


GLOBAL - direktíva nahrádza direktívy PUBLIC a EXTRN.

Syntax: GLOBAL [definícia], [definícia],...

Ak je daný symbol v zdrojovom texte nadefinovaný, potom je určený ako PUBLIC, inak ako EXTRN. Túto direktívu tiež použijeme pre spojenie symbolov v súboroch pripojených direktívou INCLUDE.


INCLUDE - vloží zdrojový text (meno_súboru) do práve prekladaného textu a preloží ho ako jeho súčasť (podobne ako vo vyšších programovacích jazykoch).

Syntax: INCLUDE meno_súboru

Vloženie prebieha podľa nasledujúceho algoritmu: Ak prekladač nájde pri preklade direktívu INCLUDE, preruší preklad, preloží vložený súbor a potom pokračuje v preklade pôvodného súboru. Direktívy INCLUDE môžu byť vnorené i do súborov už vložených a jedinou prekážkou pre ich počet je maximálna dĺžka zdrojového textu, ktorý je možné použiť. Ak súbor nemá uvedenú príponu, je implicitne zvolená prípona *.ASM.

Príklad: INCLUDE prog1.ASM

Vkladané súbory sú hľadané v aktuálnom adresári a tiež v adresároch nastavených pomocou voľby /i v príkazovom riadku. Parameter /i nastavuje cestu pre vkladané súbory. V prípade použitia direktívy INCLUDE bude prehľadaný aktuálny adresár a adresáre uvedené v príkazovom riadku s týmto parametrom. Parameter /i môžete použiť viackrát.

Napríklad: TASM /i\prog /ic:\asm\pokus /id:\asm\zdroje


INCLUDELIB - direktíva vloží do súboru s príponou *.OBJ informáciu pre linker, aby externé funkcie hľadal okrem knižníc uvedených v príkazovom riadku, aj v knižnici meno_súboru.

Syntax: INCLUDELIB meno_súboru

Pre názov súboru je použitá syntax MS DOSu, a pokiaľ nie je uvedená prípona súboru, je implicitne zvolená prípona LIB.

Príklad: INCLUDELIB graphics.LIB.


JUMPS - Často sa pri používaní podmienených skokov dostanú ciele mimo hranicu, ktorú procesor umožňuje spracovať (-128 až +127 bajtov od výskytu skoku). Prekladač ohlási chybu (Relative jump out of range by # bytes) a je potrebné jeden podmienený skok nahradiť dvojicou skok podmienený a skok nepodmienený. Ak použijete direktívu JUMPS, potom túto náhradu vykoná prekladač automaticky. Pôvodná podmienka skoku je negovaná a za negovanou podmienkou nasleduje nepodmienený skok. Prekladač sám rozhodne, či inštrukciu podmieneného skoku ponechá (veľkosť kódu 2 bajty), alebo nahradí (veľkosť kódu 5 bajtov). Turbo assembler vykonáva štandartne preklad iba na jeden priechod. Toto spôsobuje, že rozhodnutie môže vykonať iba pri skoku na návestie definované skôr, než použitý skok. Ak použijeme dopredný odkaz, prekladač je nútený automaticky zvoliť dlhšiu variantu kódu. Ak prekladač neskôr zistí, že skok je mimo hranice -128 až +127 bajtov, potom dvojicu skokov nahradí postupnosťou týchto inštrukcií: Pôvodný podmienený skok, 3-krát inštrukcia NOP. Tým sa program nielen zväčší, ale sa jeho činnosť i čiastočne spomalí. Brániť sa môžeme dvoma spôsobmi: Použijeme pri doprednom odkaze direktívu NOJUMPS, ktorá ruší platnosť direktívy JUMPS. Direktíva NOJUMPS je implicitne určená pri spustení prekladu. Druhá možnosť je v niektorých prípadoch výhodnejšia - povolíme prekladaču dvojpriechodový preklad. Ten je možné nastaviť pomocou parametra /m v príkazovom riadku. Bez použitia voľby /m pracuje turbo assembler ako jednopriechodový prekladač. Použitím parametra (/m) bez ďalšieho upresnenia sa počet priechodov nastaví na päť. Inak je určený číslom nasledujúcim za parametrom /m (napr. TASM prog1.ASM /m4).


MULTERRS - prekladač bežne informuje programátora iba o prvej chybe, ktorú na jednom riadku nájde. V prípade, že použijeme direktívu MULTERRS, vypíše prekladač všetky chyby, ktoré sa na riadku vyskytujú. Zrýchli sa tým ladenie programov. Direktívu MULTERRS je možné zrušiť direktívou NOMULTERRS.

Príklad:
MULTERRS
MOV AL,10000H Do reg. AL číslo 10000H

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

Dve chyby na jednom riadku. Prvá chyba je, že číslo je veľké a nezmestí sa do 8-bitového registra. Druhá je taká, že komentár za inštrukciou nie je oddelený bodkočiarkou.


ORG - nastaví pozíciu počítadla v aktuálnom segmente.

Syntax: ORG výraz

Pokiaľ výraz je meno symbolu, potom symbol musí byť už nadefinovaný. Je možné použiť i preddefinovanú konštantu $, prípadne inú známu konštantu.

Príklad:
ORG 100H
.CODE
MOV AX,1000
ADD AX,AX


SMART - povoľuje preklad s automatickou optimalizáciou kódu. Direktíva SMART je povolená implicitne. SMART nahradzuje nasledujúce inštrukcie takto: Ďaleké skoky (JMP FAR) v rámci jedného segmentu, upraví na blízke (JMP NEAR) alebo krátke (JMP SHORT). Ďaleké volania CALL v rámci jedného segmentu nahradí pomocou PUSH CS a blízkeho volania CALL. Inštrukcia LEA je nahradená zodpovedajúcou inštrukciou MOV. U inštrukcií AND, OR, XOR, a TEST je operácia so slovami nahradená zodpovedajúcou operáciou s bajtami (iba ak je to možné). SMART umožňuje použitie aj inštrukcií, ktoré procesor priamo nepozná. Sú to nasledujúce inštrukcie:

PUSH konštanta (procesor 8086)

PUSH a POP DWORD (procesor 80286)

PUSH a POP PWORD (procesor 80386 a 80486)

Tieto inštrukcie budú vo výslednom programe nahradené postupnosťou inštrukcií. Platnosť direktívy SMART, je možné zrušiť direktívou NOSMART.