Что такое ассемблер?
Языки ассемблеров
Команды языка ассемблера
Код операции
Псевдооперации
Литералы
Свободный формат команд
Некоторые типичные команды ассемблера для машин с побайтовой организацией
Ассемблеры типа «трансляция — выполнение»
Однопроходный ассемблер
Двухпроходный ассемблер
Символы
Подробная блок-схема прохода
Подробная блок-схема прохода 2
Пример трансляции
Таблицы символов общие замечания
Обработка таблицы
Линейный поиск
Двоичный поиск
Сравнение двоичного и линейного способов поиска
Метод хеширования
Пример хеширования
Скученность
Назначение макрокоманды
Различие между макрокомандами и подпрограммами
Форматы макрокоманды
Ключевой макрос
Макропроцессор

Различие между макрокомандами и подпрограммами

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

С другой стороны, макрокоманды являются просто способом сокращения записи для групп команд. Применяя макросредства, программист использует определенную ранее «команду» для представления некоторого блока программы. Ассемблер, обладающий возможностями макро обработки, подставит на место каждого вхождения в программу данного макроса соответствующий блок. Это означает, что, если некоторый макрос используется в программе десять раз, отвечающий ему код вставляется десять раз в программу на языке ассемблера, а следовательно, также и в готовую программу. Такая замена макрокоманды называется макрорасширением. Вхождение имени макроса в исходную программу, вызывающее такое макрорасширение, называется макровызовом.

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

Макрокоманды могут рассматриваться как расширение базового языка ассемблера. Определяя соответствующие макрокоманды, программист, работающий на языке ассемблера, может достичь четкости, компактности и легкости языка программирования высокого уровня, не теряя возможности управления деталями структуры своей программы.

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

Hosted by uCoz