-2
bits 32
main:

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

    jmp $

times 512-($-$$) db 0
4

2 回答 2

0

事实上,bits 32正是这一点阻止了它的工作。您可以使用 ndisasm 查看正在发生的事情。按原样组装它,然后用 ndisasm 拆卸它。ndisasm 的默认值为 16 位,但-b16为了清楚起见,您可以指定。如果 CPU 处于 16 位模式,这就是 CPU 将“看到”的内容……确实如此。切换到 32 位模式需要更多代码 - 您很快就会做到,但 CPU 以 16 位模式启动(甚至是 64 位 CPU)。要查看 CPU 在 32 位模式下会“看到”什么,请再次使用-b32. 看到不同?你mov bl, 01110000b已经消失了,被“吞噬”了mov cx, 80!然后在没有bits 32. 你可以说bits 16,但无论如何这是 Nasm 的默认设置。

bits 32告诉汇编程序和实际让 CPU 处于 32 位模式之间存在细微差别。通常,这不会造成太大的麻烦(其他人 - 操作系统 - 已确定 CPU 模式),但在引导扇区中它会!

当您真正将 CPU 切换到 32 位保护模式时,您会想要告诉 Nasm bits 32

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

快乐开机,

坦率

于 2012-10-18T17:57:39.373 回答
0

您尚未处于 32 位模式,因此请使用bits 16.

此外,在保护模式下,BIOS 功能不可用。只是为了让您知道并且不要在处于保护模式时尝试调用它们。

于 2012-10-18T11:59:30.760 回答