bits 32
main:
mov ah, 09h
mov bh, 0
mov cx, 80
mov bl, 01110000b
mov al, ' '
int 10h
jmp $
times 512-($-$$) db 0
答案 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',
谢