Статьи по Assembler

       

Компиляция файлов .asm


Этот материал дополняет статью MS Developer Studio - среда разработки для ASM. Здесь приведен формат командной строки компилятора MASM 6.1+, расшифровка ее опций и комментарии по их применению при работе в среде MS Developer Studio.

Командная строка MASM имеет вид:
ML [/options] filename [/options] filename [/link linkoptions]

Здесь:

  • /options - необязательный перечень опций (см.таблицу ниже)
  • filename - имена файлов исходных текстов, подлежищих компиляции, разделенные пробелами. В среде MS Developer Studio обычно указывается только одно имя в виде шаблона $(InputPath).
  • /link linkoptions - командная строка компоновщика в случае, если используется опция /Bl. В среде MS Developer Studio обычно не применяется.



опция назначение применение для win32
/AT Enable tiny model (.COM file)
Создать файл в формате .com (модель tiny)
Не применяется, так как формат исполняемого файла .com не используется в Win32.
/Bl<linker> Use alternate linker
Использовать альтернативный компоновщик
Обычно не применяется, так как возможностей link.exe вполне достаточно. Используется опция /c
/c Assemble without linking
Только компиляция, без компоновки
Обязательно для применения в среде MS Developer Studio, чтобы выполнять компоновку отдельным этапом.
/Cp Preserve case of user identifiers
Сохранение регистра пользовательских идентификаторов
Применение не обязательно, но возможно для дополнительного контроля синтаксиса. Вызывает ошибку "A2006: undefined symbol" при несовпадении регистра в объявлении идентификатора и обращении к нему. Позволяет избежать ошибок на этапе компоновки в случае, если идентификатор объявлен с неверным регистром.
/Cu Map all identifiers to upper case
Приведение всех пользовательских идентификаторов к верхнему регистру
Не применяется, так как компоновка приложений Win32 чувствительна к регистру.
/Cx Preserve case in publics, externs
Сохранение регистра идентификаторов, объявленных публичными и внешними
В применении нет необходимости. Регистр идентификаторов имеет смысл на этапе компоновки, но не на этапе компиляции.
/coff Generate COFF format object file
Создать файл в формате COFF
Применение обязательно: это стандартный для windows формат объектных и исполняемых файлов.
/D<name>[=text] Define text macro
Описание текстового макроса
Применяется по усмотрению программиста. Аналог директив EQU или =. Если текст содержит пробелы, его следует взять в кавычки. Обычно используется в отладочном версии приложения для объявления имени DEBUG.
/EP Output preprocessed listing to stdout
Вывод листинга препроцессора в stdout
Обычно применять нет необходимости. Листинг препроцессора представляет собой исходный текст вместе с включаемыми файлами.
/F<hex> Set stack size (bytes)
Определить размер стека (байт)
Практически не применяется. То же, что опция /STACK компоновщика link.exe. Обычно используется значение по умолчанию - 1 Мбайт.
/Fe<file> Name executable
Имя исполняемого файла
Не применяется, так как с учетом опции /c компилятор не создает исполняемого файла
/Fl[file] Generate listing
Создание файла листинга
Обычно не применяется, так как средства MS Developer Studio, как правило, достаточны для работы с текстом приложения.
/Fm[file] Generate map
Создание map-файла
Не применяется, так как map-файл создается компоновщиком, а с учетом опции /c компилятор не вызывает компоновщик
/Fo<file> Name object file
Имя объектного файла
Обычно не применяется. Позволяет задать obj-файлу имя, отличное от имени asm-файла.
/FPi Generate 80x87 emulator encoding
Включение кода эмулятора сопроцессора 80x87
Начиная с выхода в свет процессора 486 не применяется, так как с тех пор арифметический сопроцессор является неотъемлемой частью современных процессоров.
/Fr[file] Generate limited browser info
Включить ограниченную информацию броузера
Применение менее предпочтительно, чем /FR, так как в информацию броузера не включа.тся сведения о локальных идентификаторах.
/FR[file] Generate full browser info
Включить полную информацию броузера
Позволяет получать быстрый доступ к любому идентификатору во всем пространстве проекта и заголовочных файлов API win32. См. статью об этом.
/G<c|d|z> Use Pascal, C, or Stdcall calls
Использовать соглашения вызова Pascal, C или Stdcall
В применении нет необходимости. Обычно использование соглашений вызова stdcall регламентируется директивой .model в тексте программы.
/H<number> Set max external name length
Установить максимальную длину внешних имен
Обычно не применяется. Значение по умолчанию - 31, и его достаточно для работы в среде win32.
/I<name> Add include path
Добавить путь для inc-файлов
Не применяется, так как собственных возможностей MS Developer Studio обычно достаточно для определения путей к inc-файлам. Допускается использовать до 10 опций /I.
/link <linker options and libraries>
Опции командной строки компоновщика и подключаемые библиотеки
Не применяется, так как компоновка отключена опцией /c.
/nologo Suppress copyright message
Не показывать баннерный текст компилятора
Как правило, следует применяеть, так как баннерный текст смысловой нагрузки при разработке проекта не несет.
/Sa Maximize source listing
Листинг максимального формата
Применяется редко, так как собственных средств MS Developer Studio обычно достаточно для работы с исходным и компилированным текстом программы, и в выдаче листинга нет необходимости.
/Sc Generate timings in listing
Включить в листинг синхронизацию
То же
/Sf Generate first pass listing
Листинг первого прохода
То же
/Sl<width> Set line width
Длина строки листинга, символов: 60...255 или 0.
То же
/Sn Suppress symbol-table listing
Не включать в листинг таблицу символов
То же
/Sp<length> Set page length
Высота страницы листинга, строк: 10...255 или 0.
То же
/Ss<string> Set subtitle
Текст подзаголовков листинга
То же
/St<string> Set title
Текст заголовка листига
То же
/Sx List false conditionals
Включить в листинг все фрагменты условной компиляции
То же
/Ta<file> Assemble non-.ASM file
Компилировать не-.asm файлы
Обычно не применяется. Служит для компиляции файлов, имя котрых имеет расширение, отличное от .asm.
/w Same as /W0 /WX
То же, что /W0 /WX
См. далее.
/WX Treat warnings as errors
Трактовать предупреждения как ошибки
Обычно в применении нет необходимости. В случае возникновения предупреждений компиляция завершается неуспешно.
/W<number> Set warning level
Установить уровень предупреждеинй
Обычно в применении нет необходимости. Устанавливает перечень событий компиляции, трактуемых как предупреждения.
/X Ignore INCLUDE environment path
Игнорировать путь, установленный переменной окружения INCLUDE
Обычно не применяется, так как при работе в среде MS Developer Studio переменная окружения INCLUDE не используется.
/Zd Add line number debug info
Включить отладочную информацию в виде номеров строк
Обычно не применяется, так как на этапе отладки более целесообразно использовать опцию /Zi.
/Zf Make all symbols public
Объявить все имена публичными
Обычно не применяется.
/Zi Add symbolic debug info
Включить полную отладочную информацию
Обязательно применяется на этапе отладки. Формат отладочной информации MASM полностью совместим с используемым встроенным отладчиком MS Developer Studio.
/Zm Enable MASM 5.10 compatibility
Включить совместимость с MASM 5.10
Обычно не применяется. Отключает полезные для прикладного программирования свойства MASM, введенные в версиях 6.1+.
/Zp[n] Set structure alignment
Установить выравнивание структур
Может быть использован для установки принятого в win32 выравнивания по умолчанию - на 8 байт. Однако обычно в применении нет необходимости, так как в win32 используется два варианта выравнивания структур - на 4 и на 8 байт, и определять их выравнивание целесообразно непосредственно в описании структуры директивой STRUCT. Возможные значения для этой опции - 1, 2, 4 и 8 (последнее - в версиях MASM 6.13 и выше).
/Zs Perform syntax check only
Выполнять только проверку синтаксиса
Обычно не применяется. Подавляет формирование объектного модуля.

Типовая командная строка для этапа отладки (активен проект Win32 Debug) имеет вид:
ml.exe /c /coff /FR"..\browseinfo\$(InputName).sbr" /nologo /Zi /DDEBUG $(InputPath)

Отключена компоновка, формируется объектный модуль в формате COFF, формируется sbr-файл, содержищий информацию для Browse Info, подавлена выдача баннерной информации, в объектный модуль включена полная отладочная информация, определена константа DEBUG.

Типовая командная строка для чистового этапа (активен проект Win32 Release) имеет вид:
ml.exe /c /coff /nologo $(InputPath)

Отключена компоновка, формируется объектный модуль в формате COFF, подавлена выдача баннерной информации.



Содержание раздела