WEB开发网
开发学院软件开发汇编语言 扩展Int 13H调用规范 阅读

扩展Int 13H调用规范

 2008-04-29 09:34:09 来源:WEB开发网   
核心提示:第二部分技术资料第一章扩展Int13H技术资料一.简介设计扩展Int13H接口的目的是为了扩展BIOS的功能,使其支持多于1024柱面的硬盘,扩展Int 13H调用规范(3),以及可移动介质的锁定,解锁及弹出等功能,该位必须置1(某些驱动器号为0到0x7F的设备也需要置位)6位:0=CHS值是当前存储介质的值(仅对于可

第二部分技术资料

第一章扩展Int13H技术资料

一.简介

设计扩展Int13H接口的目的是为了扩展BIOS的功能,使其支持多于1024柱面的硬盘,以及可移动介质的锁定,解锁及弹出等功能。

二.数据结构

1.数据类型约定

BYTE 1字节整型( 8位)

WORD 2字节整型(16位)

DWORD4字节整型(32位)

QWORD8字节整型(64位)

2.磁盘地址数据包DiskAddressPacket(DAP)

DAP是基于绝对扇区地址的,因此利用DAP,Int13H可以轻松地逾越1024柱面的限制,因为它根本就不需要CHS的概念。

DAP的结构如下:

     structDiskAddressPacket
      {
       BYTEPacketSize;  //数据包尺寸(16字节)
       BYTEReserved;   //==0
       WORDBlockCount;  //要传输的数据块个数(以扇区为单位)
       DWORDBufferAddr; //传输缓冲地址(segment:offset)
       QWORDBlockNum;  //磁盘起始绝对块地址
      };

PacketSize保存了DAP结构的尺寸,以便将来对其进行扩充。在目前使用的扩展Int13H版本中PacketSize恒等于16。如果它小于16,扩展Int13H将返回错误码(AH=01,CF=1)。

BlockCount对于输入来说是需要传输的数据块总数,对于输出来说是实际传输的数据块个数。BlockCount=0表示不传输任何数据块。

BufferAddr是传输数据缓冲区的32位地址(段地址:偏移量)。数据缓冲区必须位于常规内存以内(1M)。

BlockNum表示的是从磁盘开始算起的绝对块地址(以扇区为单位),与分区无关。第一个块地址为0。一般来说,BlockNum与CHS地址的关系是:

BlockNum=(cylinder*NumberOfHeads+head)*SectorsPerTrack+sector-1;

其中cylinder,head,sector是CHS地址,NumberOfHeads是磁盘的磁头数,SectorsPerTrack是磁盘每磁道的扇区数。

也就是说BlockNum是沿着扇区->磁道->柱面的顺序记数的。这一顺序是由磁盘控制器虚拟的,磁盘表面数据块的实际排列顺序可能与此不同(如为了提高磁盘速度而设置的间隔因子将会打乱扇区的排列顺序)。

3.驱动器参数数据包DriveParametersPacket

驱动器参数数据包是在扩展Int13H的取得驱动器参数子功能调用中使用的数据包。格式如下:

  structDriveParametersPacket
    {
     WORDInfoSize;     //数据包尺寸(26字节)
     WORDFlags;      //信息标志
     DWORDCylinders;    //磁盘柱面数
     DWORDHeads;      //磁盘磁头数
     DWORDSectorsPerTrack; //每磁道扇区数
     QWORDSectors;     //磁盘总扇区数
     WORDSectorSize;    //扇区尺寸(以字节为单位)
    };

信息标志用于返回磁盘的附加信息,每一位的定义如下:

0位:

0=可能发生DMA边界错误

1=DMA边界错误将被透明处理

如果这位置1,表示BIOS将自动处理DMA边界错误,也就是说错误代码09H永远也不会出现.

1位:

0=未提供CHS信息

1=CHS信息合法

如果块设备的传统CHS几何信息不适当的话,该位将置0.

2位:

0=驱动器不可移动

1=驱动器可移动

3位:表示该驱动器是否支持写入时校验.

4位:

0=驱动器不具备介质更换检测线

1=驱动器具备介质更换检测线

5位:

0=驱动器不可锁定

1=驱动器可以锁定

要存取驱动器号大于0x80的可移动驱动器,该位必须置1(某些驱动器号为0到0x7F的设备也需要置位)

6位:

0=CHS值是当前存储介质的值(仅对于可移动介质),如果驱动器中有存储介质,CHS值将被返回.

1=CHS值是驱动器支持的最大值(此时驱动器中没有介质).

7-15位:保留,必须置0.

上一页  1 2 3 4 5 6  下一页

Tags:扩展 Int 调用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接