Олег Французов
2017

В этом документе кратко описан процесс установки учебной среды на основе ассемблера MASM под ОС Windows, а также порядок работы с ней.

См. также: чеклист по настройке учебной среды в машзале.

Установка MASM

  1. Скачайте архив c MASM с сайта arch32.cs.msu.su.

  2. Распакуйте архив в каталог C:\masm32 (необходимо использовать именно такой путь). Убедитесь, что в каталоге C:\masm32 оказались каталоги bin, lib, include.

  3. Создайте где-либо в удобном месте рабочий каталог для ваших программ, например, C:\asm или D:\study\sem2. Рабочий стол Windows или папка «Мои документы» не являются подходящими местами для рабочего каталога — проследите, чтобы в полном пути к каталогу не было русских букв или пробелов. Далее таким каталогом будет считаться C:\work.

  4. Скачайте файл 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 или иного, если вы его предпочли) и примитивной системы сборки на единственном командном файле.

Несмотря на простоту этой системы, она основывается на тех же общих принципах, что и более сложные системы программирования. Подробнее с этим вы сможете познакомиться на втором курсе.

* * *

Далее: Более сложные примеры и чтение листингов