i386 Real mode - загрузка с дискеты

Я подхожу к кодированию в реальном режиме x86, и я нашел пример кода здесь: http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt

Третий пример в этой статье загружает несколько секторов дискеты в память, используя вызовы BIOS в реальном режиме, а затем переходит к ним. Это простой загрузчик. Он загружает 5 секторов из 2-го сектора. Во втором секторе (после 512 байтов первого сектора) есть несколько инструкций для распечатки некоторого текста.

Ну, я скомпилировал и попробовал двоичный файл, но текст не распечатывается. Можете ли вы воспроизвести эту дисфункцию и скажите, как ее исправить?

Благодарю вас за помощь и прошу прощения за банальность моего вопроса. (Все же я не могу понять, где все пошло не так).

2 ответа

Решение

Если вы используете qemu, вам нужно добавить изображение в целое число, кратное размеру сектора.

Добавьте это в конец image.asm:

times 512*2-($-$$) db 0

И собрать и запустить с:

nasm -f bin -o image.bin image.asm
qemu-system-i386 -fda image.bin

С другим эмулятором вам может понадобиться заполнить общую длину (1+5)*512 или даже полную длину дискеты (1474560 байт).

Сразу могу сказать, что этот код не гарантирует, что стек не будет 1000h:0000,

Другие вопросы по тегам