Warm tip: This article is reproduced from serverfault.com, please click

assembly-以实模式列出BIOS驱动器编号的任何方法

(assembly - Any way to list the BIOS drive numbers in real mode)

发布于 2017-08-26 01:08:11

有什么方法可以在实模式下列出BIOS驱动器索引(例如0x80、0x81 ...)?

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

Questioner
Mohamad-Jaafar NEHME
Viewed
0
David Wohlferd 2017-08-27 08:21:57

我不知道以任何方式“列出”实模式下可用的BIOS驱动器。

但是,有些事情可能会有所帮助:

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

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

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