Ассемблер

Как запустить программу на ассемблере в DOSBox

Чтобы запустить программу на ассемблере в DOSBox, нужно подготовить папку проекта, подключить ее командой mount, собрать .asm-файл через TASM, связать объектный файл через TLINK и запустить получившийся .exe. DOSBox в этой схеме нужен не как редактор кода, а как среда, где работают старые DOS-программы

Важно сразу разделить две вещи. DOSBox подходит для учебных 16-битных примеров под DOS: int 21h, сегменты, .model small, TASM, TLINK. Он не предназначен для современных Linux x64 или Windows x64 программ с системными вызовами и 64-битными регистрами. Если вы пишете mov rax, 1 и syscall, это уже другая платформа

Подготовьте папку

Создайте на Windows папку, например:

C:\asm

Внутри удобно держать:

C:\asm\BIN
C:\asm\WORK

В BIN лежат TASM.EXE и TLINK.EXE, а в WORK — исходники. Если у вас другой набор папок, ничего страшного. Главное, чтобы путь был коротким, без кириллицы и без пробелов. Старые DOS-инструменты чувствительны к таким мелочам

Подключите папку в DOSBox

Откройте DOSBox и выполните:

mount c c:\asm
c:
dir

Команда mount делает папку C:\asm видимой внутри DOSBox как диск C:. После c: вы переходите на этот виртуальный диск. Команда dir должна показать ваши папки

Если DOSBox пишет, что путь не найден, проблема почти всегда в неправильном пути на реальной машине. Проверьте, что папка действительно существует

Напишите hello.asm

Создайте файл WORK\HELLO.ASM:

.model small
.stack 100h

.data
    msg db 'Hello from 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-функции 09h: она выводит символы до этого маркера. Это не общая особенность ассемблера, а именно правило конкретной DOS-функции

Соберите и запустите

Если TASM.EXE и TLINK.EXE лежат в C:\asm\BIN, выполните:

c:
cd work
..\bin\tasm hello.asm
..\bin\tlink hello.obj
hello.exe

После tasm должен появиться HELLO.OBJ. После tlink — HELLO.EXE. При запуске программа выведет:

Hello from DOSBox

Если хотите не писать путь ..\bin\ каждый раз, можно добавить папку в PATH внутри DOSBox:

set path=c:\bin

После этого команды можно вызывать короче:

tasm hello.asm
tlink hello.obj
hello.exe

Как понять, что ошибка в сборке

Если ошибка появляется на этапе tasm, значит проблема в исходном коде: опечатка, неверная директива, незакрытая строка, неправильная модель памяти. Если ошибка появляется на этапе tlink, значит объектный файл есть, но linker не может собрать исполняемый файл. Например, не найден entry point или не хватает файла

Если .exe запускается, но ничего не выводит, проверьте:

  • установлен ли ds через mov ax, @data и mov ds, ax;
  • есть ли $ в конце строки для int 21h / ah=09h;
  • вызывается ли завершение программы через int 21h / ah=4Ch;
  • запускаете ли вы именно новый .exe, а не старый файл из другой папки.

Типичная рабочая схема

Обычно учебная работа выглядит так:

  1. открыть папку проекта;
  2. изменить .asm;
  3. запустить tasm;
  4. запустить tlink;
  5. запустить .exe;
  6. вернуться к коду, если результат не тот.

На первых примерах лучше не автоматизировать сборку. Полезно руками увидеть, что assembler создает .obj, а linker создает .exe. Так легче понять, где именно возникла ошибка

Что почитать дальше по ассемблеру

Если нужен общий маршрут по теме, откройте рубрику ассемблеру. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x