Здавалка
Главная | Обратная связь

Составление и использование макрокоманд



Ассемблер имеет макросредства, которые определяются программистом. Для этого задаются имя макроса, директива МАСRO. Завершается макроопределение директивой ENDM.
<имя макроопр.> MACRO
<тело макроопред., состоящее из операторов >
ENDM < конец макроопред.>.
Затем в любом месте программы, где необходимо выполнение этих команд кодируется имя макроса. В результате Ассемблер сгенерирует необходимые команды.
Пример: init1 macro
mov ah,09h
lea dx, message
int 21h
endm
В макрокомандах могут использоваться параметры. Рассмотрим для сравнения с предыдущим следующий пример:
init2 macro mess
mov ah,09h
lea dx, mess
int 21h
endm
При использовании макроопределения нужно будет задавать фактические параметры. При этом одно и тоже макроопределение будет выводить на экран разные сообщения, которые будут передаваться через формальный параметр mess. Количество параметров может быть любое и задается через ‘,’.
В программе вызов макроса будет в следующем виде: init2 message1
Макросы лучше собирать в библиотеки и хранить на магнитном диске. Для имени этого файла можно использовать любое имя, например: MACRO.LIB. Подключается этот файл с помощью директивы INCLUDE. В начале текста программы нужно задать директиву:
INCLUDE C:MACRO.LIB
Ненужные макроопределения необходимо отключать. Они перечисляются в директиве PURGE < имена макросов > через запятую.
Можно из одного макроопределения вызывать другое макроопределение.
Если в макроопределении есть метки, то при многократном использовании может возникнуть ошибка при дублировании метки. Для универсальности макроопределения используется директива LOCAL, которая кодируется после директивы MACRO:
LOCAL <имя метки>.
При этом генерируется метка с номером ??0000, ??0001 и т.д.
Так как транслятор является двухпроходовым, то для обработки директивы один раз можно использовать конструкцию:
IF1
INCLUDE C:MACRO.LIB
ENDIF
В Ассемблере существуют директивы повторения, которые повторяют блок операторов до директивы ENDM
N=0
REPT 5
N=N+1
DB N
ENDM
Неопределенные повторения IRP N, <args>
IRP N, <12345>
DB N
ENDM
Генерирует байты DB 1, DB 2, DB 3, DB 4, DB 5.
Для управления выполнением блока операторов по условию используются условные директивы.
IF xx (условие)
ELSE (необязательно)
ENDIF (конец)
IF выражение – если выражение !=0
IFE выражение – если выражение ==0
IF1 обработка при первом проходе
IF2 обработка при втором проходе
IFDEF идентификатор – если определен
IFNDEF идентификатор – если неопределен
IFB <аргум> – если пустой символ
IFNB <аргум> – если не пустой символ
IFIDN <аргум1>,<аргум2> – если две строки идентичны
IFDIF <аргум1>,<аргум2> – если две строки неидентичны
Вопросы для самоконтроля

1. Команда перессылки данных. Регистр флагов.

2. Команда сравнения.Команды перехода. Команда повторения. Команды обработки строк.

3. Размещение сегментов программы. Подпрограммы.

4. Стековые операции.

5. Составления и использования макрокоманд.

 








©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.