В этой статье мы рассмотрим процессы компиляции и компоновки программ на языке ассемблер для для операционных систем DOS и Windows. Напомню что компиляция - это процесс перевода файлов программы в так называемые объектные файлы. Объектные файлы - это файлы, в которых находится почти готовая программа в виде разрозненных кусков кода, связанных некоторой служебной информацией. Чтобы превратить эти куски кода в готовую программу используется компоновщик. Он выстраивает код в исполняемом файле в нужном порядке и создает готовый файл заданного формата. Этот получившийся файл уже можно исполнять.

Начнем с компиляции под DOS

В DOS существовало два вида исполняемых файлов: *.com и *.exe. Файлы *.com характеризуются тем, что весь код программы, данные и место для стека содержится в одном сегменте памяти, причем код программы должен находиться в сегменте со смещением в 256 байт (100h). Файлы формата *.exe не имеют ограничений на количество используемых сегментов памяти.

Для компиляции под DOS я использую компилятор MASM версии 6.11 и TASM версии 5.3

Компиляция и компоновка файлов *.com с помощью TASM:

    \tasm32\bin\tasm53.exe test.asm, test.obj, test.lst /z /t /ml /m2 /l
    \tasm32\bin\tlink.exe test.obj /x /t /3

Компиляция и компоновка файлов *.exe с помощью TASM:

    \tasm32\bin\tasm53.exe test.asm, test.obj, test.lst /z /t /ml /m2 /l
    \tasm32\bin\tlink test.obj, test.exe /x /3

Описание всех параметров можно получить, выполнив в командной строке tasm53.exe /? и tlink.exe /?
 

Компилятор MASM позволяет выполнять компиляцию и компоновку через вызов своей программы-оболочки ml.exe

Компиляция файлов *.com с помощью MASM:

    \masm611\bin\ml.exe test.asm /AT /Fl /link

Компиляция файлов *.exe с помощью MASM:

    \masm611\bin\ml.exe test.asm /Fl /link

Компиляция под Windows

Для компиляции под Windows используются компилятор MASM32 и TASM32.

Компиляция и компоновка файлов *.exe с помощью TASM32:

    \tasm32\bin\tasm32.exe test.asm, test.obj, test.lst /zi /t /ml /m3 /q
    \tasm32\bin\tlink32 /x /Tpe /ap /c /V4.0 test.obj, test.exe, , user32.lib

Компиляция файлов *.exe с помощью MASM32:

   \masm32\bin\ml.exe /c /coff test.asm
   \masm32\bin\link.exe /SUBSYSTEM:WINDOWS test.obj

После компиляции

После компиляции и компоновки у вас должен получиться исполняемый файл *.exe или *.com формата, в зависимости от того, какие параметры вы задавали компилятору.