Рубрики
Учебный курс

Учебный курс. Урок 2. Первая программа

Итак, поехали! Курс обучения любому языку программирования принято начинать с написания программы «Hello, world!». Однако мы этого делать не будем. Потому что «Hello, world!» на ассемблере придется долго объяснять и трудно понять сходу. А я хочу сделать курс из коротких понятных статей.

Поэтому мы напишем совсем простую программу. Сразу оговорюсь, что мы будем писать только COM-программы под DOS. Они проще, чем EXE, а подробно разбирать тонкости программирования под DOS мне не интересно, во всяком случае в учебном курсе.

Для того, чтобы написать программу, нам надо запустить подходящий для ассемблера текстовый редактор (например, условно-бесплатный Sublime Text). Кто работает под 32-х битной Windows могут сразу набирать программу в компиляторе fasmw.exe. Пример набранного кода:

В приглянувшемся текстовом редакторе надо ввести следующее (я подробно объясню ниже, что значит каждая строчка):

Первая строка «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 набрать команду:

Выполнив команду fasm переведет текст, набранный нами, в машинный код и сделает его программой с названием lesson1.com

Отлично! Целых 12 байт получилось 😀
В каталоге с asm-файлом появился файл .com — это и есть наша прога!
Если в коде что-то неправильно, то в этом окне вы увидите сообщение об ошибке.

Пользователям 32-битной Windows в их fasm выбрать меню Run->Compile. FASM предложит сохранить файл, если вы этого ещё не сделали, а затем скомпилирует.

В общем, наша программа ничего не делает 🙂 Но в следующей статье я расскажу как работать с отладчиком. И мы её отладим и увидим как она работает! 🙂

10 ответов к “Учебный курс. Урок 2. Первая программа”

Почему мы юзаем:
mov ax, 4C00h
int 21h
вместо:
int 20h
20-е прерывание специально для завершения программы + экономия 4 байта, зачем юзать 21-е?

Ошибка говорит, что файл программы fasm не находится в директории, откуда вызывается команда.

Алёна, перед вызовом fasm проверьте, что выполняются следующие команды в конфигурационном файле из Урок 1:
mount g c:/fasm
g:
cd CWSDPMI/BIN/
CWSDPMI/BIN/
CWSDPMI -p -s-
cd /.

Если вы пропускаете настройку Dosbox.conf, эти команды нужно повторять ручным вводом в окне Dosbox.

Также для компиляции подходит fasmw ( fasm для Windows fasmw17325). Программа имеет графический UI и позволяет компилировать из окна программы, но запускать полученную COM программу нужно через DOSBOX.

Алёна, похоже у меня было тоже, что у вас.
в окне ДОСБокса не было синего сообщения, всё было на чёрном фоне, и были сообщения, что ничего «не смонтировалось».
Выснилось, что у меня ДБ установлен в C:\Program Files (x86)
и, если я правильно понимаю, пробел в названии папки Program Files не давал ДБ начать работать так, как нам надо.
Я удалил с компа ДБ. В списке программ, которые я могу удалить, Моя Винда_10 ДОСБокса мне не предоставила, так я тупо удалил все папки, связанные так или иначе с ДБ. Не уверен, что всё это было проделано правильно.
Затем установил ДБ по-новой, изменив адрес папки, куда устанавливать, на C:\ . Запустил, окно ДБ — как на картинке в 1-м уроке. Маленькая победа! Сейчас буду пробовать ФАСМ.

___Возможно, кому-то будет полезно___
Увеличить окно ДБ, (а вместе с размером улучшается разрешение содержимого) можно, изменив 2 строчки в конфигурационном файле.
windowresolution=1600×800 Было original
output=opengl Было surface
помог вот этот сайт https://utyatnishna.ru/info/407973/how-to-increase-size-of-doxbox-window?ysclid=lts3lufrld91660286

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *