Пытаюсь использовать прерывание видео биоса для отображения персонажа на экране. Ниже приведен код сборки:
mov $0x0A, %AH
mov $0x68, %AL ; to display character 'h'
int $0x10
Я собрал этот код с помощью ассемблера GNU для создания объектного файла с именем sample.o Общий размер sample.o составляет 449 байт. Теперь я вручную записываю в этот объектный файл шестнадцатеричные цифры 0x55 и 0xAA в позициях 511-го и 512-го байта, чтобы сделать его загрузочным. Итак, я считаю, что теперь у меня есть загрузочный сектор размером 512 байт. Я использую qemu, чтобы попытаться загрузиться из этого объектного файла:
$> qemu -fda sample.o
Эмулятор qemu запускается и зависает в точке, где он говорит: «Загрузка с дискеты ...» Но я подумал, что после того, как он обнаружит загрузочный сектор, код прерывания видео BIOS должен был запускаться и отображать символ на экране.
Я знаю, что делаю что-то ужасно неправильно. Может быть, мне не хватает всей концепции прерываний. Кто-нибудь может помочь.
РЕДАКТИРОВАТЬ: теперь я использую as86 и ld86 для создания только плоского двоичного файла. И вместо 0x0A в AH я использую 0x0E, и похоже, что это помогло. Похоже, проблема с реализацией BIOS.
Я ценю всех, кто ответил.
Спасибо