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
,