32 位引导加载程序是否与 16 位引导扇区兼容?
Is a 32-bit bootloader compatible with a 16-bit bootsector?
32 位引导加载程序是否与 16 位引导扇区兼容?
我是 运行 来自 16 位引导扇区的 32 位引导加载程序。
我正在构建自己的 OS.
编辑 1
我是 运行 VMWare Workstation 14 上具有 x86_64 CPU 的虚拟机上的引导扇区。
我真正的 CPU 是 AMD Vision E2 x64。
编辑 2
我在引导加载程序中使用 NASM 汇编程序和 C 语言。
是的,可以从 16 位引导扇区使用 32 位引导加载程序。引导扇区始终作为 16 位代码执行,所有现代操作系统都能够从引导扇区引导到保护模式或长模式,所以这当然是可能的。
难点在于需要手动进入32位保护模式才能执行32位代码。通常,这是在引导加载程序本身或作为进入保护模式然后继续加载实际引导加载程序的中间阶段完成的。
您也可以从您的引导扇区进入保护模式,但是在仅仅 512 字节的代码中完成这可能有点挑战,因为您需要做的不止于此;例如,您可能还想从 BIOS 中提取内存映射和其他有用信息或配置视频模式。当然,您需要从引导扇区加载实际的引导加载程序。
32 位引导加载程序是否与 16 位引导扇区兼容?
我是 运行 来自 16 位引导扇区的 32 位引导加载程序。
我正在构建自己的 OS.
编辑 1
我是 运行 VMWare Workstation 14 上具有 x86_64 CPU 的虚拟机上的引导扇区。
我真正的 CPU 是 AMD Vision E2 x64。
编辑 2
我在引导加载程序中使用 NASM 汇编程序和 C 语言。
是的,可以从 16 位引导扇区使用 32 位引导加载程序。引导扇区始终作为 16 位代码执行,所有现代操作系统都能够从引导扇区引导到保护模式或长模式,所以这当然是可能的。
难点在于需要手动进入32位保护模式才能执行32位代码。通常,这是在引导加载程序本身或作为进入保护模式然后继续加载实际引导加载程序的中间阶段完成的。
您也可以从您的引导扇区进入保护模式,但是在仅仅 512 字节的代码中完成这可能有点挑战,因为您需要做的不止于此;例如,您可能还想从 BIOS 中提取内存映射和其他有用信息或配置视频模式。当然,您需要从引导扇区加载实际的引导加载程序。