MAKRÁ
Pojem makro je vám už určite známi. Makro je možné definovať ako substitúciu (inak povedané makro pod svojím menom zoskupuje príkazy, alebo inštrukcie, ktoré sa majú vykonať). Výhodou je, že napr.: často sa opakujúcu časť programu nemusíte stále opisovať, naopak nevýhodou je, že čím viac sa makro v zdrojovom texte objaví tým väčší bude kód programu.
Syntax:
meno MACRO [parameter1 [,parameter2]...]
ENDM
Nasledujúci príklad ukazuje ako vytvoriť, resp. použiť makro. Nech sa páči, vyskúšať.
Príklad:
.MODEL SMALL |
|
.STACK 100H |
|
.DATA |
|
TEXT1 |
DB 'TOTO JE TEXT 1',13,10,'$' |
TEXT2 |
DB 'TOTO JE TEXT 2',13,10,"$" |
VYPIS_SPRAVU |
MACRO RETAZEC |
LEA DX,RETAZEC |
|
|
MOV AH,09H |
|
INT 21H |
ENDM |
|
PAUSE |
MACRO |
|
MOV AX,0 |
|
INT 16H |
|
ENDM |
CLS |
MACRO |
|
MOV AX,3 |
INT 10H |
|
ENDM |
|
.CODE |
|
START: |
MOV AX,@DATA |
|
MOV DS,AX |
|
CLS |
|
VYPIS_SPRAVU TEXT1 |
PAUSE |
|
VYPIS_SPRAVU TEXT2 |
|
PAUSE |
|
CLS |
|
MOV AX,4C00H |
|
|
INT 21H |
END START |
Turbo assembler má už v sebe definovaných niekoľko makier. Sú to nasledujúce makrá (
CATSTR, INSTR, SIZESTR, SUBSTR, IRP, IRPC, REPT, WHILE, GOTO). O každom si povieme niekoľko slov. Prvé štyri sa používajú na prácu s reťazcami. Ak máte nižšiu verziu assembleru ako 3.1 treba pred ich použitím uviesť direktívu MASM51. Direktíva povoľuje písanie zdrojového textu v rozšírenom režime. Verzia assembleru 3.1 vyhodnocuje makrá (CATSTR, INSTR, SIZESTR, SUBSTR) aj bez použitia direktívy MASM51. Zostávajúce makrá sa používajú na prácu s cyklami.
CATSTR
- spojí viac reťazcov do jedného.Syntax: name CATSTR string [, string]...
Príklad: LETTERS CATSTR <abc>,<def>
Po preklade: LETTERS="abcdef"
INSTR
- výstupom makra je pozícia prvého výskytu druhého reťazca v prvom reťazci. Ak druhý reťazec nie je v prvom obsiahnutí vráti makro nulu.Syntax: name INSTR [start, ] string1, string2
Príklad: KOLKO INSTR 1,<PROGRAMUJEME V ASSEMBLERI>,<V>
Po preklade: KOLKO=0EH
SIZESTR
- výstupom makra je dĺžka reťazca. Prázdny reťazec má dĺžku nula.Syntax: name SIZESTR string
Príklad: DLZKA SIZESTR <PROGRAMUJEME V ASSEMBLERI>
Po preklade: DLZKA=19H
SUBSTR
- definuje nový reťazec, ako časť pôvodného reťazca.Syntax: name SUBSTR string, position [, size]
Príklad: NOVY SUBSTR <ABCDEFGH>,3,2
Po preklade: NOVY="CD"
IRP
Syntax:
IRP parameter, <argument1, argument2,...>
IRPC
- makro opakuje text s nahradzovaním znaku. Syntax:REPT
- makro kopíruje text toľkokrát, koľkokrát určuje hodnota počet.WHILE
- prekladač opakuje inštrukcie makra do tej doby, pokým nebude podmienka 0 (FALSE). Syntax:GOTO
- makro umožňuje preniesť riadenie na riadok označený návestím. Návestie musí začínať znakom dvojbodka ":", napríklad ":start".Syntax: GOTO návestie
Špeciálne Makro Operátory |
Operátor "&" umožňuje pri rozvinutí makra nahradiť symbolické meno skutočným. Syntax: &name
Pri použití operátora "< >" je reťazec chápaný ako konštantný výraz, krorý sa ničím nenahradzuje. Syntax: <text>
Operátor "!" je analogický a operátorom "< >" s tým rozdielom, že platí iba pre jeden znak (character). Syntax: !character
Operátor "%" sa používa vtedy ak chceme, aby sa výraz pred nahradením vyhodnotil. Syntax: %text
Operátor ";;" spôsobí ignorovanie komentára v bloku makra, t.j. pri rozvíjaní makra sa tento text už neopisuje. Syntax: ;;comment