Assembly 为什么引导加载程序只能接受16位程序集

Assembly 为什么引导加载程序只能接受16位程序集,assembly,x86-64,x86-16,bootloader,Assembly,X86 64,X86 16,Bootloader,在编写自己的MBR时,我需要告诉nasm使用16bitassembly,我想知道为什么在2020年我们必须使用16bitassembly来编写引导加载程序 为什么我们不能开发具有现代x64组件的引导加载程序?您可以 如果您不想处理遗留BIOS 16位的不便,那么就编写UEFI引导加载程序,而不是遗留MBR。UEFI引导加载程序是一个32位或x86-64“应用程序”,由固件在与MBR完全不同的环境中从文件系统而不是磁盘上的特定位置加载,这意味着在磁盘上的特定位置嵌入少量代码(512字节)不会太麻烦

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

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

您可以

如果您不想处理遗留BIOS 16位的不便,那么就编写UEFI引导加载程序,而不是遗留MBR。UEFI引导加载程序是一个32位或x86-64“应用程序”,由固件在与MBR完全不同的环境中从文件系统而不是磁盘上的特定位置加载,这意味着在磁盘上的特定位置嵌入少量代码(512字节)不会太麻烦


主流PC使用UEFI已经有十多年了;让固件将CPU置于实模式并设置旧式BIOS调用处理程序是向后兼容的功能,以保持与MBR引导的兼容性,因为这种格式没有空间让元数据告诉系统要以何种模式引导


请注意,让CPU处于64位长模式需要启用分页,因此在进入MBR时仅修改MBR引导以使CPU处于64位模式将无法正常工作。你需要一系列新的标准化。很多实模式BIOS API都是过时的东西,跟不上现代PC的发展,比如基于CHS的磁盘访问不是线性偏移,不容易支持图形+鼠标,也没有文件系统访问。所以,是时候进行彻底的改造了。更不用说勉强兼容的bios的可怕之处了,这些bios碰巧与Windows引导加载程序一起工作,但在各种随机方式上彼此不同,比如它们如何为相同的线性地址或其他段寄存器设置CS:IP

业界最终选择EFI/UEFI作为传统IBM-PC BIOS风格引导的完全替代品

你可以

如果您不想处理遗留BIOS 16位的不便,那么就编写UEFI引导加载程序,而不是遗留MBR。UEFI引导加载程序是一个32位或x86-64“应用程序”,由固件在与MBR完全不同的环境中从文件系统而不是磁盘上的特定位置加载,这意味着在磁盘上的特定位置嵌入少量代码(512字节)不会太麻烦


主流PC使用UEFI已经有十多年了;让固件将CPU置于实模式并设置旧式BIOS调用处理程序是向后兼容的功能,以保持与MBR引导的兼容性,因为这种格式没有空间让元数据告诉系统要以何种模式引导


请注意,让CPU处于64位长模式需要启用分页,因此在进入MBR时仅修改MBR引导以使CPU处于64位模式将无法正常工作。你需要一系列新的标准化。很多实模式BIOS API都是过时的东西,跟不上现代PC的发展,比如基于CHS的磁盘访问不是线性偏移,不容易支持图形+鼠标,也没有文件系统访问。所以,是时候进行彻底的改造了。更不用说勉强兼容的bios的可怕之处了,这些bios碰巧与Windows引导加载程序一起工作,但在各种随机方式上彼此不同,比如它们如何为相同的线性地址或其他段寄存器设置CS:IP


业界最终选择EFI/UEFI作为传统IBM-PC BIOS风格引导的完全替代品

“跟不上现代PC,比如基于CHS的磁盘访问,而不是线性偏移”-公平地说,在UEFI之前,中断13小时服务的LBA扩展就已经存在了。@ecm:fair point。但是你能指望它们在每个可以启动MBR的系统上都可用吗?如果没有,那么它仍然有潜在的问题或不便。也许更好的例子是图形+鼠标、文件系统访问(而不是原始磁盘扇区),这样您就可以更新引导加载程序,而无需在实际分区(可能是USB/可移动设备,包括可移动存储)之前将其重新嵌入扇区。也许是光盘?虽然现在光盘的相关性较低。磁盘检测顺序也可能有问题。@PeterCordes-我有一个多引导系统,它使用MBR-Win XP、Win XP X64、Win 7 Pro 64位、Win 10 Pro 64位。EFI/UEFI很不错,但对于任何当前版本的Windows都不需要它(也许服务器版本需要它?。@rcgldr:I当然过于简化了。大多数(全部?)现代PC可以配置为在传统BIOS模式下启动。但是开箱即用,主流PC没有这样配置,所以引导(在世界上任何一天引导的所有PC)从硬件重置到操作系统完全运行,而不涉及MBR引导加载程序。除非有比我预期的更多的旧电脑,在这种情况下,我指的是“现代”电脑,在UEFI足够稳定并用作默认值的年代制造。您仍然可以从遗留MBR引导现代操作系统这一事实与我的观点无关。@PeterCordes-Win XP/Win XP X64是否支持EFI/UEFI引导?多引导Win 7/Win 10设置或仅Win 7设置如何?我没有一个Win7系统不是多引导的,所以我不知道Win7是否默认为传统的文本模式屏幕引导。只有当我将Win 10作为默认引导操作系统时,我才能获得Win PE引导。“没有跟上现代PC的步伐,比如基于CHS的磁盘访问不是线性偏移”-公平地说,中断13小时服务的LBA扩展在UEFI之前就已经存在了。@ecm:公平点。但是你能指望它们在每个可以启动MBR的系统上都可用吗?如果没有,那么它仍然有潜在的问题或不便。也许更好的例子是图形+鼠标、文件系统访问(而不是原始磁盘扇区),这样您就可以更新引导加载程序,而无需在实际分区(可能是USB/可移动设备,包括可移动存储)之前将其重新嵌入扇区。也许是光盘?虽然现在光盘的相关性较低。还有磁盘检测