Сборка x86 «Не удается загрузить программу» в DOSBox

# #assembly #x86 #x86-emulation

Вопрос:

Я создаю свою первую программу сборки x86. Я использую VS Code в качестве редактора и использую Insight в качестве отладчика в сочетании с DOSBox в качестве эмулятора.

Для начала я создал .asm программу для изменения цвета экрана:

    global _start

    section .text

_start:
    call set_colour
    ret 16

set_colour:
    mov ah, 06h         ; scroll up function
    xor al, al          ; clear entire screen
    xor cx, cx          ; upper left corner
    mov dx, 184fh       ; lower right corner
    mov bh, 1eh         ; yellow on blue
    int 10h
    ret 
 

Когда я пытаюсь преобразовать этот .asm файл в .o файл, DOSBox возвращает сообщение об ошибке, в котором говорится, что он не может загрузить файл. Что я делаю не так?

Комментарии:

1. Он должен быть скомпилирован в файл .exe, а не просто в объектный файл .o.

2. @WillWalsh, насколько я понимаю, он должен быть преобразован в .o объект, прежде чем он будет преобразован в .exe файл? Когда я пытаюсь преобразовать в .o , я получаю ошибку..?

3. Извините, я неправильно понял, о чем вы говорили. Итак, чтобы уточнить, вы используете компилятор в DOSBox для компиляции из .asm в .o, и DOSBox возвращает ошибку, в которой говорится, что он не может загрузить файл, или компилятор возвращает ошибку, в которой говорится, что он не может загрузить файл?

4. В то время как DOSBox эмулирует 32-разрядный процессор, DOS работает в 16-разрядном реальном режиме, без таких инструментов, как DOS4gw, используемых в некоторых играх DOS, таких как Doom. Я думаю -f win32 , что в этой ошибке может быть виновата опция командной строки.

5. Потрясающе. Счастлив, что помог. Наслаждайтесь своим путешествием по кодированию!

Ответ №1:

В то время как DOSBox эмулирует 32-разрядный процессор, сама DOS работает в 16-разрядном реальном режиме, без таких инструментов, как DOS4gw, используемых в некоторых играх DOS, таких как Doom.

Я думаю -f win32 , что в этой ошибке виновата опция командной строки.