MASM под Windows: быстрый старт
Олег Французов
2017
В этом документе кратко описан процесс установки учебной среды на основе ассемблера MASM под ОС Windows, а также порядок работы с ней.
См. также: чеклист по настройке учебной среды в машзале.
Установка MASM
-
Скачайте архив c MASM с сайта arch32.cs.msu.su.
-
Распакуйте архив в каталог
C:\masm32
(необходимо использовать именно такой путь). Убедитесь, что в каталогеC:\masm32
оказались каталогиbin
,lib
,include
. -
Создайте где-либо в удобном месте рабочий каталог для ваших программ, например,
C:\asm
илиD:\study\sem2
. Рабочий стол Windows или папка «Мои документы» не являются подходящими местами для рабочего каталога — проследите, чтобы в полном пути к каталогу не было русских букв или пробелов. Далее таким каталогом будет считатьсяC:\work
. -
Скачайте файл
prompt.bat
и положите его в ваш рабочий каталог.
Простейшая программа
Для следующего шага вам потребуется текстовый редактор, пригодный для работы с программным кодом. Заметим, что Microsoft Word или встроенный в Windows редактор WordPad являются текстовыми процессорами и для работы с программным кодом непригодны. Редактор Notepad (Блокнот) подходит для работы с текстовыми файлами (plain text), но неудобен в качестве программистского редактора — в нем отсутствует подсветка синтаксиса и другие стандартные для таких редакторов функции.
Вы можете воспользоваться вашим любимым текстовым редактором или, если вы затрудняетесь с выбором, скачать простой программистский текстовый редактор Notepad2.
Примечание: Если вы решили скачать Notepad2, при первом запуске установите ширину табуляции (Tabulator width) в значение 8 при помощи меню Settings > Tab Settings.
Создайте в вашем рабочем каталоге файл hello.asm
следующего содержания:
include console.inc
.code
Start: mov ecx, 5
again: outstrln 'Hello World'
dec ecx
jnz again
exit
end Start
Примечание: В Notepad2 при сохранении введите имя файла hello.asm
, и
подсветка синтаксиса включится автоматически.
Эта программа выводит пять раз строчку “Hello World” на экран. Для вывода
текста используется макрос outstrln
, который определен в файле
console.inc
.
Трансляция и запуск программы
Дважды щелкните по файлу prompt.bat
, который вы скачали на шаге установки.
Откроется окно командной строки. Убедитесь, что все сделано правильно, набрав
команду dir
и нажав Enter
. Вы должны увидеть, что в текущем каталоге
(вашем рабочем каталоге) находятся файлы hello.asm
и prompt.bat
:
C:\work>dir
Volume in drive C has no label.
Volume Serial Number is C00A-56A9
Directory of C:\work
03/05/2017 11:16 AM <DIR> .
03/05/2017 11:16 AM <DIR> ..
03/05/2017 11:11 AM 158 hello.asm
03/05/2017 10:29 AM 81 prompt.bat
2 File(s) 239 bytes
2 Dir(s) 133,457,559,552 bytes free
Примечание для тех, кто никогда прежде не работал с командной строкой.
Взаимодействие с ней устроено следующим образом: командная строка выводит
приглашение (в примере выше это C:\work>
), далее пользователь вводит
команду (выше — dir
) и нажимает клавишу Enter
, после чего на
экране появляется вывод команды, то есть результат ее работы.
Для запуска программы требуется ее оттранслировать. Первый шаг — запуск ассемблера MASM, который построит по исходному тексту програмы объектный файл:
C:\work>ml /c /coff hello.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: hello.asm
Аргумент /c
инструктирует ассемблер выполнить только трансляцию в объектный
файл, без компоновки (которую мы выполним чуть позже). Аргумент /coff
указывает формат объектного файла — COFF (Common Object File Format).
В рабочем каталоге появится файл hello.obj
. Запустите компоновщик:
C:\work>link /subsystem:console hello.obj
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
Аргумент /subsystem:console
говорит компоновщику, что нужно построить
консольное Windows-приложение.
В рабочем каталоге появится файл hello.exe
. Это исполняемый файл, который
уже можно запустить:
C:\work>hello
Hello World
Hello World
Hello World
Hello World
Hello World
Как это устроено
Командный файл prompt.bat
запускает окно командной строки и задает
переменные окружения так, чтобы программы ml
и link
были доступны без
указания пути к ним, а пути к include- и lib-файлам MASM также были известны.
Пути заданы жестко, поэтому и требовалось распаковать архив в строго определенный каталог.
Командный файл для упрощения запуска
Когда вам надоест каждый раз набирать три команды для трансляции и запуска
программ, создайте такой командный файл (назвать его можно, например,
mkr.bat
— то есть make/run):
@echo off
if .%1.==.. goto USAGE
ml /nologo /c /coff %1 && link /nologo /subsystem:console %~n1.obj && %~n1
goto END
:USAGE
echo usage: mkr program.asm
:END
Использовать его можно будет следующим образом:
C:\work>mkr hello.asm
Assembling: hello.asm
Hello World
Hello World
Hello World
Hello World
Hello World
Несколько комментариев по устройству этого командного файла:
-
Команда
@echo off
отключает дублирование каждой исполняемой команды в окне командной строки. -
Аргумент
/nologo
при вызове ассемблера и компоновщика убирает строчку “Copyright (C) Microsoft”, захламляющую экран. -
%1
меняется на аргумент, который передан командному файлу, то есть имя программы на ассемблере (выше —hello.asm
). -
%~n1
меняется на тот же аргумент, но без расширения (выше —hello
). -
Связка
&&
выполняет очередную команду, только если предыдущая завершилась успешно. В случае ошибок трансляции ваша программа запущена не будет.
Файл mkr.bat
можно или копировать в каждый каталог, где вы планируете
размещать исходные тексты программ на ассемблере, или поместить его в каталог
C:\masm32\bin
, и тогда выполнять его будет можно из любого каталога, при
условии, что вы запустили командную строку при помощи prompt.bat
.
Итог
То, что получилось в итоге — это простейшая система программирования, состоящая из транслятора (ассемблера MASM), текстового редактора (Notepad2 или иного, если вы его предпочли) и примитивной системы сборки на единственном командном файле.
Несмотря на простоту этой системы, она основывается на тех же общих принципах, что и более сложные системы программирования. Подробнее с этим вы сможете познакомиться на втором курсе.