Ассемблер
DOSBox: как пользоваться ассемблером
Пользоваться ассемблером в DOSBox значит работать со старым DOS-набором инструментов: открыть DOSBox, подключить папку командой mount, перейти в каталог с исходником, собрать файл через tasm, связать через tlink и запустить получившийся .exe. DOSBox не заменяет сам assembler. Он только дает окружение, в котором старые программы вроде TASM могут нормально выполняться
Что должно быть в папке
Для учебных задач удобно сделать простую структуру:
C:\asm
BIN
TASM.EXE
TLINK.EXE
WORK
HELLO.ASM
Папка BIN хранит инструменты. Папка WORK хранит ваши программы. Не используйте длинные пути, кириллицу и пробелы в названии папок. Современная Windows это переживет, а старые DOS-инструменты могут вести себя неожиданно
Как подключить папку
В DOSBox выполните:
mount c c:\asm
c:
dir
Теперь реальная папка C:\asm видна внутри DOSBox как диск C:. Это главное действие. Пока вы не сделали mount, DOSBox не знает, где находятся ваши файлы
Чтобы перейти к исходникам:
cd work
dir
Если файл HELLO.ASM не виден, проверьте, где он лежит на реальном диске. Частая ошибка — сохранить файл в Downloads, а внутри DOSBox искать его в C:\asm\WORK
Как собрать программу
Если вы находитесь в C:\WORK, а инструменты лежат в C:\BIN, команда будет такой:
..\bin\tasm hello.asm
..\bin\tlink hello.obj
hello.exe
После первой команды появляется объектный файл:
HELLO.OBJ
После второй:
HELLO.EXE
Только .exe можно запускать как программу. .asm — это текст исходника, .obj — промежуточный объектный файл
Как упростить команды через PATH
Чтобы не писать ..\bin\, можно добавить папку с инструментами в PATH:
set path=c:\bin
После этого сборка выглядит проще:
tasm hello.asm
tlink hello.obj
hello.exe
Эта настройка действует в текущем сеансе DOSBox. Если закрыть окно, команду может потребоваться выполнить снова. Для постоянной настройки используют конфигурационный файл DOSBox, но новичку сначала лучше научиться делать это вручную
Пример исходника
HELLO.ASM:
.model small
.stack 100h
.data
msg db 'Hello, DOSBox$'
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 09h
lea dx, msg
int 21h
mov ax, 4c00h
int 21h
main endp
end main
В этом примере программа выводит строку через DOS-прерывание int 21h. Регистр ah выбирает функцию, dx передает адрес строки, а $ показывает конец текста для функции 09h
Как редактировать код
Вариантов несколько:
- редактировать
.asmв обычном редакторе Windows, а запускать сборку в DOSBox; - использовать старый DOS-редактор, если он есть в учебном комплекте;
- держать рядом Far Manager или другой файловый менеджер для удобства, но сборку выполнять в DOSBox.
Самый понятный вариант для новичка — редактировать файл в современном редакторе, сохранить, перейти в DOSBox и заново выполнить tasm, tlink, hello.exe
Частые ошибки
Не выполнен mount
Без mount c c:\asm внутри DOSBox не будет вашего рабочего диска
Команда tasm не найдена
Либо вы не указали путь к TASM.EXE, либо не добавили C:\BIN в PATH
Файл не найден
Проверьте текущую папку командой:
cd
dir
Пример взят не под TASM
Код под NASM, FASM или Linux x64 может не собраться в TASM. Смотрите синтаксис и платформу примера
Что почитать дальше по ассемблеру
Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:
- CMP, JMP, JE, JNZ: условия и циклы в ассемблере
- I8080, AVR и STM32 на ассемблере: когда идти в нишевые ветки
- MASM, NASM, FASM, SASM: что выбрать новичку
- Ассемблер x86 и x64: как адресуются переменные в стеке