使用 16 位模式在没有 bios 例程的情况下打印字母

Using 16 bit mode to print a letter WITHOUT bios routines

我意识到在保护模式下,可以使用内存映射 I/O 通过修改内存位置 0xb8000 等来打印字母... 我们可以在 16 位实模式下这样做吗? (使用分段访问位置然后修改)

这是我的汇编代码...

[bits 16]
mov ax,0xb800
mov ds,ax    #This is the segment register that should hopefully give me 0xb8000
mov byte[ds:0x0000],'X'
mov byte[ds:0x0001],0x0f

times 510-($ -$$) db 0
dw 0xaa55

顺便说一句,这不起作用..

[编辑] 结果我最后需要 jmp $ 来防止任何随机代码执行并且代码按预期工作

它应该可以工作,有两个可能的失败原因:

  • 如果您尚未处于文本模式,则 B800 段不用于在屏幕上呈现文本。 (现代 BIOS 很有可能)
  • 如果您有单色屏幕,您的显卡可能决定使用 B000 而不是 B800。 (现代 BIOS 不太可能)。

原来我只需要最后的 jmp $ 来防止任何随机代码执行。代码按预期工作