Я решил написать свой собственный загрузчик.
Мне удалось установить режим видео на 3 (хотя qemu уже устанавливает его на 3 уже), а затем вывести «A» в первый символ первой строки на экране, непосредственно изменяя видеопамять.
[org 0x7C00] ;Address BIOS loads the bootloader into
[bits 16]
;Set video mode to mode 3
mov al, 0x03
mov ah, 0x00
int 0x10
mov ax, 0xB800
mov es, ax
mov bx, 0
mov [es:bx], byte 65
mov [es:bx+1], byte 0x0F
;cli
JMP $ ;Infinite loop, hang it here.
times 510 - ($ - $$) db 0 ;Fill the rest of sector with 0
dw 0xAA55 ;Add boot signature at the end of bootloader
Обратите внимание на закомментированную инструкцию. Когда я удаляю точку с запятой и только точку с запятой, буква «А» больше не печатается. Я не понимаю, как очистка флага IF может иметь побочный эффект, влияющий на то, что находится в памяти. Если бы кто-то мог пролить свет на это, это было бы здорово.
Да и за что, команды, которые я использую для запуска загрузчика
nasm -o bl.bin bl.asm
qemu -fda bl.bin
Я получил пламя где-то еще и прочитал столько, сколько мог. Кто-то упомянул настройку стека, но я не понимаю, насколько это актуально для моей проблемы.
Помощь очень ценится!