如何在实模式下列出BIOS驱动器编号?

6

有没有办法在实模式下列出BIOS驱动器索引(例如0x80、0x81...)?

我没有找到任何负责列出驱动器编号的中断!!


1
我认为你可以在BIOS数据区的40:75处找到硬盘数量。虽然我不确定它们是否按顺序引用,但我认为应该是这样的。你也可以查看int 21h 0E,它返回“存在的最高驱动器”。或者,你可以调用int 13h/08并递增驱动器编号,直到出现错误。我相当确定DOS最多支持26个驱动器(包括软盘),所以这个循环不会运行太长时间。 - David Wohlferd
谢谢@DavidWohlferd。我尝试了你说的方法,但似乎出了点问题,可能是我漏掉了什么。40:75返回一个驱动器,13/08在dl上返回一个驱动器。此外,我尝试了你说的:在13/08上循环只找到0x80。然而,我正在从USB驱动器启动,计算机已经有一个硬盘作为BIOS中的第二选择。请注意,没有USB闪存,计算机可以正常工作。此外,该USB闪存在另一台计算机上可以使用。我尝试了所有方法,你有任何理论上的想法,还是我发送另一个SO? - محمد جعفر نعمة
USB 会显示为“硬盘”吗?由于它是可拆卸的,所以也许会被视为软盘驱动器吗? - David Wohlferd
你说得对,@DavidWohlferd。我从未考虑过从BIOS的角度来看可移动介质就像软盘驱动器一样。USB闪存驱动器的编号是零,而硬盘驱动器的编号是0x80。非常感谢。顺便说一下,你可以给我一个答案,我会接受它。 - محمد جعفر نعمة
当启动时,BIOS会将引导设备的驱动器号传递给DL寄存器中的引导扇区代码。如果您正在使用自己的引导扇区代码,则应使用此数字来确定引导设备。 - Ross Ridge
1个回答

9

我不知道有什么方法可以在实模式下“列出”可用的BIOS驱动器。

但是,有一些可能会有所帮助的东西:

  • 硬盘的数量存储在BIOS数据区40:75处。虽然我不“知道”驱动器号按顺序分配,但我希望它们是这样分配的。如果是这样的话,硬盘驱动器列表将从0x80到0x80 +(40:75-1)运行(尽管可能没有硬盘驱动器,因此0x80也可能无效)。
  • 还有一个int 21h函数0E(选择默认驱动器),返回“存在的最高驱动器”。没有检查,我猜这与LastDrive有关,但它可能会有用。
  • 最后还有一个int 13h函数08(读取驱动器参数),并逐个增加驱动器号直到出现错误。我非常确定DOS最多只有26个驱动器(包括硬盘、CD、软盘等),因此这个循环不会运行太长时间。

请注意,对于BIOS函数,硬盘驱动器通常具有最高有效位设置。因此,硬盘驱动器#0被称为0x80,#1是0x81,依此类推。软盘驱动器没有设置此位,因此从0开始计数。

当USB驱动器出现时,我已经停止使用DOS,因此我不确定它们是否显示为硬盘驱动器或软盘驱动器。由于它们是可移动的,我不希望它们被列为硬盘驱动器,但这可能取决于您使用的驱动程序。


1
如果您正在从USB启动,则几乎肯定是通过BIOS的软盘驱动器仿真模式进行的。如果您从其他驱动器引导并在DOS下运行,则完全取决于驱动程序。 - Cody Gray
3
DOS功能0Eh处理逻辑驱动器,这些驱动器可以位于同一物理驱动器上。BIOS驱动器编号都表示物理驱动器。 - Sep Roland
1
在我的真正的DOS计算机上,USB驱动器被DOS和BIOS一样视为硬盘。 - Sep Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接