Опции транслятора TASM и редактора связей TLINK

## Директивы управления листингом

Директивы управления листингом делятся на следующие группы:

- общие директивы управления листингом
- директивы вывода в листинг включаемых файлов
- директивы вывода блоков условного ассемблирования
- директивы вывода в листинг макрокоманд
- директивы вывода в листинг информации о перекрестных ссылках
- директивы изменения формата листинга

При рассмотрении директив обращайте внимание на то, что их формат отличается для режимов работы транслятора MASM и IDEAL:

- директивам режима MASM предшествует точка;
- директивам режима IDEAL предшествует знак “%”.

В остальном синтаксис директив простой. Большинство директив не имеет операндов. Директивы, как и команды, задаются в отдельной строке в том месте программы, с которого должно начаться их действие.

### Общие директивы управления листингом

Директивы этой группы предназначены для управления видом файла листинга. Все директивы являются парными — это означает, что если одна директива что-то разрешает, то другая, наоборот, запрещает. Рассмотрим назначение этих пар директив.

%LIST и %NOLIST (.LIST и .XLIST)
Директивы .LIST или %LIST определяют необходимость вывода в файл листинга всех строк исходного кода. Эти директивы подразумеваются по умолчанию.
Для запрета вывода в файл листинга всех строк исходного кода необходимо использовать директивы .XLIST или %NOLIST. В тексте программы их можно применять произвольное количество раз, при этом очередная директива отменяет действие предыдущей.

%CTLS и %NOCTLS
Если предыдущие директивы влияют на полноту представления исходного кода в целом, то директивы %CTLS и %NOCTLS управляют выводом в файл листинга самих директив управления листингом.

%SYMS и %NOSYMS Эти директивы определяют, включать (%SYMS) или не включать (%NOSYMS) в файл листинга таблицу идентификаторов.

### Директивы вывода текста включаемых файлов

%INCL и %NOINCL
Эти директивы позволяют регулировать включение в файл листинга текста включаемых файлов (по директиве INCLUDE). По умолчанию включаемые файлы записываются в файл листинга. Директива %NOINCL запрещает вывод в файл листинга всех последующих включаемых файлов, пока вывод снова не будет разрешен директивой %INCL.

### Директивы вывода блоков условного ассемблирования

%CONDS и %NOCONDS (.LFCOND и .SFCONDS)
Для исследования исходного текста программы, содержащего директивы условной компиляции, удобно использовать директивы, регулирующие включение блоков условной компиляции в листинг программы.
Директива %CONDS (.LFCOND) заставляет TASM выводить в файл листинга все операторы условных блоков. При этом в файл листинга выводятся все блоки, в том числе с условием false. Директива %NOCONDS (.SFCONDS) запрещает вывод в файл листинга блоков условного ассемблирования с условием false.
Директива .TFCOND переключает режимы вывода %CONDS (.LFCOND) и %NOCONDS (.SFCONDS). Эту директиву можно использовать как отдельно, так и совместно с директивами .LFCOND и .SFCONDS.
Первая директива .TFCOND, которую обнаруживает TASM, разрешает вывод в листинг всех блоков условного ассемблирования.
Следующая директива .TFCOND будет запрещать вывод этих блоков. С директивой .TFCOND можно использовать параметр командной строки транслятора TASM ???????????????????????????????????? /X: согласно ему блоки условного ассемблирования будут сначала выводиться в листинг, но первая же директива .TFCOND запретит их вывод.

### Директивы вывода макрорасширений

%MACS (.LALL) и %NOMACS (.SALL)
Аналогично директивам вывода блоков условной компиляции при отладке программы удобно регулировать полноту информации о применяемых макрокомандах. По умолчанию транслятор включает макрорасширения в файл листинга. Можно запретить вывод макрорасширений в файл листинга, что удобно на некоторых стадиях отладки. Директива %MACS (.LALL) разрешает вывод в листинг всех макрорасширений. Директивы %NOMACS (.SALL) запрещает вывод всех операторов макрорасширения в файл листинга. В режиме MASM можно использовать директиву .XALL, позволяющую выводить в листинг только те макрорасширения, которые генерируют код или данные.

### Директивы вывода листинга перекрестных ссылок

Приведенные выше директивы %SYMS и %NOSYMS регулировали вывод в листинг таблицы идентификаторов, в которой приводится информация о метках, группах и сегментах, но там не сообщается, где они определены и где используются. Информация в таблице перекрестных ссылок исправляет этот недостаток. Она облегчает поиск меток и полезна для отладки программы. В приложении 1 приведена опция командной строки TASM /c для получения таблицы перекрестных ссылок. Но действие этой опции распространяется на весь исходный файл, что может быть не совсем удобным. Поэтому TASM дополнительно предоставляет директивы для создания таблиц перекрестных ссылок только для отдельных частей исходного кода. Директивы %CREF (.CREF) и %NOCREF (.XCREF) соответственно разрешают и запрещают сбор информации о перекрестных ссылках, начиная с точки, где они были определены. При этом директивы %NOCREF (.XCREF) позволяют выборочно запрещать сбор информации о перекрестных ссылках для определенных идентификаторов в программе. Эти директивы имеют следующий синтаксис:
%NOCREF (.XCREF) [идентификатор, ...]

Если в директиве %NOCREF (.XCREF) не указать идентификатор, то вывод перекрестных ссылок запрещается полностью, если указать некоторые идентификаторы, то информация не будет собираться только для этих идентификаторов.

### Директивы изменения формата листинга

Директивы этой группы позволяют управлять форматом файла листинга.

.PAGE
Директива .PAGE задает высоту и ширину страницы файла листинга и начинает его новую страницу. Она имеет следующий синтаксис:

PAGE [число_строк][,число_столбцов] PAGE +

Здесь:

- число_строк задает число строк, выводимых на странице листинга;
- число столбцов находится в диапазоне 59...255 и задает число столбцов на странице.

Если опустить один из этих параметров, то текущая установка данного параметра останется без изменений. Для изменения только числа столбцов необходимо указать перед этим параметром запятую. С помощью директивы .PAGE можно разбивать листинг на разделы, в пределах которых нумерация начинается с нуля. Так, при указании после директивы .PAGE символа “+” начинается новая страница, номер раздела увеличивается, а номер страницы снова устанавливается в 1. Если использовать директиву .PAGE без аргументов, то листинг возобновляется с новой страницы без изменения номера раздела.

%PAGESIZE (.PAGESIZE)
Директива %PAGESIZE работает так же, как и директива .PAGE, но, в отличие от последней, она не начинает новую страницу, а лишь определяет ее параметры:

%PAGESIZE [число_строк][,число_столбцов]

%NEWPAGE
Директива %NEWPAGE работает аналогично директиве .PAGE без аргументов. Строки исходного текста после директивы %NEWPAGE будут начинаться с новой страницы.

%BIN
Директива %BIN устанавливает длину поля объектного кода в файле листинга. Ее синтаксис:

%BIN размер

Здесь размер — некоторая константа.
По умолчанию поле объектного кода занимает в файле листинга до 20 позиций.

%DEPTH
Директива %DEPTH устанавливает размер поля глубины в файле листинга. Ее синтаксис:

%DEPTH размер

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

%LINENUM
Директива %LINENUM позволяет задать размер поля занимаемого номерами строк в файле листинга:

%LINENUM размер

По умолчанию под номер строки отводятся четыре столбца.

%TRUNC и %NOTRUNC
Директивы %TRUNC и %NOTRUNC предназначены для усечения длинных полей листинга. Их синтаксис:

%TRUNC и %NOTRUNC

Если некоторая строка исходного кода получается слишком длинной, то она автоматически усекается. Если возникает необходимость увидеть всю генерируемую строку, то можно использовать директиву %NOTRUNC, действие которой будет заключаться в том, что слишком длинная строка будет переноситься на следующую строку. Для включения режима усечения нужно использовать директиву %TRUNC. Такие переключения можно осуществлять неограниченное количество раз.

%PCNT
Директива %PCNT задает размер поля “сегмент:смещение” в файле листинга. Ее синтаксис:

%PCNT размер

Здесь размер — число столбцов, которое необходимо отвести для смещения в текущем ассемблируемом сегменте.
По умолчанию TASM устанавливает размер, равный 4 для обычных 16-битных сегментов (атрибут размера адреса use16) и 8 для 32-битных сегментов (атрибут размера адреса use32). Директива %PCNT позволяет переопределить эти используемые по умолчанию значения.

%TITLE
Директива %TITLE задает заголовок файла листинга. Ее синтаксис:

%TITLE “текст”

Здесь текст — строка, которая будет выводиться в верхней части каждой страницы после имени исходного файла и перед заголовком, заданным по директиве %SUBTTL.
В отличие от других директив, %TITLE можно использовать в программе только один раз.

%SUBTTL
Директива %SUBTTL задает подзаголовок файла листинга. Ее синтаксис:

%SUBTTL “текст”

Подзаголовок представляет собой текст, который выводится в верхней части каждой страницы после имени исходного файла и после заголовка, заданного директивой %TITLE. Директиву %SUBTTL можно указывать в программе столько раз, сколько необходимо. Каждая директива изменяет подзаголовок, который будет выводиться на следующей странице листинга.

%TABSIZE
Директива %TABSIZE задает позицию табуляции в файле листинга. Ее синтаксис:

%TABSIZE размер

Здесь размер — число столбцов между двумя позициями табуляции в файле листинга (по умолчанию 8 столбцов).

%TEXT
Директива %TEXT используется для задания длины поля исходного текста в файле листинга. Ее синтаксис:

%TEXT размер

Здесь размер — число столбцов, используемых для вывода исходных строк. Если размер строки превышает длину этого поля, то строка будет либо усекаться, либо переноситься на следующую строку, в зависимости от директив %TRUNC или %NOTRUNC.