Turbo Assembler 3.0. Руководство пользователя

Общие макрокоманды, состоящие из нескольких строк


Турбо Ассемблер связывает тело макрокоманды, состоящей из нескольких строк (включая директивы, инструкции и другие макроко- манды) с символьным именем макрокоманды. При использовании имени макрокоманды в качестве директивы Турбо Ассемблер включает в программу тело макрокоманды (операторы). Таким образом вы можете использовать макрокоманду, состоящую из нескольких строк, нес- колько раз.

Приведем синтаксис общей макрокоманды из нескольких строк режима Ideal:

MACRO имя список_параметров тело_макрокоманды ENDM

В режиме MASM общее определение макрокоманды из нескольких строк имеет следующий синтаксис:

имя MACRO список_параметров тело_макрокоманды ENDM

где "имя" - это имя определяемой вами макрокоманды из нескольких строк. "Тело_макрокоманды" содержит операторы, которые составляет тело макрорасширения. В макрокоманду вы можете помещать любые до- пустимые операторы Турбо Ассемблера (и любое их число). Макроко- манду завершает ключевое слово ENDM.

В следующем примере определяется макрокоманда с именем PUSHALL, которая при вызове включает в вашу программу тело макро- команды, состоящее из трех инструкций PUSH:

PUSHALL MACRO PUSH AX BX CX DX PUSH DS SI PUSH ES DI ENDM

"Список_параметров" - это список формальных аргументов (их идентификаторов) макрокоманды. Он имеет следующий синтаксис:

[формальный_аргумент [,формальный_аргумент].]

В макрокоманде вы можете использовать любое число формальных аргументов (если они не умещаются на одной строке, для продолже- ния на другой строке можно использовать символ /). Например:

ADDUP MACRO dest,\ ; dest - это первый формальный ; аргумент, а s1,s2 - ; это второй и третий ; аргумент макрокоманды MOV dest,s1 ADD dest,s2 ENDM

Каждый формальный аргумент имеет следующий синтаксис:

имя_формального_аргумента[:тип_аргумента]

где "имя_аргумента" - это символьное имя, используемое для подс- тановки (вместо него) фактического параметра, передаваемого мак- рокоманд при ее вызове. Необязательный "тип_аргумента" задает ка- кую-то информацию о виде фактического параметра, воспринимаемого при вызове макрокоманды. Поддерживаются следующие типы:


Типы формальных аргументов Таблица 14.1 -----------------------T----------------------------------------¬ ¦ Тип ¦ Значение ¦ +----------------------+----------------------------------------+ ¦ REQ ¦ Аргументы не могут быть нулевыми или ¦ ¦ ¦ состоять из пробелов. ¦ ¦ ¦ ¦ ¦ =<текстовая_строка> ¦ Заключенная в кавычки текстовая строка ¦ ¦ ¦ задает используемое по умолчанию зна- ¦ ¦ ¦ чение аргумента (когда фактический ар- ¦ ¦ ¦ гумент является нулевым или состоит из ¦ ¦ ¦ пробелов). ¦ ¦ ¦ ¦ ¦ VARARG ¦ Фактический аргумент состоит из ос- ¦ ¦ ¦ тальной части макровызова, интерпрети- ¦ ¦ ¦ руемого как список аргументов. Для ¦ ¦ ¦ обеспечения этой интерпретации исполь- ¦ ¦ ¦ зуются угловые скобки, запятые. ¦ ¦ ¦ ¦ ¦ REST ¦ Фактический аргумент состоит из ос- ¦ ¦ ¦ тальной части макровызова, интерпрети- ¦ ¦ ¦ руемого как непосредственный текст. ¦ L----------------------+-----------------------------------------


Содержание раздела