为什么bootloader只能接受16位汇编
Why bootloaders can only accept 16bit assembly
写我自己的MBR时,我需要告诉nasm使用16bit
程序集,我想知道为什么在2020年我们必须使用16bit
程序集才能写一个bootloader .
为什么我们不能使用现代 x64 汇编开发引导加载程序?
可以。
如果您不想处理遗留 BIOS 16 位带来的不便,请编写 UEFI 引导加载程序而不是遗留 MBR。 UEFI 引导加载程序是一个 32 位或 x86-64“应用程序”,由固件在与 MBR 截然不同的环境中加载,从文件系统而不是磁盘上的特定位置加载,这意味着嵌入少量代码(512 字节)到磁盘上的一个特殊位置。
主流 PC 使用 UEFI 启动已有十多年;让固件将 CPU 置于实模式并设置旧版 BIOS 调用处理程序是一种向后兼容功能,以保持与 MBR 引导的兼容性,因为该格式没有元数据空间来告诉系统您要引导哪种模式英寸
请注意,在 64 位长模式下使用 CPU 需要启用分页,因此只需修改 MBR 引导以在进入 MBR 时在 64 位模式下使用 CPU 就可以了好好工作。你需要一堆新的标准化。很多 real-mode BIOS API 是过时的东西,跟不上现代 PC 的步伐,比如基于 CHS 的磁盘访问不是线性偏移,不支持图形 + 鼠标,也没有文件系统访问.所以是时候进行全面改造了。更不用说勉强兼容的 BIOS 的恐怖,它们碰巧与 Windows 引导加载程序一起工作,但在各种随机方式上彼此不同,比如它们如何为相同的线性地址或其他段寄存器设置 CS:IP .
业界最终采用 EFI/UEFI 作为传统 IBM-PC BIOS 样式引导的完全替代品。 https://wiki.osdev.org/UEFI
写我自己的MBR时,我需要告诉nasm使用16bit
程序集,我想知道为什么在2020年我们必须使用16bit
程序集才能写一个bootloader .
为什么我们不能使用现代 x64 汇编开发引导加载程序?
可以。
如果您不想处理遗留 BIOS 16 位带来的不便,请编写 UEFI 引导加载程序而不是遗留 MBR。 UEFI 引导加载程序是一个 32 位或 x86-64“应用程序”,由固件在与 MBR 截然不同的环境中加载,从文件系统而不是磁盘上的特定位置加载,这意味着嵌入少量代码(512 字节)到磁盘上的一个特殊位置。
主流 PC 使用 UEFI 启动已有十多年;让固件将 CPU 置于实模式并设置旧版 BIOS 调用处理程序是一种向后兼容功能,以保持与 MBR 引导的兼容性,因为该格式没有元数据空间来告诉系统您要引导哪种模式英寸
请注意,在 64 位长模式下使用 CPU 需要启用分页,因此只需修改 MBR 引导以在进入 MBR 时在 64 位模式下使用 CPU 就可以了好好工作。你需要一堆新的标准化。很多 real-mode BIOS API 是过时的东西,跟不上现代 PC 的步伐,比如基于 CHS 的磁盘访问不是线性偏移,不支持图形 + 鼠标,也没有文件系统访问.所以是时候进行全面改造了。更不用说勉强兼容的 BIOS 的恐怖,它们碰巧与 Windows 引导加载程序一起工作,但在各种随机方式上彼此不同,比如它们如何为相同的线性地址或其他段寄存器设置 CS:IP .
业界最终采用 EFI/UEFI 作为传统 IBM-PC BIOS 样式引导的完全替代品。 https://wiki.osdev.org/UEFI