Ассемблер и макроассемблер

После того, как исходный файл уже создан, можно применить ассемблер. Существуют две версии ассемблера: полная версия, называемая Макроассемблером, которая на специальной, отведенной для программы ассемблера дискете, именуется MASM.EXE, и менее полная версия - Ассемблер, или ASM.EXE - без возможности работать с макроопределениями. Если для эффективного использования программы MASM требуется объем памяти 96К, то для программы ASM достаточно 64К. Указанные значения никак не связаны с объемом памяти, занимаемой исходной программой. Они относятся к объему памяти, необходимой для ассемблирования, а не выполнения уже оттранслированной программы. Поэтому возможна ситуация, когда для разработки пользовательской программы, требующей для своего выполнения только 4К, необходима ЭВМ с объемом памяти не менее 64К.

Входной информацией для ассемблера является исходный файл, созданный редактором EDLIN, либо аналогичным редактором. Исходный файл - это текстовый файл в кодах ASCII. В результате работы ассемблера может получиться до трех выводных файлов. Объектный файл представляет собой вариант исходной программы, записанной на машинном языке. Объектный файл - это еще не совсем готовая для выполнения программа, однако она близка к реальномй машинному языку. Листинговый файл является текстовым явйлом в кодах ASCII, включающим как исходную информацию, так и информацию, полученную в результате работы ассемблера. Приведенные в данной книге примеры являются ассемблерными листинговыми файлами. И наконец, ассемблер может сформировать файл перекрестных ссылок. Этот файл, не являющийся ни программой на машинном языке, ни текстовым файорм, содержит информацию об использовании символов и меток в ассемблерной программе. Как и в случае объектного файла, перед использованием файла перекрестных ссылок требуется его дополнительная обработка.

Запуск ассемблера осуществляется командой DOS

A>ASM

или

A>MASM

Команда ASM запускает усеченный вариант ассемблера, а команда MASM - Макроассемблер. После того, как ассемблер начинает выполняться, он просит указать: какие файлы будут использованы при ассемблировании. На рис.П5.10 приводится последовательность команд для запуска ассемблера. После того, как команда ASM введена, DOS загружает в память ассемблер. Ассемблер выводит на экран название версии и переходит к выдаче запросов к оператору. Если в вашей системе имеется только один дисковод с гибким диском, то на этом этапе вы можете вынуть дискету с ассемблером и вставить дискету с данными. Ассемблер запрашивает: какой файл будет транслироваться, при этом достаточно ввести только имя этого файла без указания типа .ASM. Кроме этого, ассемблер запрашивает имена выходных файлов. Объектному файлу ассемблер присваивает то же имя, что и у исходного файла, но с расширением .OBJ, если только вы не захотите его изменить. В данном примере ответ оператора "B:" является указанием ассемблеру, чтобы он записал объектный файл на диск в дисковод B:. Аналогичные ответы оператора на запросы по поводу листингового файла и файла перекрестных ссылок сообщают ассемблеру, чтобы эти файлы он также записал на диск в дисководе B:. В справочнике диска, установленного в дисководе B:, можно увидеть все полученные в результате ассемблирования файлы.

Для всех запросов имеются режимы, применяемые по умолчанию. Если в ответ на любой из этих запросов нажать клавишу возврата, то ассемблер использует режим по умолчанию. Для листингового файла и файла перекрестных ссылок по умолчанию принимается значение NUL. Для DOS файл типа NUL - это специальный файл: все, что записывается в файл NUL не доступно и не может быть восстановлено. Файл NUL относится к файлам типа WOF (write=only file - файл только для записи).

Если ассемблер во время ассемблирования обнаружит какие-нибудь ошибки, он записывает их в листинговый файл. Кроме того, он выводит их на дисплей, в результате чего можно непосредственно исправить любые из обнаруженных ощибок и нет необходимости выискивать их в листинговом файле. Если вы пользуетесь сокращенной версией ассемблера, ASM, то информация об ошибках содержит только их коды. В случае Макроассемблера, MSAM, выводится и код, и информация об ошибке. В уменьшенном варианте ассемблера не остается места для текстового сообщения об ошибке. В нижней части рис.П5.10 показан более простой способ запуска Макроассемблера. Этот метод удобен, когда в системе имеется два дисковода с гибкими дисками. В этом случае дискета с ассемблером устанавливается в дисковод A:, а дискета с информацией, содержащий исходный файл, - в дисковод B:. Устанавливается режим выбора по умолчанию дисковода B:. Ассемблер запускается с помощью команды A:ASM. В оставшейся части команды - FIG5_10,,,; - содержится вся информация для ассемблера, которая запрашивалась у оператора в предыдущем примере. FIG5_10 определяет имя файла, который нужно ассемблировать, а последовательность запятых служит указанием ассемблеру сгенерировать объектный, листинговый файл и файл перекрестных ссылок в соответствии со стандартным соглашением об именах файлов. При этом методе ассемблирования получаются точно такие же результаты, что и в первом случае.

Существует много способов того, как указать ассемблеру имена файлов. Два рассмотренных выше примера соответствуют крайним случаям. В первом примере в ответ на запрос указывалось имя каждого из файлов. Во втором случае не было необходимости ни в каких запросах. Более подробно различные варианты, возможные в команде ASM (или MASM), описываются в справочном руководстве по Макроассемблеру.

После окончания ассемблирования можно воспользоваться полученными выходными файлами. Объектный файл является исходным для следующего этапа формирования выполняемой программы на машинном языке. Это - этап редактирования связей LINK, который описывается в следующем разделе.

В листинговом файле соединяются исходный файл и читабельный вариант программы на машинном языке. Этот файл может быть выведен на дисплей с помощью команды дисковой операционной системы TYPE, например,

A>TYPE B:FIG5_11.LST

Команда TYPE загружает в память содержимое файла и выводит его на дисплей. Одновременно этот же файл может быть выведен на печать, если перед выполнением команды TYPE нажать клавиши Ctrl=PrtSc. Нажатие Ctrl=PrtSc предписывает DOS осуществлять вывод как на экран, так и на принтер. В результате листинг выводится и на дисплей, и на печать. Ширину листинга следует задать равной 132 символам. Это выполняется с помощью команды ассемблера PAGE, которая, как вы могли заметить, присутствует почти во всех приводимых примерах программ. Команда

PAGE ,132

предписывает ассемблеру установить ширину листингового файла равной 132 символам. Кроме того, перед выводом на принтер нужно установить ширину печатаемой колонки. Это можно выполнить с помощью команды MODE дисковой операционной системы.

A>MODE LPT1:132

Данная команда устанавливает режим, при котором на принтере фирмы IBM печатается 132 колонки. В этом случае листинговый файл распечатывается без смещения строк, которого нельзя избежать на дисплее.

Таблица символических имен

В листинговом файле содержится дополнительная информация, о которой до сих пор в этой книге нигде не говорилось. После листинга программы выводится таблица символических имен. На рис.П5.11 показан пример такой таблицы, которая является таблицей имен для программы, приведенной на рис.П5.6. В этой таблице перечислены все символические имена, определенные в программе, и кроме того, указаны атрибуты каждого из них. Будучи очень формальной системой, ассемблер хранит эту информацию и для удобства пользователя приводит ее в листинговом файле. Символические имена подразделяются при этом на метки, переменные и константы. В таблице приведено значение каждого имени, если оно известно, и кроме того, безотносительно к типу данных - его длина.

Перекрестные ссылки

Чтобы воспользоваться файлом перекрестных ссылок, сформированным ассемблером, требуется дополнительная обработка. Для перевода файла типа .CRF в текстовый файл в коде ASCII нужно выполнить программу CREF. Программа CREF запускается точно так же, как и ассемблер, за исключением того, что при запуске задаются только два файла: входной файл типа .CRF и выходной файл типа .REF. При вводе команды

DOS A>CREF

запрашиваются имена двух файлов. Альтернативой может служить команда

A>CREF B:FIG5_10,B

которая в качестве входного файла использует файл B:FIG5_10.CRF и формирует файл B:FIG5_10.REF. Как и случае с ассемблером имеются и другие варианты данной команды, описанные в справочном руководстве по Макроассемблеру.

На рис.П5.12 показан выход формирователя перекрестных ссылок. Данная конкретная таблица перекрестных ссылок получена для программы, приведенной на рис.П5.6. В левом столбце перечислены все символические имена, определенные в программе. Напротив каждого символичсекого имени приводится последовательность целочисленных параметров. Числа соответствуют номерам строк, в которых появляется это имя. Если за номером строки следует символ #, то имя было определено в этой строке. Если же символ # отсутствует, то значит в этой строке содержится ссылка на имя.

Как может быть использован листинг перекрестных ссылок? Перекрестные ссылки позволяют определить, в каком месте используется каждое имя. Например, если переменная получает неверное значение, то листинг перекрестных ссылок показывает все команды, где имеются ссылки на данное символическое имя. Это поможет определить те команды, с которыми связано неправильное выполнение программы. Возможно также, что вы занимаетесь модификацией уже существующей программы, написанной кем-то другим или же вами, но так давно, что вы успели забыть, как эта программа работает. Если вы захотели изменить одну из подпрограмм, то вам должно быть известно, какие части программы эту подпрограмму используют. Листинг перекрестных ссылок показывает все команды CALL (а так же другие команды, имеющие к этому отношение), в которых есть ссылки на это символическое имя. Проанализировав соответствующие места программы, вы можете решить: допустимо ли вносимое изменение для всех тех участков, откуда вызывается данная подпрограмма. Листинг перекрестных ссылок значительно облегчает задачу определения всех участков программы, содержащих ссылки.

Хостинг от uCoz