Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 186

Unknown Author

Пример:

.XLIST    ;все предложения включаемого файла

INCLUDE LISTS.ASM    ;LISTS.ASM не записываются в листииг

.LIST .SALL

После этой директивы в листинг не будут записываться макрорасширения и копии блоков повторений (в листинг попадут только макрокоманды и исходные тексты блоков).

. XALL

После этой директивы в листинг будут записываться макрорасширения и копии блоков повторений, однако в них будут указываться только те предложения, по которым ассемблер генерирует команды и данные (предложения-комментарии и некоторые директивы типа ASSUME или EQU не попадут в листинг). Этот режим устанавливается по умолчанию в начале программы.

.LALL

Директива отменяет действие директив .SALL и .XALL, после нее в листинг будут записываться все предложения всех макрорасширений и всех копий блоков повторений.

.SFCOND

Директива подавляет запись в листинг предложений тех ветвей IF-блоков, которые соответствуют ложным условиям. Этот режим устанавливается по умолчанию в начале программы.

.LFCOND

Директива отменяет действие директивы .SFCOND, т. е. восстанавливает запись в листинг всех ветвей IF-блоков.

14.5. Директивы контроля за работой ассемблера

Здесь бегло рассматриваются директивы ЯА, позволяющие в той или иной мере контролировать процесс трансляции программы.

145.1. Директива %OUT

Встречая при трансляции программы директиву

%OUT <текст>

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

Такие печати полезны для отслеживания процесса трансляции программы. Например, если имеется макроопределение

ex macro х

%оит Обращение: EX X

INC X

ENDM

то, скажем, по макрокоманде EX SI будет сформировано макрорасширение

%OUT Обращение: EX SI INC SI

по которому ассемблер выдаст на экран текст ’’Обращение: EX SI”, а в машинную программу запишет команду INC SI.

14.5.2. Дополнительные IF-директивы

Недостатком директивы %OUT является то, что она "срабатывает" дважды, поскольку ассемблер два раза просматривает текст транслируемой программы.

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