Иллюстрированный самоучитель по Assembler


Макросредства ассемблера - часть 3


Часто в подобных случаях ограничиваются одной командой jmp, которая создает необходимую задержку в доли микросекунды. В тех случаях, однако, когда устройство сопряжения с оборудованием работает заметно медленнее процессора, приходится включать между командами обращения к портам 5-6 команд jmp. Такой фрагмент можно оформить в виде блока повторения:

rept 6 jmp $+2 endm

Это, пожалуй, проще, чем писать 6 команд jmp.

Макросы повторения имеют несколько разновидностей, которые мы не будем здесь рассматривать.

Макрокоманды

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

Макроопределение должно начинаться строкой с именем макроопределения и директивой macro, в поле аргументов которой указывается список формальных аргументов. Заканчивается макроопределение директивой endm.

Пусть в программе требуется неоднократно сохранять в стеке содержимое трех регистров, но в каждом конкретном случае номера регистров и их порядок отличаются. Оформим эти действия в виде макроопределения:

psh macroa,b,c

push a


push b


push

с


endm

Появление в исходном тексте программы строки

psh АХ, ВХ, СХ

приведет к генерации следующего фрагмента текста:

push AX push BX push CX

Если же в исходном тексте имеется строка

psh DX, ES,

ВР

то соответствующее макрорасширение будет иметь вид:

push DX


push ES


push BP

В качестве фактических аргументов могут выступать любые обозначения ассемблера, допустимые для данной команды. В частности, макровызов




Начало  Назад  Вперед



Книжный магазин