【问题标题】:Is a 32-bit bootloader compatible with a 16-bit bootsector? [closed]32 位引导加载程序是否与 16 位引导扇区兼容? [关闭]
【发布时间】:2018-10-17 09:37:43
【问题描述】:

32 位引导加载程序是否与 16 位引导扇区兼容?

我正在从 16 位引导扇区运行 32 位引导加载程序。
我正在构建自己的操作系统。

编辑 1

我在 VMWare Workstation 14 上使用 x86_64 CPU 的虚拟机上运行引导扇区。
我真正的 CPU 是 AMD Vision E2 x64。

编辑 2

我在引导加载程序中使用 NASM 汇编程序和 C 语言。

【问题讨论】:

  • 不清楚你在做什么。你甚至没有指定架构。但简短的回答可能是肯定的,这意味着您可以在实模式下执行 32 位 x86 指令,假设您实际上有一个 32 位 cpu。
  • 您有什么样的兼容性?我不明白您希望“32 位应用程序”(无论这意味着什么)以何种方式与引导扇区“兼容”。
  • 在实践中,我建议使用一些现有的引导加载程序,例如GRUB。自己写一个需要很多时间。花时间编写自己的操作系统(这需要数年时间)。见osdev
  • 我正在创建自己的引导加载程序。

标签: assembly x86 operating-system boot


【解决方案1】:

是的,可以从 16 位引导扇区使用 32 位引导加载程序。引导扇区始终作为 16 位代码执行,所有现代操作系统都能够从引导扇区引导到保护模式或长模式,因此这当然是可能的。

困难的部分是你需要手动进入 32 位保护模式才能执行 32 位代码。通常,这是在引导加载程序本身中完成的,或者作为进入保护模式然后继续加载实际引导加载程序的中间阶段。

您也可以在引导扇区内进入保护模式,但在 512 字节的代码内执行此操作可能会有些挑战,因为您需要做的还不止这些;例如,您可能还想从 BIOS 中提取内存映射和其他有用信息或配置视频模式。当然,您需要从引导扇区加载实际的引导加载程序。

【讨论】:

  • 谢谢我,这个答案很有帮助
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 2015-06-02
  • 2012-04-09
  • 2017-01-24
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多