我决定编写自己的引导加载程序。
我已经能够将视频模式设置为 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
注意注释掉的 cli 指令。当我删除分号并且只删除分号时,不再打印“A”。我不明白清除 IF 标志会如何产生影响内存中内容的副作用。如果有人可以对此有所了解,那就太好了。
哦,对于它的价值,我用来运行引导加载程序的命令
nasm -o bl.bin bl.asm
qemu -fda bl.bin
我在其他地方被激怒了,并尽可能多地阅读。有人提到设置堆栈,但我不明白这与我的问题有关。
非常感谢您的帮助!