尽管改变了bl中的值,为什么线条只打印为黄色?

时间:2012-10-18 10:25:50

标签: assembly x86 nasm bios

bits 32
main:

    mov ah, 09h
    mov bh, 0
    mov cx, 80
    mov bl, 01110000b
    mov al, ' '
    int 10h

    jmp $

times 512-($-$$) db 0

2 个答案:

答案 0 :(得分:0)

您还没有处于32位模式,因此请使用bits 16

此外,在保护模式下,BIOS功能不可用。只是这样你知道并且在保护模式下不要尝试打电话。

答案 1 :(得分:0)

事实上,bits 32阻止了它的运作。您可以使用ndisasm查看正在发生的事情。按原样组装,并用ndisasm拆卸它。 ndisasm的默认值为16位,但为清晰起见,您可以指定-b16。这就是CPU将“看到”它是否处于16位模式......它是什么。它需要更多的代码才能切换到32位模式 - 你很快就能实现这一点,但CPU会以16位模式启动(即使是64位CPU)。要查看CPU在32位模式下何时/何时“看到”,请再次使用-b32进行反汇编。看到不同?你的mov bl, 01110000b已经消失,被mov cx, 80“吞噬”了!然后在没有bits 32的情况下再次尝试。你可以说bits 16,但无论如何这都是Nasm的默认值。

告诉汇编程序bits 32和实际拥有32位模式的CPU之间存在细微差别。通常情况下,这不会造成太大麻烦(其他方面 - 操作系统 - 确定了CPU模式),但在引导扇区中它会![/ p>

当您实际将CPU切换到32位保护模式时,那时 - 确切地说 - 您将要告诉Nasm bits 32

http://www.osdev.org有很多关于此事的信息 - 我推荐它!我也有一个例子发布到新闻组 - 很久以前 - 由Alexey(实际上是“阿列克谢” - 那不是你吗?)。

Happy bootin',