INT 0x13,AH = 0x41已通过,但INT 0x13,AH = 0x48失败

时间:2014-07-31 19:36:37

标签: assembly x86 nasm boot usb-drive

这是关于代码进入引导扇区的问题。

BIOS Enhanced Disk Drive Specification 3.0

我能够毫无问题地成功拨打[8.17 Check Extensions Present(FN 41h)];我在BX中观察到了签名,AH中的版本号是0x30,CX中的接口支持位图是5。

然而,当我调用[8.24 Check Extensions Present(FN 48h)]时,DS硬编码为0x07C0,SI硬编码为0x0200,在引导扇区签名后的512字节位置,以及DL中的原始驱动器号。无论如何,原始驱动器号是0x80,当我硬编码该值时,我仍然设置进位标志,并且AH返回为0x01。

我再次将此代码放在8GB USB闪存盘的引导扇区上。我怀疑由于驱动器的小,我无法使用LBA例程。所以我不能自己想出这个,我没有在规范中找到8GB阈值是否是绝对的。

1 个答案:

答案 0 :(得分:1)

已解决:扩展磁盘参数缓冲区的大小必须编码到DS:SI引用的字存储单元中。当他(Ralf Brown Interrupt List)说"(打电话)"这意味着需要在函数调用上设置内存位置。

POSTSCRIPT:这个函数调用在引导扇区中确实没有位置 - 尤其是与FAT32兼容的引导扇区。我的印象是,在加载保护模式磁盘驱动程序之前格式化卷或存储某些参数非常重要,这样磁盘就不会丢失。我不得不消除函数调用(1)以节省空间和(2)因为所有必要的信息应该已经在BIOS参数块(FAT类型文件系统)中;必须明确设置参数缓冲区大小的概念仍适用于INT 0x13, AH=0x42,但磁盘访问数据包的大小必须存储在[DS:SI]的参数缓冲区的第一个字中或该功能也会失败。