Итак, поехали! Курс обучения любому языку программирования принято начинать с написания программы «Hello, world!». Однако мы этого делать не будем. Потому что «Hello, world!» на ассемблере придется долго объяснять и трудно понять сходу. А я хочу сделать курс из коротких понятных статей.
Поэтому мы напишем совсем простую программу. Сразу оговорюсь, что мы будем писать только COM-программы под DOS. Они проще, чем EXE, а подробно разбирать тонкости программирования под DOS мне не интересно, во всяком случае в учебном курсе.
Для того, чтобы написать программу, нам надо запустить подходящий для ассемблера текстовый редактор (например, условно-бесплатный Sublime Text). Кто работает под 32-х битной Windows могут сразу набирать программу в компиляторе fasmw.exe. Пример набранного кода:

В приглянувшемся текстовом редакторе надо ввести следующее (я подробно объясню ниже, что значит каждая строчка):
1 2 3 4 5 6 7 8 9 10 | use16 ;Генерировать 16-битный код org 100h ;Программа начинается с адреса 100h mov ax,255 ;Поместить 255 в регистр AX inc ax ;Увеличить содержимое AX на 1 nop ;Эта команда ничего не делает mov bx,ax ;Поместить в BX содержимое AX mov ax,4C00h ;\ int 21h ;/ Завершение программы |
Первая строка «use16» сообщает FASM’у, что нужно генерировать 16-битный код. Нам нужен именно такой для нашей первой программы. Точка с запятой — это символ комментария. Все что идет после «;» до конца строки игнорируется компилятором. Там можно писать все что угодно.
Вторая строка «org 100h» объясняет FASM’у, что следующие команды и данные будут располагаться в памяти, начиная с адреса 100h. Дело в том, что при загрузке нашей программы в память, DOS размещает в первых 256 байтах (с адресов 0000h — 00FFh) свои служебные данные. Нам эти данные изменять нежелательно.
Далее идут непосредственно команды! Программа на ассемблере состоит из команд процессора. Каждая команда обозначается мнемоникой (символическим именем). Например «mov», «inc», «nop» и т.д. После мнемоники могут идти операнды. Они отделяются одним или несколькими пробелами (или табуляцией).
Команды бывают без операндов, с одним или несколькими операндами. Если операндов больше одного, то они отделяются друг от друга запятыми.
Отступы не обязательны, но желательны — с ними код гораздо легче читать. Пустые строки игнорируются. Регистр символов значения не имеет. Можно писать большими буквами, или маленькими, или в перемешку.
Четвертая строка определяет команду «поместить число 255 в регистр AX». «mov» — это мнемоника команды (от английского «MOVe»). AX — первый операнд — приёмник. 255 — второй операнд — источник. Первый операнд является регистром. Второй операнд — константа 255.
Пятая строка. Тут команда «inc» с одним операндом. Она заставит процессор выполнить инкремент, то есть увеличение на единицу. Единственный операнд — это регистр AX, содержимое которого и будет увеличено на 1.
Шестая строка. Команда «nop» — без операндов. Эта команда ничего не делает Зачем она нужна я ещё расскажу как-нибудь.
Седьмая строка. Снова команда «mov», но на этот раз оба операнда являются регистрами. Команда скопирует в BX содержимое AX.
Две последние строки — это стандартное завершение процесса в DOS. Так мы будем завершать все наши программы. Команда «mov» должна быть вам понятна, а про команду «int» я ещё расскажу, это отдельная тема.
Сохраните прорамму внутри папки где установлен fasm (C:\fasm) под именем lesson1.asm
Файл с расширением .asm — это исходный код или исходник, обычный текстовый файл. При желании его можно открыть блокнотом, ну а ваш текстовый редактор и компилятор fasm, получают «намек», что дело предстоит иметь с исходным кодом на ассемблере.
Чтобы откомпилировать программу надо в DOSBox набрать команду:
1 | fasm lesson1.asm |
Выполнив команду fasm переведет текст, набранный нами, в машинный код и сделает его программой с названием lesson1.com

Отлично! Целых 12 байт получилось
В каталоге с asm-файлом появился файл .com — это и есть наша прога!
Если в коде что-то неправильно, то в этом окне вы увидите сообщение об ошибке.
Пользователям 32-битной Windows в их fasm выбрать меню Run->Compile. FASM предложит сохранить файл, если вы этого ещё не сделали, а затем скомпилирует.
В общем, наша программа ничего не делает Но в следующей статье я расскажу как работать с отладчиком. И мы её отладим и увидим как она работает!
6 ответов к “Учебный курс. Урок 2. Первая программа”
Ждем продолжения!!! Спасибо за статьи!
Рад, что кто-то читает! Буду продолжать :)
Спасибо, что есть такой ресурс! Читать одно удовольствие!
Благодарю. Приятно читать такие отзывы :)
В общем, наша программа ничего не делает 🙂
Почему мы юзаем:
mov ax, 4C00h
int 21h
вместо:
int 20h
20-е прерывание специально для завершения программы + экономия 4 байта, зачем юзать 21-е?