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

13.4. Операции в макроопределениях

Макроассемблер предоставляет возможность при задании макроопределений пользоваться следующими операциями

Операция &. Формат:

текст&текст

Вызывает конкатенацию (слияние) текста или имен.

Операция позволяет задавать модифицируемые метки и операнды.

Пример. Следующее макроопределение образует таблицу байтов с заданным именем и заданной длиной:

DEF_TABLE MACRO SUFFIX, LENGTH

TАBLE&SUFFIX DB LENGTH DUP(?)

ENDM

Если в программе будет указан оператор

DEF_TABLE А, 5

то Ассемблер превратит его в оператор

TABLEА DB 5 DUP(?)

Операция ;;. Формат:

;; комментарий.

Заставляет Ассемблер опустить комментарии при расши­рении макроопределения. Без комментариев окончательная программа будет за­нимать меньше памяти и поэтому будет транслироваться быстрее.

При задании макроопределений пользоваться обычным признаком комментария (;) следует только в абсолютно необходимых случаях, а в остальных случаях следует использовать ";;".

Операция !. Формат:

!символ

Используется в аргументе для указания Ассемблеру, что символ надо использовать как литерал, а не как имя, т.е. вне зависимости от любого специального значения, которое он может иметь в противном случае.

Операция %. Формат:

%текст

Трактует текст как выражение, вычисляет его значение и заменяет текст на полученный результат. Текст может быть или числовым выражением, или уравнением.

Операция < >. Формат:

<текст>

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

13.5. Задание макроопределений в исходных программах

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

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

Задание макроопределений непосредственно в тексте программы имеет недо­статок – ими можно воспользоваться только в этой программе. Чтобы они были до­ступны и другим программам, их надо помещать в библиотеку макроопределений.

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

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

После того как такой файл создан, его содержимое можно считывать в любую исходную программу. Тем самым все макроопределения библиотеки становятся доступными для этой программы. Чтобы использовать какое-либо из них, доста­точно указать его имя.

Библиотека макроопределений представляет собой исходный файл, содержащий их текст. Следовательно, библиотечный файл можно создать с по­мощью любой программы обработки текстов точно так же, как создается обычная программа.

13.5.2. Указания для задания макроопределений

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

1. Документируйте макроопределения как можно тщательнее. Включайте по­больше комментариев. Помните, смысл Ваших макроопределений должен быть по­нятен любому, кто будет ими пользоваться, а не только Вам.

2. При вводе комментариев пользуйтесь операцией ";;", а для разделения полей оператора нажимайте клавиши табуляции (вместо ввода пробелов). Эти шаги по­могут свести размеры Ваших программ к минимуму, что ускорит их трансляцию.

3. Старайтесь делать макроопределения как можно более универсальными. Если Вам требуется специфичное макроопределение, то по возможности выражай­те его через более универсальные макроопределения.

4. Если макроопределение содержит метки, перечислите их в операторе LOCAL.

5. Сохраняйте все используемые в макроопределении регистры, за исключением выходных. Как обычно, это делается с помощью операторов PUSH в начале макро­определения и POP в конце.

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

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