MAKRA
Pojem makro je vam uz urcite znami. Makro je mozne definovat ako substituciu (inak povedane makro pod svojim menom zoskupuje prikazy, alebo instrukcie, ktore sa maju vykonat). Vyhodou je, ze napr.: casto sa opakujucu cast programu nemusite stale opisovat, naopak nevyhodou je, ze cim viac sa makro v zdrojovom texte objavi tym vacsi bude kod programu.
Syntax:
meno MACRO [parameter1 [,parameter2]...]
ENDM
Nasledujuci priklad ukazuje ako vytvorit, resp. pouzit makro. Nech sa paci, vyskusat.
Priklad:
.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 ma uz v sebe definovanych niekolko makier. Su to nasledujuce makra (
CATSTR, INSTR, SIZESTR, SUBSTR, IRP, IRPC, REPT, WHILE, GOTO). O kazdom si povieme niekolko slov. Prve styri sa pouzivaju na pracu s retazcami. Ak mate nizsiu verziu assembleru ako 3.1 treba pred ich pouzitim uviest direktivu MASM51. Direktiva povoluje pisanie zdrojoveho textu v rozsirenom rezime. Verzia assembleru 3.1 vyhodnocuje makra (CATSTR, INSTR, SIZESTR, SUBSTR) aj bez pouzitia direktivy MASM51. Zostavajuce makra sa pouzivaju na pracu s cyklami.
CATSTR
- spoji viac retazcov do jedneho.Syntax: name CATSTR string [, string]...
Priklad: LETTERS CATSTR <abc>,<def>
Po preklade: LETTERS="abcdef"
INSTR
- vystupom makra je pozicia prveho vyskytu druheho retazca v prvom retazci. Ak druhy retazec nie je v prvom obsiahnuti vrati makro nulu.Syntax: name INSTR [start, ] string1, string2
Priklad: KOLKO INSTR 1,<PROGRAMUJEME V ASSEMBLERI>,<V>
Po preklade: KOLKO=0EH
SIZESTR
- vystupom makra je dlzka retazca. Prazdny retazec ma dlzku nula.Syntax: name SIZESTR string
Priklad: DLZKA SIZESTR <PROGRAMUJEME V ASSEMBLERI>
Po preklade: DLZKA=19H
SUBSTR
- definuje novy retazec, ako cast povodneho retazca.Syntax: name SUBSTR string, position [, size]
Priklad: NOVY SUBSTR <ABCDEFGH>,3,2
Po preklade: NOVY="CD"
IRP
Syntax:
IRP parameter, <argument1, argument2,...>
IRPC
- makro opakuje text s nahradzovanim znaku. Syntax:REPT
- makro kopiruje text tolkokrat, kolkokrat urcuje hodnota pocet.WHILE
- prekladac opakuje instrukcie makra do tej doby, pokym nebude podmienka 0 (FALSE). Syntax:GOTO
- makro umoznuje preniest riadenie na riadok oznaceny navestim. Navestie musi zacinat znakom dvojbodka ":", napriklad ":start".Syntax: GOTO navestie
Specialne Makro Operatory |
Operator "&" umoznuje pri rozvinuti makra nahradit symbolicke meno skutocnym. Syntax: &name
Pri pouziti operatora "< >" je retazec chapany ako konstantny vyraz, krory sa nicim nenahradzuje. Syntax: <text>
Operator "!" je analogicky a operatorom "< >" s tym rozdielom, ze plati iba pre jeden znak (character). Syntax: !character
Operator "%" sa pouziva vtedy ak chceme, aby sa vyraz pred nahradenim vyhodnotil. Syntax: %text
Operator ";;" sposobi ignorovanie komentara v bloku makra, t.j. pri rozvijani makra sa tento text uz neopisuje. Syntax: ;;comment