mov似乎无法正常工作

时间:2018-05-06 09:55:51

标签: assembly operating-system nasm boot

我正在为x86架构编写一个bootloader。到目前为止,我只是使用16位,并使用BIOS调用显示字符,读取磁盘等,但现在我想进入32位保护模式。

我决定不再使用BIOS功能了,因为它们只能用于16位。

因为我的引导加载程序将加载到内存中的0x7c00(因为扇区以0xaa55结束,因为我现在想要以32位工作,第一个我boot.asm中的两行是:

[org 0x7c00]
[bits 32]

现在,根据我的理解,BIOS的文本视频内存从0xb8000开始,所以要在屏幕左上角显示一个字符 - 比方说,黑色背景上的白色'A' - 我会这样做:

mov al, 'A'
mov ah, 0x0f ; white on black
mov [0xb8000], ax

将具有正确属性的字符移动到视频内存的开头。然后我在bochs中模拟了我的操作系统,但我的角色并不是我想要的。我看不到它。

然后我认为它可能与我的[org 0x7c00]指令有关,根据我的理解,这取消了我使用的任何地址。因此,将ax移至0xb8000,而不是将其移至0xb8000 - 0x7c00 = 0xb0400,这是有道理的。我用以下代码替换了代码:

mov al, 'A'
mov ah, 0x0f
mov [0xb0400], ax

但这与上一次尝试有相同的问题(角色不在屏幕上,或者在正确的内存位置)。我想不出任何其他的尝试,在互联网上寻求任何帮助似乎没有任何用处。

为什么这不起作用?如何我将角色A移动到这个记忆区域,如果不是这样的话?

0 个答案:

没有答案