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