Assembly 如何知道第三主SATA硬盘的Bios驱动器号?

Assembly 如何知道第三主SATA硬盘的Bios驱动器号?,assembly,sata,Assembly,Sata,Uptill现在我使用的是IDE硬盘,能够使用BIOS调用甚至LBA 28直接硬件访问usng PIO模式进行访问,而无需任何O.S.调用。 现在我已经购买了新的SATA 500 GB硬盘,它是我唯一连接到SATA 1端口的硬盘。我的BIOS显示为第三主硬盘,主和辅助主硬盘不存在。 现在我已经在第一个运行正常的分区上安装了MSDOS5.0。 但现在我只能使用DOS INT 25h从逻辑扇区0开始读取硬盘扇区。这意味着我无法读取任何隐藏扇区,包括主引导记录。 当我使用BIOS int 13H调用使

Uptill现在我使用的是IDE硬盘,能够使用BIOS调用甚至LBA 28直接硬件访问usng PIO模式进行访问,而无需任何O.S.调用。 现在我已经购买了新的SATA 500 GB硬盘,它是我唯一连接到SATA 1端口的硬盘。我的BIOS显示为第三主硬盘,主和辅助主硬盘不存在。 现在我已经在第一个运行正常的分区上安装了MSDOS5.0。 但现在我只能使用DOS INT 25h从逻辑扇区0开始读取硬盘扇区。这意味着我无法读取任何隐藏扇区,包括主引导记录。 当我使用BIOS int 13H调用使用驱动器80H读取硬盘时,它不会返回任何错误,但不会读取任何内容。如果我使用驱动器83H,它会给出驱动器不存在错误。如果我使用DOS功能,我可以作为驱动器c(驱动器2)访问我的硬盘,但不能用于读取MBR。 如果我要在int 13H中使用MS扩展,我必须知道BIOS驱动器号。 有人能告诉我如何找到第三主硬盘的驱动器号吗? 或者在兼容模式下使用LBA 40(01f0不工作)访问HDD必须使用哪个端口?

建议挂接INT 13h并调用INT 25h,以查看MS-DOS使用的BIOS驱动器号:

一种检测逻辑驱动器号的实际分配的方法 到物理BIOS驱动器单元(例如检测引导驱动器), 是临时挂载一个INT 13h处理程序来记录所使用的DL 任何INT 13/AH=02h读取操作的驱动装置,并丢弃任何 尝试访问实际的软盘驱动器。然后调用INT 25h以获取 所有适当的DOS驱动器,并观察记录的结果 INT 13h拦截器。
谢谢。事实上,我发现我的硬盘显示为80H,我的程序读取的是0号扇区,而不是1号扇区,这是一个愚蠢的错误。