X86 CLI对视频内存的影响

X86 CLI对视频内存的影响,x86,bootloader,X86,Bootloader,我决定写我自己的引导程序 我已经能够将视频模式设置为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],

我决定写我自己的引导程序

我已经能够将视频模式设置为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
我在别的地方被激怒了,我尽可能多地阅读。有人提到设置一个堆栈,但我不明白它与我的问题有什么关系


非常感谢你的帮助

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

您确定不是相反吗?在CLI保持不变的情况下,会显示一个“A”,而在CLI被注释掉的情况下,不会显示“A”?这是我使用的qemu的问题。但是在模拟代码中关闭中断与真正关闭中断并不相同。qemu软件应该将其虚拟化,并使其中断正常,这样它就可以更新屏幕。正如我之前所说的,在CLI指令回答这个问题之前暂停几毫秒。