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

3.5.2. Макрооператоры

Макрооператор «&» (амперсанд) используется для того, чтобы параметр, переданный в качестве операнда макроопределению или блоку повторений, заменялся на значение до обработки строки ассемблером. Так, например, следующий макрос выполнит команду PUSH EAX, если его вызвать как PUSHREG А:

pushreg macro letter

push e&letter&x

endm

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

irp number, <1,2,3,4>

msg&number db ?

endm

Макрооператор «<>» (угловые скобки) действует так, что весь текст, включенный в эти скобки, рассматривается как текстовая строка, даже если он содержит пробелы или другие разделители. Как мы уже видели, этот макрооператор используется при передаче текстовых строк в качестве параметров для макросов. Другое частое применение угловых скобок — передача списка параметров вложенному макроопределению или блоку повторений.

Макрооператор «!» (восклицательный знак) используется аналогично угловым кавычкам, но действует только на один следующий символ, так что, если этот символ — запятая или угловая скобка, он все равно будет передан макросу как часть параметра.

Макрооператор «%» (процент) указывает, что следующий за ним текст является выражением и должен быть вычислен. Обычно это используется для того, чтобы передавать в качестве параметра в макрос не само выражение, а его результат.

Макрооператор «;;» (две точки с запятой) — начало макрокомментария. В отличие от обычных комментариев текст макрокомментария не попадет в текст программы при подстановке макроса и не попадает в листинг. Это сэкономит память при ассемблировании программы с большим количеством макроопределении.

3.5.3. Другие директивы, используемые в макроопределениях

Директива EXITM выполняет преждевременный выход из макроопределения или блока повторений. Например, следующее макроопределение не выполнит никаких действий, то есть не будет расширено в команды процессора, если параметр не указан:

pushreg macro reg

ifb <reg>

exitm

endif

push reg

endm

LOCAL метка... — перечисляет метки, которые будут использоваться внутри макроопределения, чтобы не возникало ошибки «метка уже оп­ределена» при использовании макроса более одного раза или если та же метка присутствует в основном тексте программы. Операнд для LOCAL — метка или список меток, которые будут использоваться в макросе.

PURGE имя_макроса — отменяет определенный ранее макрос. Эта директива часто применяется сразу после INCLUDE, включившей в текст программы файл с большим количе­ством готовых макроопределений.

3.6. Другие директивы

3.6.1. Управление файлами

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

INCLUDELIB имя_файла — директива, указывающая компоновщи­ку имя дополнительной библиотеки или объектного файла, который по­требуется при компоновке данной программы. Например, если исполь­зуются вызовы процедур или обращение к данным, определенным в других модулях. Использование этой директивы позволяет не указы­вать имена дополнительных библиотек при вызове компоновщика.

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