为什么引导加载程序只能接受16位汇编

问题描述

在编写自己的MBR时,我需要告诉nasm使用16bit程序集,我想知道为什么在2020年我们必须使用16bit程序集来编写引导加载程序。

为什么我们不能用现代的x64组件开发引导程序?

解决方法

可以。

如果您不想处理旧版BIOS 16位不便之处,请编写UEFI引导加载程序,而不是旧版MBR。 UEFI引导加载程序是由固件在与MBR完全不同的环境中从文件系统而不是磁盘上的特定位置加载的32位或x86-64“应用程序”,这意味着无需为嵌入少量的文件系统而烦恼。代码(512字节)放入磁盘上的特殊位置。


主流PC已使用UEFI启动了十多年。向后兼容功能可以使固件使CPU​​进入实模式并设置旧版BIOS调用处理程序,从而保持与MBR引导的兼容性,因为该格式没有足够的元数据空间来告诉系统您要以哪种模式引导。 >

请注意,使CPU处于64位长模式需要启用分页,因此仅修改MBR引导以使CPU在进入MBR时处于64位模式就不能很好地工作。您需要大量新的标准化。许多实模式BIOS API都是已经过时的东西,无法与现代PC保持同步,例如基于CHS的磁盘访问,线性偏移,对图形+鼠标的轻松支持以及对文件系统的访问。因此,该进行全面改革了。更不用说几乎兼容的BIOS的恐怖了,这些BIOS恰好可以与Windows引导加载程序一起工作,但是它们以各种随机方式彼此不同,例如它们如何为同一线性地址或其他段寄存器设置CS:IP。

该行业最终使用EFI / UEFI替代了传统的IBM-PC BIOS样式启动。 https://wiki.osdev.org/UEFI