Макроопределение по имени MOVIF генерирует команды MOVSB или MOVSW в зависимости от указанного параметра. Макрокоманду можно кодировать с параметром B (для байта) или W (для слова) для генерации команд MOVSB или MOVSW из MOVS. Обратите внимание на первые два оператора в макроопределении:
MOVIF MACRO TAG
IFIDN <&TAG>,<B>
Условная директива IFIDN сравнивает заданный параметр (предположительно B или W) со строкой B. В случае, если значения идентичны, то Ассемблер генерирует REP MOVSB.
Обычное использование амперсанда (&) — для конкатенации, но в данном примере операнд <TAG> без амперсанда не будет работать. В случае, если в макрокоманде не будет указан параметр B или W, то Ассемблер сгенерирует предупреждающий комментарий и команду MOVSB (по умолчанию).
Примеры в кодовом сегменте трижды проверяют макрокоманду MOVIF: для параметра B, для параметра W и для неправильного параметра.
Не следует делать попыток выполнения данной программы в том виде, как она приведена на рисунке, так как регистры CX и DX не обеспечены правильными значениями.
Важно:
uМакросредства возможны только для полной версии Ассемблера (MASM).
uИспользование макрокоманд в программах на Ассемблере дает в результате более удобочитаемые программы и более производительный код.
uМакроопределение состоит из директивы MACRO, блока из одного или нескольких операторов, которые генерируются при макрорасширениях и директивы ENDM для завершения определения.
uКод, который генерируется в программе по макрокоманде, представляет собой макрорасширение.
uДирективы .SALL, .LALL и .XALL позволяют управлять распечаткой комментариев и генерируемого объектного кода в макрорасширении.
uДиректива LOCAL позволяет использовать имена внутри макроопределений. Директива LOCAL кодируется непосредственно после директивы MACRO.
uИспользование формальных параметров в макроопределении позволяет кодировать параметры, обеспечивающие большую гибкость макросредств.
uБиблиотека макроопределений дает возможность использовать макрокоманды для различных ассемблерных программ.
uУсловные директивы позволяют контролировать параметры макрокоманд.