1 assembly x86-64 bootloader x86-16
自己写MBR的时候,需要告诉nasm用16bit
汇编,不知道为什么2020年一定要用16bit
汇编来写bootloader。
为什么我们不能用现代 x64 程序集开发引导加载程序?
你可以。
如果您不想处理传统 BIOS 16 位的不便,那么编写 UEFI 引导加载程序而不是传统 MBR。UEFI 引导加载程序是一个 32 位或 x86-64“应用程序”,由固件在与 MBR 非常不同的环境中加载,来自文件系统而不是磁盘上的特定位置,这意味着嵌入少量代码(512 字节)放入磁盘上的特殊位置。
主流 PC 已经使用 UEFI 启动了十多年;让固件将 CPU 置于实模式并设置传统 BIOS 调用处理程序是一种向后兼容功能,以保持与 MBR 引导的兼容性,因为该格式没有空间用于告诉系统您要以何种模式引导的元数据。
请注意,使 CPU 处于 64 位长模式需要启用分页,因此仅修改 MBR 引导以使 CPU 在进入 MBR 时处于 64 位模式将无法正常工作。你需要一堆新的标准化。许多实模式 BIOS API 是过时的东西,跟不上现代 PC 的步伐,例如基于 CHS 而非线性偏移的磁盘访问、对图形 + 鼠标的简单支持以及无法访问文件系统。所以是时候进行全面改造了。更不用说几乎不兼容的 BIOS 的可怕之处,它们碰巧与 Windows 引导加载程序一起使用,但在各种随机方式上彼此不同,例如它们如何为相同的线性地址或其他段寄存器设置 CS:IP。
业界最终采用 EFI / UEFI 作为传统 IBM-PC BIOS 风格引导的完全替代品。 https://wiki.osdev.org/UEFI
归档时间: |
|
查看次数: |
142 次 |
最近记录: |