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

Учебный курс. Урок 1. Необходимые инструменты

Учиться программировать начнем с процессора Intel 8086. Будем писать программы под DOS 🙂 Программирование под Windows и Linux сложнее, а нам надо с чего-то начинать. Поэтому начнем с простого и понятного 16-битного процессора 8086.

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

Выбор компилятора

Для программирования на ассемблере нам прежде всего необходим компилятор. Наиболее известные компиляторы это TASM, MASM и FASM. В моем учебном курсе я буду использовать FASM. Это довольно новый, удобный, быстро развивающийся компилятор ассемблера, написанный на себе самом 🙂 Его преимущества — это  поддержка сложных макросов и мультиплатформенность. Есть версии под DOS, Windows и Linux.

С его помощью можно сгенерировать файл любого формата, не обязательно исполняемый файл, так что FASM — это превосходный инструмент для экспериментов и исследований.

Сложность в том, что сегодня большинство операционных систем даже на телефонах имеет 64-битную разрядность. В силу особенностей архитектуры просто так запустить 32-разрядную программу DOS на 64-битной системе не получится.

Эмуляция 32-битного DOS в 64-битной среде. DOSBox

Тем, кто работает в 32-битной системе Windows могут просто использовать fasm под Windows для написания и компиляции программ. В этом случае все программы учебного курса вы сможете запустить под Windows. Конечно, реально они будут работать в эмуляторе DOS, в режиме виртуального процессора 8086. Но для учебных целей это вполне подойдёт.

Ну а как же быть тем, кто идёт в ногу с цивилизацией и работает в 64-битной среде? Поскольку писать пограммы для 64 битного процессора нам еще рано, потребуется как-то эмулировать среду 32-битного DOS, к примеру, можно установить виртуальную машину, на неё поставить Windows XP 32-бит или последнюю версию MS-DOS, но предлогаю поступить проще и обойтись эмулятором DOSBox.

С оффициального сайта вы можете скачать DOSBox последней версии. Установите его, следуя инструкциям установщика и для удобства на тот же раздел диска, где находится fasm. Ярлык запуска эмулятора DOSBox появился на рабочем столе. Готово!

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

Редактирование dosbox.conf

Не будем огорчаться, что разработчики эмулятора обошли поддержку 32-битного реального режима (FRM mode). Мы можем получить нужный результат, перед вызовом fasm загрузив DPMI сервер. Скачайте cwsdpmi по ссылке с моего сайта. Распакуйте архив туда, куда вы ранее установили fasm. В итоге путь к CWSDPMI будет иметь вид C:\fasm\CWSDPMI.

Осталось отредактировать файл Dosbox.conf, чтобы нам не приходилось каждый раз, когда мы собираемся компилировать программу, вручную вызывать DPMI хост. В Windows 7, 8, 10 этот файл распологается тут: {Системный раздел}:\Users\{имя пользователя}\AppData\Local\DOSBox\dosbox-{версия}.conf.

Узнать расположение этого конфигурационного файла в своей системе вы можете по ссылке Dosbox.conf.

И так, файл Dosbox.conf открыт для редактрования, перемещаемся в самый его конец, чтобы добавить следующие строки:

Сохраните конфигурационный файл. Всё готово, чтобы запустить fasm и скомпилировать нашу первую 32 битную программу. Всему своё время!

Последнюю версию FASM’a можно скачать с официального сайта https://www.flatassembler.net/.

На момент публикации этой статьи последняя версия 1.73.25. Можно скачать с моего сайта (версия под DOS, также под Linux и Windows). Все программы учебного курса будем компилировать этой версией. Хотя наверно и другими получится ))) Для установки содержимое архива надо распаковать в какую-нибудь папку. Например, папка C:\FASM.

Отладчик Tourbo Debugger

Для отладки написанных программ будем использовать старый добрый Turbo Debugger из пакета TASM. Скачать можно с моего сайта. Туда вложен файл DPMI16BI.OVL для поддержки DPMI режима. Архив также распакуйте в какую-нибудь папку. Для примера в папку
C:\TD.

Также от вас потребуется голова, прямые руки и желание ковыряться в ассемблерных командах! 🙂 Любые вопросы по теме можно писать в комментариях к статьям.

Желаю удачи, в следующей статье начнем писать нашу первую программу.

23 ответа к “Учебный курс. Урок 1. Необходимые инструменты”

Здарова, автор!
Для подруги шарился в сети в поисках доступной методички по асму, наверное твои труды сгодятся. Только резанула глаз, что ты называешь компилятором. В ассемблере есть только транслятор и ассемблер!

Здарова коль не шутишь.
Про определение транслятора и ассемблера, быть может, так и точнее. Но «компилятор» — имя нарицательное, так что для начинающих эти тонкости словоблудия не так важны, как важна суть процессов, за ними стоящих :)

Кто-нибудь может поподробнее обьяснить про пункт «Редактирование dosbocs.conf». Желательно с подробной инструкцией и скринами. А то пытаюсь, пытаюсь, ничего не получается. Если что, можете кинуть ссылку в эту почту: galik.bulik@gmail.com

Скажите какие причины могут быть если досбокс не находит исходный файл при команде: fasm program.asm, если все равно показывает версию ассемблера и его размер?

Булат, вы уверены, что исходный файл program.asm находится в папке fasm?
Также возможна опечатка в имени файла. Попробуйте переименовать файл в m.ASM и в окне DOSBOX’a введите команду: fasm m.asm

набираю fasm program.asm получаю
«error: file not found.»
Но введя «dir» видно что я в нужной директории и все файлы на месте.
В чем проблема, что делаю не так?
все делал точно по описанию несколько раз, файлы брал как с сайта так и с оф. источников
памагите :)

Похоже на опечатку в имени файла. Для компиляции можете воспользоваться fasmw ( fasm для Windows http://flatassembler.net/download.php). Она позволяет компилировать из окна программы, только запускать полученную COM программу все равно нужно будет через DOSBOX.

Запустил fasmw, ввел код из второго урока, ctrl+F9 сохранил под названием lesson1, переместил файл в директорию с fasm смонтированную для DosBox
G:\>fasm lesson1.asm

1 passes, 12bytes.
Все получилось, всё заработало- как весело, как круто ))
3 дня мучился, не работало.
Спасибо что так скоро ответили и помогли разобраться

раз за разом вижу error: no 32-bit DPMI, хотя все сделано по инструкции. в чем может быть проблема?

CWSDPMI сервер для fasm
Обратите внимание, если файл dosbox.conf настроен правильно, при запуске dosbox должно написать:
CWSDPMI V0.90+ …

Обратите внимание на сообщение в консоли после команды cd CWSDPMI/BIN/:
Unable to change to: CWSDPMI/BIN/
Это значит что в папке fasm не содержится папки CWSDPMI.
Посмотрите в статье есть такой момент:

Скачайте cwsdpmi по ссылке с моего сайта. Распакуйте архив туда, куда вы ранее установили fasm. В итоге путь к CWSDPMI будет иметь вид C:\fasm\CWSDPMI.

Повторите инструкцию и попробуйте снова.
И кстати, что у вас за кракозябры в консоли :) Воспользуйтесь каким-нибуль текстовым редактором (например, VSCode), чтобы преобразовать файл Dosbox.conf в кодировку CP 866:
fasm в Dosbox кодировка кириллица CP 866

да-да, я все понимаю и умею читать, кажется, тут какая-то нестандартная проблема, невозможно ошибиться в паре простых шагов, я все делаю, как написано, но не понимаю, что и где пошло не так: https://imgur.com/wjslqda

Дело именно в путях к директориям.
Если набрать cd cwsdpmi что возвращает?
Попробуйте fasmw для windows, в комментарии выше давал ссылку.

Было так же, решил войти по порядку в папку — вошло и дало запустить. В итоге оказалось что комментарии #текст портили команду. Без #текст — всё работает как надо .))

После команды fasm program.asm выводит такую ошибку:
this program cannot be run in dos mode

Ты не ту версию Fasm скачал, грубо говоря ты скачал FASM для WIndows и сейчас через эмулятор DOSbox ты пытаешься открыть его, вот он тебе и пишет что не поддерживает его.
Попробуй скачать Fasm для DOS

Добрый день!
Идея интересная, но отладка в этом эмуляторе неудобна.
Если нужно понять, что делает каждая строчка кода, лучше turbo debugger.

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

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