Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Использование библиотек макроопределений.

Удобно тексты макроопределений хранить в отдельном файле, например macro.lib. Для использования макроопределения в программе достаточно написать директиву:

include c:\work\asm\macro.lib

Т.к. транслятор в ассемблере является 2-х проходным, то для обеспечения обработки директивы include только в 1-м проходе (а не в обоих) необходимо использовать следующую конструкцию:

if1 ;директива условной трансляции

include c:macro.lib

endif

Таким образом копия макроопределения не появиться в листинге. Директива include может быть в любом месте программы, но раньше, чем использование макрокоманд.

Конкатенация. (&)

Символ «амперсанд» & указывает ассемблеру на конкатенацию текста ли символов. Следующая макрокоманда move генерирует команду movsb или movsw:

mov macro tag

rep movs&tag

endm

Теперь можно кодировать макрокоманду в виде mov B или mov W. В результате макроопределения ассемблер сцепит параметр с movs и получит rep movsb или rep movsw. Данный пример служит лишь для иллюстрации.

(Команды movsb и movsw - пересылают любое количество байтов или слов соответственно. Обычно используется с префиксом rep

ds:si - откуда

es:di - куда

если df=0 то si и di увеличиваются

если df=1 то si и di уменьшаются)

rep - повторить строковую операцию. Используется в качестве префикса повторения перед строковыми командами. Счетчик повтора - cx.

Директивы повторения.

rept, irp, irpc

Директивы повторения заставляют ассемблер повторить блок операторов, завершаемых директивой endm. Эти директивы не обязательно должны находится в макроопределении, но если они там находятся, то одна директива endm требуется для завершения повторяющего блока, а вторая - для завершения макроопределения.

rept: Повторение.

Операция rept приводит к повторению блока операторов до директивы endm в соответствии с числом повторений, указанных в выражении:

Формат:

rept выражение

endm

Пример:

n=0

rept 5

n=n+1

db n

endm

В результате будет сгенерировано пять операторов db от db 1 до db 5. Т.о. директива rept может использоваться для определения таблицы или части таблицы.

irp: Неопределенное повторение

Irp приводит к повторению блока команд до директивы endm.

Формат:

irp метка, <аргументы>

<Блок кода>

endm

Аргументы, заключенные в угловые скобки - это любое число правильных символов, чисел или строк.

Ассемблер генерирует блок кода для каждого аргумента.

Пример:

irp n, <3,9,17,25,28>

db n

endm

В результате будет сгенерировано пять операторов db от db 1 до db 5.

irpc: Неопределенное повторение символов.

Операция irpc приводит к повторению блока операторов до директивы endm.

Формат:

irpc метка, строка

<блок кода>

endm

Ассемблер генерирует блок кода для каждого символа в строке ‘строка’.

Пример:

irpc n, 34567

dw n

endm

В результате будет сгенерировано пять операторов db от db 3 до db 7.

Условные директивы.

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

Формат:

ifxx условие ;Начало if структуры

...

else

...

endif ;Конец if структуры

Директива else может отсутствовать.

Если условие - истинно, то ассемблер выполняет условный блок до директивы endif. Если условие ложно, то ассемблер выполняет условный блок после else, а при его отсутствии вообще обходит условный блок.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]