Тестируйте собственные программы x86, создавая загрузочные образы / диски - PullRequest
1 голос
/ 17 февраля 2012

У меня следующая проблема: я работаю с NASM, собираю некоторые нативные и собираю их следующим образом:

nasm -f bin source -o out

Я получаю свою нативную программу для x86.

А теперь самое интересное, как я могу сделать его загрузочным и затем протестировать его?

Как я думаю, есть 3 способа сделать загрузочный (но для меня все они провалились :()

  • с помощью утилиты mkbt (или другой аналогичной программы), чтобы записать его на дискету
  • создание образа ISO, с редактированием загрузочного сектора в нем
  • запись сектора памяти вручную на usb/ sd-карта или другой драйвер

Что касается тестирования, перезагрузка компьютера при любых обстоятельствах очень плохая, поэтому лучше использовать какую-нибудь виртуальную ОС, такую ​​как Vbox, VMWare и т. д.

Поэтому для этого я использовал VBox. Для создания ISO - я использовал CDBurnerXP.

С помощью cdburner я выбрал загрузочный сектор для своей родной программы, затем в качестве диска выбрал новый ISO в Vbox, с которого будет загружаться моя программа.

Результат всегда пустой экраношибки не отображаются, просто ничего ...

Я думаю, что у меня много ошибок ...

Используя mkbt, я не могу записать его в драйвер USB ....У меня сейчас нет дискеты, поэтому я не могу записать образ на дискету, mkbt не может записать на usb ...: (

Что я не так делаю?

Какя могу решить мою проблему?

1 Ответ

1 голос
/ 17 февраля 2012

Просто сделайте это:
nasm -f bin -o boot.bin boot.asm
qemu -boot order = a -fda boot.bin

И вы должны увидеть сообщение.Для других эмуляторов вам понадобится увеличить изображение до 1474560 байт.

boot.asm:

        BITS 16
        ORG 0
        jmp 0x07c0:start

start:
        mov ax, cs
        mov ds, ax

        mov si, msg
        call print_string

hang:
        jmp hang

print_string:
        cld
        lodsb
        or al, al
        jz .done
        mov ah, 0x0E
        int 0x10
        jmp print_string
.done:
        ret

msg:    db 'Hello World!', 13, 10, 0

        times 510-($-$$) db 0
        dw 0xAA55
...