ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



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