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


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

write MACRO string

mov ah,9h

mov dx,offset &string

int 21h

ENDM

Макроопределение начинается с директивы MACRO, перед которой указывается имя макрокоманды (write в нашем случае). После оператора MACRO можно указать одно или несколько произвольных имен, которые воспринимаются ассемблером, как имена формальных аргументов. В случае указания нескольких параметров, они разделяются запятыми. Заканчивается макроопределение оператором ENDM. Расположение макроопределения не имеет значения, так как оно не транслируется, а только запоминается транслятором для дальнейшего использования. Однако макроопределение должно предшествовать строкам его вызова.

Текст макроопределения пишется так же, как и текст любой программы. Формальные аргументы используются в макрокоманде так, как если бы это были обычные элементы программной строки. В приведенной программе используется один параметр string, который служит для передачи в макрорасширение имени выводимой на экран строки. Вообще параметры макроопределения могут заменять собой любые элементы языка: обозначения регистров, команд, описателей, констант и. т. д.

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

Загрузка...