Дневники чайника. Чтива 0, виток1

Знакомство с MASM32

В основном эта глава состоит из трёх справочных статей:
Ликбез молодого юзера
Подробное описание ml.exe
Краткое описание link.exe

Если вы уже их прочитали, то практические сведения воспримете очень легко.

Как можно компилировать исполняемые файлы для Win32?

Понятно, что каждый раз из командной строки вводить имена исходников, 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 и для полной сборки с отладочной информацией. Но это вы уж сами.

Как компилировать исполняемые com-файлы для DOS?

Многие уроки по Ассемблеру (например, "Рассылка Калашникова") основаны на DOS-примерах в формате com.

Чтобы компилировать такие исходники, понадобятся:

Segmented Executable Linker (допустим v5.31) и

ml.exe (обязательно младше 7-й версии).

Из состава "MASM32 v9" подходит только ml.exe. А вот линковщик придётся брать дополнительный.

Использовать его можно примерно с такой командной строкой:

LINK /TINY имя.obj,имя.com;

; - обрывает строку

ключ /TINY - определяет мини-модели, то есть обычный формат com-файла для DOS.

Для облегчения компиляции com-программ можно сделать следующее:

  1. Переименовать Segmented Executable Linker LINK.EXE в LINKDOS.EXE
  2. Поместить его в папку MASM32\BIN
  3. Создать в той же папке файл BCOM.BAT с таким содержанием:
@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, Integrated Development Environment)

Главная цель среды разработки - объединить в одно целое редактор исходного текста, редактор ресурсов, компилятор и всё, что нужно для процесса написания программы. Редакторы у каждой среды свои, а вот компиляторы они используют сторонние, передавая им нужные ключи и имена файлов. И ещё IDE перенаправляет на себя консольный вывод компилятора, так что мы во встроенном окошке можем наблюдать за сообщениями транслятора, а затем линкера.

Сегодня самые распространённые IDE для MASM'a - это:

MS Visual Studio,

RadASM,

WinAsm.

У всех есть свои особенности, и я вам не буду советовать, на чём остановиться. Возможно, эта статья поможет сделать выбор. Но лучше попробуйте настроить каждую из предложенных IDE и использовать хотя бы неделю. А там уж разберётесь, где вам удобнее обитать.

Однажды настроив IDE, в дальнейшем вы будете экономить кучу времени и сил.

Достаточно всего нескольких простых действий, и каркасный проект готов к компиляции одним кликом мышки.

Но признаюсь честно, хорошая настройка под себя - дело не такое уж простое. Вам как минимум придётся понять, для чего нужна та или иная опция, и подключить все полезные дополнения. Хотя теперь, когда вы так много знаете о компиляторе MASM'a, это будет намного проще.

Bitfry

<<предыдущая глава

Вернуться на главную

Hosted by uCoz