有没有办法检索 BIOS 在其中找到并加载引导扇区的设备 ID?

Is there a way to retrieve the device ID in which the BIOS found and loaded a boot sector?

我知道 BIOS 按照配置的顺序(可以在 BIOS 设置中更改)遍历连接的存储设备(软盘、CD、硬盘驱动器...等),寻找魔法每个第一个扇区末尾的 16 位值 (0xAA55),一旦找到一个,它就会加载(刚刚变成的)引导扇区并调用它。

让我们将包含加载的引导扇区的设备命名为 X。我的问题是:除了遍历所有设备,您能否识别 X 并使用 BIOS 的磁盘中断功能从中读取,而不必测试每个连接的设备?例如,BIOS 是否将 X 的 ID 存储在某处?

谢谢。

P.S。我正在使用 BOCHS 模拟的 IA-32 机器上工作,我总是从软盘 #1 加载,所以我可以硬编码读取它,但为了编写干净的代码和学习我问。我承认测试所有设备绝对实用。

当 BIOS 将控制权交给引导加载程序时,它会在 DL 寄存器中存储“BIOS 设备 ID”,因此引导加载程序可以只使用它的设备 ID被告知用于所有后续的 BIOS 函数。

主要问题是“BIOS设备ID”在早期启动后相对无用(在OS开始使用自己的磁盘驱动程序并停止使用BIOS功能后);因为没有简单的方法来确定哪个设备恰好被赋予了哪个“BIOS 设备 ID”;特别是对于像“RAID 1 镜像”这样的情况,您可能有 2 个几乎相同的硬盘驱动器,内容基本相同。

I acknowledge that testing all devices is definitely practical.

呵呵,没有。在 2 个不同的硬盘驱动器上安装 2 个单独的 OS 副本(这样你就有了 2 个引导加载程序,每个 OS 副本一个)并且“测试所有设备”变得不可能区分你启动的 OS 和你没有启动的 OS。