Физика атомного реактора Сопротивление материалов Математика решение задач Информатика Атомная энергетика безопасность Электротехника и электроника
Знакомство с ассемблером Формат оператора Директивы Макроопределение Макровызовы Макросы с параметрами Процесс ассемблирования Компиляция Задачи компоновщика Динамическая компоновка

Директивы PUBLIC и EXTERN определяют видимость (доступность) символов. Программы часто пишут в виде совокупности файлов. Иногда процедуре, находящейся в одном файле, нужно вызвать процедуру или получить доступ к данным, определенным в другом файле. Чтобы такие перекрестные ссылки между файлами стали возможными, символ (имя), который нужно сделать доступным для других файлов, экспортируется с помощью директивы PUBLIC. Чтобы ассемблер не выдавал предупреждений по поводу использования символа, который не определен в данном файле, этот символ может быть объявлен внешним (EXTERN), то есть определенным в другом файле. Символы, которые не определены ни в одной из этих директив, могут использоваться только в пределах одного файла. Поэтому даже если, например, символ F00 встречается в нескольких файлах, это не вызовет никакого конфликта, поскольку указанный символ локален по отношению к каждому файлу.

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

Многие языки ассемблера, в том числе MASM, поддерживают условное ассемблирование программы. Например:

Эта программа выделяет в памяти одно 32-разрядное слово и вызывает его адрес WSIZE. Этому слову придается одно из значений: либо 32, либо 16 в зависимости от значения W0RDSIZE (в данном случае — 16). Такая конструкция может использоваться в программах для 16-разрядных (как 8088) или 32-разрядных машин (как Pentium 4). Если в начале и в конце машинно-зависимого кода вставить директивы IF и ENDIF, а затем изменить единственное определение, W0RDSIZE, программу можно автоматически настроить на один из двух размеров. Применяя такой подход, можно задействовать одну такую исходную программу для нескольких разных машин. В большинстве случаев все машинно-зависимые определения, такие как WORDSIZE, сохраняются в одном файле, причем для разных машин должны быть разные файлы. Путем включения файла с нужными определениями программу можно легко перекомпилировать для разных машин.

Директива COMMENT позволяет пользователю заменить символ начала комментария (точку с запятой) чем-либо другим. Директива PAGE используется для управления листингом программы. Наконец, директивой END помечается конец программы.

В ассемблере MASM есть еще много директив. Другие ассемблеры Pentium 4 содержат другой набор директив, поскольку эти директивы определяются не архитектурой машины, а вкусами разработчиков ассемблера.

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

Альтернативный подход — оформить эту последовательность в процедуру и вызывать ее в случае необходимости. У такой стратегии тоже есть свои недостатки, поскольку в этом случае каждый раз придется выполнять специальную команду вызова процедуры и команду возврата. Если последовательности команд короткие (например, всего две команды), но используются часто, то вызовы процедур могут значительно сказаться на быстродействии программы. Простым и эффективным решением этой проблемы являются макросы.


Экспертные системы и экспертный анализ Архитектура компьютера Уровень ассемблера