CLI影响视频内存

时间:2010-06-02 11:59:01

标签: x86 bootloader

我决定编写自己的bootloader。

我已经能够将视频模式设置为3(尽管qemu已将其设置为3),然后通过直接更改视频内存在屏幕第一行的第一个字符处打印“A”。 / p>

[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

我在其他地方被火烧了,尽可能多地读书。有人提到设置堆栈,但我不明白它与我的问题有关。

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

取决于显卡硬件! 有些视频卡不直接支持所有视频模式,但只能模拟。 因此,通过中断,代码的内部部分负责将该存储器每隔几毫秒复制到图形卡存储器中。当您关闭中断时,您还将关闭图形卡上内部视频内存的刷新。 CLI指令禁用所有软件中断,因此只有硬件指令存在,因此BIOS无法正常工作。您只能将CLI指令用于同步读取或写入内存或IO端口。 为了确定我的答案,你可以在执行CLI指令之前暂停大约6ms,并显示字符。