2

我正在尝试在 VGA 中打开图形模式(在我们的课程内核 - JOS 中)。
我发现要这样做,我需要从实模式(8086)调用中断 10h。但是,在进入保护模式后进入实模式是一个问题,所以我正在尝试使用 V86 模式。
我发现为了使用 V86 模式,我需要将其作为任务运行,所以现在我正在努力添加对 V86 进程的支持。
我的内核是有限的并且不包含适当的文件系统,所以为了加载实模式代码,我试图编译并将它们全部链接在一起(内核和 v86 任务)。

那么有人知道如何为实模式创建精灵吗?
另外,如果有人能给我关于如何将它与内核链接在一起的提示,那就太好了!

谢谢,
夏。

4

1 回答 1

1

这必须是一个快速的答案,但是:

我不知道如何/是否可以直接将实模式和保护模式代码链接在一起。但是,您可以尝试以下两件事:

  1. 您可以将实模式代码编译为平面二进制文件(剥离所有元数据)并将其与内核一起打包(可能通过将其附加到内核映像的末尾或其他方式)。然后,您需要在运行时找到它,将其加载到内存中,然后 jmp/call 调用它。由于我不知道您的内核是如何打包或运行的,所以这可能非常困难。
  2. 直接将机器代码添加到与内核链接的程序集文件中。我没有一个真实的例子,但它可能看起来像这样:

    EnterRealMode:
        db    0b8h, 00h, 00h            ; mov ax, 00h
        db    0fe, 0ebh                 ; jmp $
        etc.
    

此外,您可能希望真正降低到实模式而不是使用虚拟 8086 模式。如果你不这样做,BIOS 调用的内存映射和中断可能会很不稳定。关于降低到实模式的建议。

于 2013-07-16T03:01:58.017 回答