Компиляция файлов .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, подавлена выдача баннерной информации.