|
8.
Директивы управления файлами
Директивы, описываемые в этом разделе, позволяют
управлять исходным и объектным файлами, а также листингом
ассемблерной программы. Под управлением понимается указания
о том, как трактовать элементы входного (исходного) файла и
задание содержимого и объема вывода для выходных (объектный
файл и листинг) файлов.
8.1. Управление исходным файлом.
Для управления исходным файлом предназначены директивы
INCLUDE, .RADIX и COMMENT.
Директива INCLUDE имеет следующий формат:
INCLUDE имя-файла
Содержимого файла с указанным именем, трактуемое как
текст, вставляется в исходный файл на место директивы
INCLUDE. Имя-файла должно определять существующий файл.
Имя-файла может включать в себя полную или частичную
информацию о пути поиска файла. Если имя-файла не содержит
информацию о местонахождении файла, поиск осуществляется в
в директориях, заданных опцией /I MASM, а если файл там не
будет найден, то - в текущем директории. Если файл не
найден, MASM выдает сообщение об ошибке.
Когда ассемблер обнаруживает директиву INCLUDE, он
открывает указанный исходный файл и начинает ассемблировать
содержащиеся в нем предложения. После обработки всех
предложений этого файла ассемблер продолжает ассемблирование
с предложения, непосредственно следующего за INCLUDE.
Директивы INCLUDE могут быть вложенными. Файл,
подлючаемый по этой директиве, также может содержать
директивы INCLUDE.
В листинге предложения из подключаемых файлов
помечаются символом C.
При спецификации путей поиска файла могут
использоваться символы / или \ , что введено для
- 42 -
совместимости с XENIX.
Если необходимо, чтобы местоположение подключаемых
файлов задавалось динамически после формирования исходного
файла, следует в директивах INCLUDE опустить спецификацию
путей поиска, и определять их опцией /I или установкой
текущего директория.
Примеры:
INCLUDE entry
INCLUDE b:\include\record
INCLUDE /include/as/stdio
INCLUDE local\define.inc
Директива .RADIX устанавливает умалчиваемое основание
чисел во входном файле и имеет формат:
.RADIX выражение
В качестве выражения задается число в пределах от 2 до
16, которое определяет, в какой системе счисления трактовать
числа при отсутствии явного указания. Могут быть указаны
следующие значения:
2 - двоичная
8 - 8-ричная
10 - десятичная
16 - 16-ричная
Указанное в директиве .RADIX выражение всегда
трактуется как десятичное число независимо от текущего
умалчиваемого основания. По умолчанию при отсутствии
директивы .RADIX используется десятичная система счисления.
Директива .RADIX не влияет на числа, указанные в
директивах DD, DQ и DT. Числа выражений этих директив всегда
трактуются как десятичные.
Директива .RADIX не влияет на спецификаторы основания
B и D, используемые при задании целых чисел. Если
последним символом целого числа оказывается B или D, он
трактуется как спецификатор системы счисления, а не как
16-ричная цифра, даже если умалчиваемое основание - 16.
Например, число 11B будет восприниматься как двоичное 11, а
не как 16-ричное 11B. Для того, чтобы оно трактовалось как
16-ричное, следует задавать 11Bh.
Примеры:
.RADIX 16
.RADIX 2
Директива COMMENT позволяет указывать ассемблеру, что
выделенный участок исходного файла следует рассматривать как
комментарий. Формат:
COMMENT ограничитель
- 43 -
...
текст
...
ограничитель [[текст]]
Текст, заключенный между ограничителями (которые
должны совпадать), считается комментарием и ассемблированию
не подлежит. В качестве ограничителя берется первый отличный
от пробела символ после ключевого слова COMMENT. Ассемблер
пропускает весь последующий текст до следующего вхождения
такого же ограничителя. Текст комментария не должен
содержать такого символа. Комментарием считается также весь
текст, расположенный на той же строке, что и последний
ограничитель.
Директива COMMENT обычно используется при задании
комментария, занимающего много строк.
Пример:
COMMENT *
Весь текст между звездочками
считается комментарием *
8.2. Управление листингом.
Описываемые в этом разделе директивы позволяют
управлять содержимым и форматом формируемого MASM листинга
ассемблерной программы.
Директивы управления листингом приведены в таблице
8.1.
Директива TITLE задает заголовок листинга программы,
который будет печататься в начале каждой страницы листинга.
Текст заголовка может включать в себя до 60 любых символов.
Каждый модуль может содержать не более одной директивы
TITLE. Если не использовалась директива NAME, первые 6
отличных от пробела символов заданного в TITLE заголовка
рассматриваются как имя модуля.
Директива SUBTTL определяет подзаголовок листинга,
который печатается в начале каждой страницы листинга на
следующей строке после заголовка. Задаваемый текст
представляет собой любую комбинацию символов, из которой в
качестве подзаголовка используютя первые 60 символов. Если
текст опущен, строка подзаголовка в листинге содержит левый
пробел. Программа может содержать любое количество директив
SUBTTL. Каждая последующая директива замещает предыдущую.
- 44 -
Таблица 8.1. Директивы управления листингом.
_______________________________________________________
| | |
| формат | функция |
|_____________________|_______________________________|
| | |
| TITLE текст | задание заголовка листинга |
|_____________________|_______________________________|
| | |
| SUBTTL [[текст]] | задание подзаголовка листинга |
|_____________________|_______________________________|
| | |
| PAGE длина,ширина | задание параметров |
| PAGE+ | страницы |
| PAGE | листинга |
|_____________________|_______________________________|
| | |
| .LIST | печатать листинг |
|_____________________|_______________________________|
| | |
| .XLIST | не печатать листинг |
|_____________________|_______________________________|
| | |
| .LALL | печатать все исходные |
| | предложения |
|_____________________|_______________________________|
| | |
| .SALL | подавить печать |
| | макрорасширений |
|_____________________|_______________________________|
| | |
| .XALL | печатать только код и данные |
|_____________________|_______________________________|
| | |
| .SFCOND | подавить печать условных |
| | блоков с ложными условиями |
|_____________________|_______________________________|
| | |
| .LFCOND | печатать условные блоки |
| | с ложными условиями |
|_____________________|_______________________________|
| | |
| .TFCOND | установить умалчиваемый режим |
| | печати условных блоков |
|_____________________|_______________________________|
| | |
| .CREF | печатать листинг |
| | перекрестных ссылок |
|_____________________|_______________________________|
| | |
| .XCREF [[имя,...]] | подавить печать листинга |
| | перекрестных ссылок |
|_____________________|_______________________________|
- 45 -
Директива PAGE позволяет управлять форматом страницы
листинга.
В первой форме директивы предусмотрены 2 позиционных
параметра, которые устанавливают максимальное число строк
страницы листинга (длина) и максимальное число символов в
строке листинга (ширина). Задаваемая длина должна находиться
в пределах от 10 до 255 (значение по умолчанию - 50). Ширина
может варьироваться от 60 до 132 (значение по умолчанию -
80). Если длина не указана, ширине, если она задана, должна
предшествовать запятая.
Вторая форма директивы PAGE (со знаком +) означает,
что номер секции программы должен быть увеличен, а номер
страницы устанавливается равным 1. Номер страницы листинга
состоит их 2-х компонент: номера секции и номера страницы
внутри секции и имеет следующий вид:
секция-страница
По умолчанию нумерация страниц листинга начинается со
значения 1-1.
Третья форма директивы PAGE (без аргументов)
предписывает MASM перейти на новую страницу листинга.
Директива .XLIST подавляет копирование в листинг
последующих строк исходной программы. Следует помнить, что
обработка MASM директивы .XLIST перекрывает все
предшествующие ей директивы управления листингом.
Директива .LIST восстанавливает копирование в листинг
последующих строк исходной программы.
Директива .LALL сообщает MASM, что листинг должен
содержать все предложения макрорасширений, если они есть,
включая обычные комментарии (с предшествующей ;), но
исключая макрокомментарии (с предшествующей ;;).
По директиве .XALL распечатываются только предложения
макрорасширений, по которым генерируется программный код или
данные. Комментарии игнорируются. Этот режим действует по
умолчанию при отсутствии в исходной программе директив .LALL
и .SALL.
Директива .SALL подавляет распечатку макрорасширений.
Директива .SFCOND подавляет распечатку тел всех
последующих условных блоков, условия ассемблирования которых
окажутся ложными.
Директива .LFCOND восстанавливает распечатку таких
блоков.
Директива .TFCOND устанавливает умалчиваемый режим
распечатки условных блоков. Эта директива работает в
сочетании с опцией /X MASM. Если опция /X при запуске MASM
не была задана, .TFCOND разрешает печать условных блоков с
ложными условиями. Если же опция /X была задана, .TFCOND
подавляет печать таких блоков. Каждая обработка ассемблером
директивы .TFCOND меняет режим распечатки условных блоков с
ложными условиями на противоположный.
- 46 -
Директива .XCREF подавляет генерацию листинга
перекрестных ссылок для меток, переменных и имен. Если в
директиве задан список имен, из листинга перекрестных ссылок
исключаются только указанные объекты, а все остальные в
листинг попадают. Если список содержит более, чем одно имя,
его элементы должны отделяться друг от дпуга запятыми.
Директива .CREF восстанавливает генерацию листинга
перекрестных ссылок.
8.3. Другие директивы.
В языке ассемблере имеются еще 2 директивы, имеющие
некоторое отношение к вводу/выводу. Это директивы %OUT и
NAME.
Директива %OUT имеет следующий формат:
%OUT текст
При обработке ассемблером этой директивы указанный
текст выдается на системный экран. Эта директива полезна при
отслеживании прохождения процесса ассемблирования через
специфичные участки очень большой исходной программы.
Директива %OUT срабатывает на обоих проходах MASM. Для
того, чтобы сообщение выдавалось на каком-либо одном
проходе, можно использовать директивы IF1 и IF2.
Пример:
IF1
%OUT First pass
ENDIF
Сообщение будет выдано только на 1-м проходе.
Директива NAME позволяет присваивать имя текущему
модулю и имеет формат:
NAME имя-модуля
Имя модуля используется программой LINK при выдаче
диагностических сообщений. Имя-модуля может быть любой
комбинацией букв и цифр, из которой используются только
первые 6 символов. Имя должно быть уникальным и не может
совпадать с ключевым словом.
При отсутствии в исходной программе директивы NAME
ассемблер создает умалчиваемое имя модуля, в качестве
которого используются первые 6 символов текста, задаваемого
директивой TITLE. Если же и директива TITLE опущена, модулю
присваивается имя A.
© KOAP
Open Portal 2000
|