В основном эта глава состоит из трёх справочных статей:
Ликбез молодого юзера
Подробное описание ml.exe
Краткое описание link.exe
Если вы уже их прочитали, то практические сведения воспримете очень легко.
Понятно, что каждый раз из командной строки вводить имена исходников, obj-файлов и ключи - не очень удобно.
Но этот процесс легко упростить.
Первый шаг к упрощению - переменная окружения ML
Допустим, мы пишем исходник praxZ.asm.
Нам хочется компилировать его до тех пор, пока он наконец-таки не заработает, а для этого может потребоваться очень много попыток. Можно в командной строке FAR'a выполнить следующее:
SET ML=/coff praxZ.asm /link /SUBSYSTEM:WINDOWS
Теперь каждый раз, когда мы будем выполнять ml без ключей из папки с исходником, будет выполняться компиляция нашего примера. При этом такое действие распространяется только на текущую консоль. То есть в другом экземпляре FAR'a настройка действовать не будет.
Следующий шаг навстречу юзеру - командный bat-файл
Можно создать в папке с исходником файл make.bat с таким содержанием:
ml /c /coff praxZ.asm Link /SUBSYSTEM:WINDOWS praxZ.obj pause
Теперь достаточно его запустить в надежде, что на сей раз в исходнике ошибок нет.
В нулевом витке я использовал BUILD.BAT из папки MASM32\bin.
Относительно универсальный способ. С его помощью можно компилировать asm-файлы с разными именами (как с ресурсами так и без). На выходе мы получаем готовый PE-exe.
Заглянем в BUILD.BAT:
@echo off if exist "%1.obj" del "%1.obj" if exist "%1.exe" del "%1.exe" \masm32\bin\ml /c /coff "%1.asm" if errorlevel 1 goto errasm if not exist rsrc.obj goto nores \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF "%1.obj" rsrc.obj if errorlevel 1 goto errlink dir "%1.*" goto TheEnd :nores \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF "%1.obj" if errorlevel 1 goto errlink dir "%1.*" goto TheEnd :errlink echo _ echo Link error goto TheEnd :errasm echo _ echo Assembly Error goto TheEnd :TheEnd pause
Вы не поняли суть этих закорючек?
Тогда очень внимательно прочитайте ещё раз Ликбез молодого юзера.
А те, кто понял, наверное, уже подметили несколько ограничений использования этого файла:
Ну и как я уже писал:
Рекомендую вам создать хотя бы ещё один подобный файл для компиляции отладочной версии exe.
Скопируем BUILD.BAT и назовём копию, к примеру, BDBG.BAT.
Заменим в нём три соответствующие строки на:
... \masm32\bin\ml /c /coff /Zi "%1.asm" ... \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF /DEBUG "%1.obj" rsrc.obj ... \masm32\bin\Link /SUBSYSTEM:WINDOWS /OPT:NOREF /DEBUG "%1.obj"
Используя наш BDBG, можно собирать PE-exe с отладочной информацией.
Хорошо бы сделать ещё несколько файлов для компиляции dll и для полной сборки с отладочной информацией. Но это вы уж сами.
Многие уроки по Ассемблеру (например, "Рассылка Калашникова") основаны на DOS-примерах в формате com.
Чтобы компилировать такие исходники, понадобятся:
Segmented Executable Linker (допустим v5.31) и
ml.exe (обязательно младше 7-й версии).
Из состава "MASM32 v9" подходит только ml.exe. А вот линковщик придётся брать дополнительный.
Использовать его можно примерно с такой командной строкой:
LINK /TINY имя.obj,имя.com;
; - обрывает строку
ключ /TINY - определяет мини-модели, то есть обычный формат com-файла для DOS.
Для облегчения компиляции com-программ можно сделать следующее:
@echo off if exist "%1.obj" del "%1.obj" if exist "%1.exe" del "%1.exe" \masm32\bin\ml /c /AT "%1.asm" if errorlevel 1 goto errasm \masm32\bin\LINKDOS /TINY "%1.obj","%1.com"; if errorlevel 1 goto errlink dir "%1.*" goto TheEnd :errlink echo _ echo Link error goto TheEnd :errasm echo _ echo Assembly Error goto TheEnd :TheEnd pause
Как известно - совершенству нет предела. Продолжим удовлетворять лень программиста.
Даже bat-файл не даст такого комфорта, как...
Главная цель среды разработки - объединить в одно целое редактор исходного текста, редактор ресурсов, компилятор и всё, что нужно для процесса написания программы. Редакторы у каждой среды свои, а вот компиляторы они используют сторонние, передавая им нужные ключи и имена файлов. И ещё IDE перенаправляет на себя консольный вывод компилятора, так что мы во встроенном окошке можем наблюдать за сообщениями транслятора, а затем линкера.
Сегодня самые распространённые IDE для MASM'a - это:
MS Visual Studio,
У всех есть свои особенности, и я вам не буду советовать, на чём остановиться. Возможно, эта статья поможет сделать выбор. Но лучше попробуйте настроить каждую из предложенных IDE и использовать хотя бы неделю. А там уж разберётесь, где вам удобнее обитать.
Однажды настроив IDE, в дальнейшем вы будете экономить кучу времени и сил.
Достаточно всего нескольких простых действий, и каркасный проект готов к компиляции одним кликом мышки.
Но признаюсь честно, хорошая настройка под себя - дело не такое уж простое.
Вам как минимум придётся понять, для чего нужна та или иная опция, и подключить все полезные дополнения.
Хотя теперь, когда вы так много знаете о компиляторе MASM'a, это будет намного проще.
Bitfry