|
Макроассемблер.
Общие сведения
2.1. Общие сведения.
Макроассемблер MASM фирмы MICROSOFT ассемблирует
программы на языке ассемблера для микропроцессоров 8086,
8088, 80186 и 80286 и создает переместимые объектные файлы,
которые могут редактироваться и выполняться в операционной
системе MS-DOS.
Макроассемблер обеспечивает выполнение следующих
функций:
1. Анализ исходного текста на языке ассемблера на
предмет наличия в нем макрокоманд и/или
макроопределений и обработка этих конструкций с
соответствующей коррекцией исходного текста.
2. Синтаксический анализ полученного текста и вывод
необходимой диагностической информации.
3. Формирование объектного модуля.
Воспринимая в качестве входа один файл с исходным
текстом, макроассемблер может формировать до трех выходных
файлов, как показано на рис. 2.1.
_____________
| |
____| имя.LST |
| | (листинг) |
| |___________|
____________________ _____________ | _____________
| | | | | | |
| имя.ASM |___| макроас- |____|____| имя.CRF |
| (исходный текст) | | семблер | | | (перекр. |
|__________________| |___________| | | ссылки) |
| |___________|
| _____________
| | |
|____| имя.OBJ |
| (объектн. |
| модуль) |
|___________|
Рис. 2.1. Работа макроассемблера.
Расширения имен файлов, показанные на рисунке,
принимаются по умолчанию.
Файл листинга содержит распечатку исходного текста в
- 8 -
соответствии со специфицированными директивами ассемблера
режимами и диагностическими сообщениями о результатах
синтаксического анализа. Эти же сообщения дублируются на
консоли.
Файл перекрестных ссылок содержит все используемые во
входном тексте идентификаторы. В дальнейшем он может быть
использован утилитой CREF.
В файле объектного кода формируется объектный модуль.
Этот файл не формируется, если в тексте обнаружены ошибки.
2.2. Запуск макроассемблера.
Ассемблирование исходного файла может производиться в
двух режимах:
1. С использованием подсказок.
2. Посредством командной строки.
Для запуска макроассемблера с использованием подсказок
необходимо ввести командную строку, содержащую только имя
макроассемблера MASM со спецификацией подоглавления, если
она требуется. MASM перейдет в диалоговый режим и серией
подсказок запросит у пользователя информацию о следующих
файлах (ответ заключается в наборе требуемых символов и
нажатии клавиши ENTER):
1. Имя исходного файла. Если при ответе не указано
расширение, предполагается ASM.
2. Имя объектного файла. Если при ответе не указано
расширение, предполагается OBJ. Базовое имя
объектного файла по умолчанию совпадает с базовым
именем исходного файла.
3. Имя файла листинга. Если при ответе не указано
расширение, предполагается LST. Базовое имя файла
листинга по умолчанию NUL.
4. Имя файла перекрестных ссылок. Если при ответе не
указано расширение, предполагается CRF. Базовое имя
файла листинга по умолчанию NUL.
В конце любого ответа после символов / или - могут
быть заданы опции макроассемблера, которые описаны в п.2.3.
Если в каком-либо ответе специфицирован символ ; ,
MASM выйдет из диалогового режима и установит оставшиеся
имена по умолчанию из следующего списка:
<имя исходного файла>.OBJ
NUL.LST
NUL.CRF
В любом ответе также могут быть заданы ответы на
несколько следующих подсказок. В этом случае один ответ от
другого отделяется запятой.
Для запуска MASM посредством командной строки
- 9 -
необходимо ввести командую строку следующего вида:
MASM <имя исходного файла>[,[<имя объектного файла>]
[,[<имя файла листинга>][,[<имя файла перек. ссылок>]]]]
[<опции>][;]
Символ ; может быть специфицирован в любом месте
командной строки до того, как были определены все файлы. В
этом случае имена оставшихся неопределенными файлов
принимаются по умолчанию из приведенного выше списка. Из
этого же списка принимаются по умолчанию имена файлов,
спецификация которых в командной строке опущена (посредством
лишней запятой).
Если в командной строке обнаружена ошибка, об этом
сообщается через консоль, и MASM переходит в диалоговый
режим.
Опции MASM могут располагаться в любом месте командной
строки.
Следующие базовые имена выходных файлов MASM имеют
фиксированный смысл (независимо от того, как запускается
MASM):
NUL - соответствующий файл не формируется
PRN - соответствующий файл направляется на печать
Имя каждого файла может сопровождаться информацией о
подоглавлении, содержащем этот файл, иначе поиск исходного
файла или создание выходного файла будет осуществляться в
текущем подоглавлении.
Работа MASM может быть в любой момент прекращена
нажатием клавиш CONTROL-C.
2.3. Опции MASM.
Опции MASM позволяют в некоторой степени управлять
работой макроассемблера вне связи с исходной программой.
Каждая опция обозначается предшествующим символом /
или - и может кодироваться как строчными, так и заглавными
буквами.
Опции могут располагаться в любом месте командной
строки или ответа на подсказку.
Ниже приведен список опций MASM с описанием
выполняемых ими функций.
/A - Сегменты в объектном файле располагаются в
алфавитном порядке. При отсутствии опции
расположение сегментов соответствует порядку в
исходном файле.
/S - Сегменты в объектном файле располагаются в
- 10 -
порядке следования в исходном файле. Эта опция
введена для совместимости с XENIX.
/B<число> - Установить размер буфера исходного файла (в
килобайтах). Увеличение размера буфера ускоряет
ассемблирование, но требует больше памяти.
Размер буфера может варьироваться от 1 до 63
(К). Если опция не задана, полагается 32 (32К).
/D - Диагностические сообщения после 1-го прохода
поместить в листиг программы. Многие ошибки
1-го прохода исправляются на 2-ом проходе, и,
если не задано /D, в листинг не попадают.
Задание этой опции дает более глубокую
диагностику исходного текста. При спецификации
/D ошибки как 1-го, так и 2-го проходов
выдаются на консоль, даже если файл листинга не
создается.
/D<символ> - Определить символ. Указанный символ вводится в
исходный текст как пустая строка (аналогично
использованию директивы EQU) и может быть
использован в директивах условного
ассемблирования.
/I<путь> - Задание пути поиска файлов, подключаемых в
исходный текст директивой INCLUDE без явного
указания пути. Указание пути в INCLUDE более
приоритетно, чем в опции /I.
/ML - Установить различие между строчными и
заглавными буквами в метках, переменных и
именах. При отсутствии этой опции строчные
буквы автоматически преобразуются в заглавные.
Опция может потребоваться для совместимости с
программами на регистро-чувствительных языках.
/MX - Установить различие между строчными и
заглавными буквами в общих и внешних
переменных. Опция подобна /ML, но ее действие
распространяется лишь на имена, используемые в
директивах PUBLIC или EXTRN.
/MU - Преобразовать в общих и внешних именах строчные
буквы в заглавные. Опция включена по умолчанию
и введена для совместимости с XENIX.
/N - Запретить вывод в файл листинга таблиц макро,
структур, записей, сегментов и имен. На
генерируемый код опция не влияет.
/P - Контроль запрещенного кода. Выполнение
некоторых инструкций микропроцессора 80286
может привести к нежелательным последствиям
(например, загрузка регистра CS). Кодирование
- 11 -
таких инструкций может быть запрещено опцией
/P, наличие которой в таких случаях
вызывает генерацию ошибки с кодом 100.
Директива .286p отменяет эту опцию и разрешает
кодирование запрещенных инструкций.
/R - Генерация кода для процессора с плавающей
точкой. Генерируются коды инструкций арифметики
с плавающей точкой, которые могут быть
выполнены только при наличии сопроцессоров 8087
или 80287.
/E - Генерация кода для эмуляции плавающей точки.
Генерируется код, эмулирующий инструкции
арифметики с плавающей точкой сопроцессоров
8087 и 80287. Эта возможность используется при
отсутствии указанных сопроцессоров. При
использовании этого режима необходимо наличие
специальной библиотеки эмуляции, содержащей
модули, моделирующие операции с плавающей
точкой сопроцессоров 8087 и 80287. Эта
библиотека эмуляции должна использоваться при
обработке объектного модуля с помощью LINK.
/V - Включить в диагностику на консоль информацию о
числе обработанных строк и символов. При
отсутствии этой опции на консоль выдается
информация об ошибках и памяти.
/X - Выводить в листинг тела блоков IF (IF, IFE,
IF1, IF2, IFDEF, IFNDEF, IFB, IFNB, IFIDN и
IFDIF), для которых условия ассемблирования
оказываются ложными и код по этой причине не
генерируется. Следующие директивы ассемблера
влияют на действие опции /X:
.SFCOND - подавляет печать "ложных" блоков;
.LFCOND - разрешает печать "ложных" блоков;
.TFCOND - каждая обработка директивы меняет
состояние опции на противоположное.
/Z - Выводить на консоль строки исходного файла,
содержащие ошибки. При отсутствии этой опции на
консоль выдаются только сообщение об ошибке и
номер строки. Кодирование опции замедляет
работу макроассемблера.
/C - Создать файл перекрестных ссылок. Файл
создается, даже если он подавлен командной
строкой или ответом на подсказку. В последнем
случае имя файла устанавлмвается по умолчанию
( <имя исходного файла>.CRF ). Опция /C введена
для совместимости с XENIX.
/L - Аналогично /C, но относится к файлу листинга
(с учетом умалчиваемого имени файла).
- 12 -
/T - Подавить все сообщения, если в исходном тексте
не встретится ошибок.
© KOAP
Open Portal 2000
|