Макрос в языке ассемблера

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Макрос — символьное имя, заменяющее несколько команд языка ассемблера.

Макросы могут включать в себя инструкции, данные, метки (в том числе и локальные), директивы (в том числе условные) ассемблера, содержать вызовы других макросов. Большинство современных ассемблеров поддерживают передачу макросу входных параметров.

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

Макросы «разворачиваются» в последовательность кода и данных во время ассемблирования (трансляции программы).

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

Достоинства и недостатки

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

  • Упрощение и ускорение написания программы.
  • Повышение компактности исходного кода и его наглядности («читабельности»).
  • Упрощение последующего редактирования текста программы, снижение вероятности внесения рутинных ошибок.
  • Более быстрое выполнение по сравнению с процедурой, так как макрос не требует использования инструкций перехода на процедуру и возврата из неё.

В то же время, использование макросов может иметь и некоторые недостатки:

  • Использование «шаблонного кода», в то время как для каждой конкретной ситуации код, возможно, можно улучшить.
  • Вставка в текст программы одного и того же макроса, генерирующего один и тот же код N раз, может требовать больше памяти программ, чем описание процедуры и затем вызов её те же N раз.

Пример объявления и вставки макроса

Объявление макроса на диалекте ассемблера FASM может иметь вид: <source lang="asm"> macro stos0 {

     xor al,al
     stosb

} </source> При дальнейшей вставке макроса в текст строки <source lang="asm"> stos0 </source> транслятор заменит его на последовательность <source lang="asm"> xor al,al stosb </source>

См. также

Шаблон:Нет источников