BOIS INT 13h(Direct Disk Service)

详细内容可以参考:https://en.wikipedia.org/wiki/INT_13H

INT 13h 是 BIOS 中断调用 13H 的简写,是基于 x86 架构(源自 IBM PC)的计算机系统中的第 20 个中断向量。BIOS 通常在此向量处设置一个实模式中断处理程序,该程序提供基于扇区的硬盘和软盘读写服务。

最初的 BIOS 实模式 INT 13h 接口使用通常所说的物理柱面 - 磁头 - 扇区(CHS)寻址方式,支持最大约 8GB 大小的驱动器。这个限制源于 IBM PC/XT 磁盘硬件的硬件接口。

为了支持对更大磁盘的寻址,IBM 和微软引入了一个名为 INT 13h 扩展的接口,后来 Phoenix Technologies 将其重新发布并稍作扩展,作为 BIOS 增强磁盘驱动器服务(BIOS Enhanced Disk Drive Services,EDD)的一部分。它在 INT 13h 服务中定义了新的功能,所有功能号都大于 40h,这些功能使用 64 位逻辑块寻址(LBA),允许寻址高达 8 ZiB 的空间。(假设扇区 / 块大小为 512 字节,一个 ATA 驱动器也可以支持 28 位或 48 位 LBA,分别允许高达 128 GiB 或 128 PiB 的空间)。

驱动器表

通常第 1 个软盘或第 1 个硬盘被用作系统的启动盘,由 BIOS 设置到 dl 寄存器中,并被 bootloader 使用。

DL = 00h第 1 个软盘/软驱 ( “drive A:” )
DL = 01h第 2 个软盘/软驱 ( “drive B:” )
DL = 02h第 3 个软盘/软驱 ( “drive C:” )
. . .
DL = 7Fh第 128 个软盘/软驱
DL = 80h第 1 个硬盘
DL = 81h第 2 个硬盘
DL = 82h第 3 个硬盘
. . .
DL = E0hCD/DVD 或 第 97 个硬盘
. . .
DL = FFh第 128 个硬盘

功能表

AH = 00h软盘/硬盘Reset Disk System
AH = 01h软盘/硬盘Get Status of Last Drive Operation
AH = 02h软盘/硬盘Read Sectors From Drive
AH = 03h软盘/硬盘Write Sectors To Drive
AH = 04h软盘/硬盘Verify Sectors
. . .
AH = 41hEXTTest Whether Extensions Are Available
AH = 42hEXTRead Sectors From Drive
AH = 43hEXTWrite Sectors To Drive
AH = 44hEXTVerify Sectors
. . .

EXTINT 13h 扩展功能,用于支持超过 8GB 的硬盘驱动器。

INT 13h AH=00h

磁盘系统复位

输入参数:

  • DL:指示驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • AH=00H

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码;

INT 13h AH=01h

获取最后一个驱动器操作的状态。

输入参数:

  • DL:指示驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • AH=01H

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码:
    • 00H:成功
    • 01H:非法命令
    • 02H:地址目标未发现
    • 03H:磁盘写保护(软盘)
    • 04H:扇区未发现
    • 05H:复位失败(硬盘)
    • 06H:软盘被取出(软盘)
    • 07H:错误的参数表(硬盘)
    • 08H:DMA 越界(软盘)
    • 09H:DMA 超过 64K 界限
    • 0AH:错误的扇区标志(硬盘)
    • 0BH:错误的磁道标志(硬盘)
    • 0CH:介质类型未发现(软盘)
    • 0DH: 格式化时非法扇区号(硬盘)
    • 0EH:控制数据地址目标被发现(硬盘)
    • 0FH:DMA 仲裁越界(硬盘)
    • 10H:不正确的 CRC 或 ECC 编码
    • 11H:ECC 校正数据错(硬盘)
    • 20H:控制器失败
    • 40H:查找失败
    • 80H:磁盘超时(未响应)
    • AAH:驱动器未准备好(硬盘)
    • BBH:未定义的错误(硬盘)
    • CCH:写错误(硬盘)
    • E0H:状态寄存器错(硬盘)
    • FFH:检测操作失败(硬盘)

INT 13h AH=02h

用于从软盘/硬盘中读取扇区。

输入参数:

  • DL:指示驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • AH = 02H:使用 02H 号功能。
  • AL:需要读取的扇区数。
  • CH:柱面号的低 8 位。
  • CL:低 6 位(位 0-5)是扇区号(1-63);高 2 位(位 6-7)代表柱面号的高 2 位(共 10 位柱面号)。
  • DH:磁头号
  • ES:BX:指示缓冲区的地址,存放从扇区读取的内容。

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码;
  • AL:实际读取的扇区数。

INT 13h AH=03h

写扇区。

输入参数:

  • DL:指示驱动器号,如 AH = 00h 表示使用第一个软盘。
  • AH = 03H03H 号功能。
  • AL:需要写入的扇区数。
  • CH:柱面号的低 8 位。
  • CL:低 6 位(位 0-5)是扇区号(1-63);高 2 位(位 6-7)代表柱面号的高 2 位(共 10 位柱面号)。
  • DH:磁头号
  • ES:BX:缓冲区的地址,存放写入扇区的内容。

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码;
  • AL:实际写入的扇区数。

INT 13h AH=04h

校验扇区。

输入参数:

  • DL:驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • AH = 04H04H 号功能。
  • AL:要验证的扇区数(1 到 127,具体取决于 BIOS 支持)
  • CH:柱面号的低 8 位。
  • CL:低 6 位(位 0-5)是扇区号(1-63);高 2 位(位 6-7)代表柱面号的高 2 位(共 10 位柱面号)。
  • DH:磁头号
  • ES:BX:缓冲区地址(此功能通常忽略该参数,但某些 BIOS 可能要求有效地址)。

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码;
  • AL:实际验证的扇区数。

INT 13h AH=08h

读取驱动器参数。用于获取磁盘的 CHS(柱面-磁头-扇区)逻辑参数,适用于软盘和硬盘。

输入参数:

  • AH=0x08:功能号。
  • DL 驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • ES:DI:建议设为 0000h:0000h 以避免某些 BIOS 错误。

返回结果:

  • CF:进位标志。清除(0)表示正确,设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码;
  • DL:系统中连接的硬盘数量(如 0x01=1 块硬盘);
  • DH:逻辑磁头数 - 1(磁头索引从 0 开始);
  • CX:柱面与扇区参数:
    • 高 10 位:柱面数 - 1(索引从 0 开始)。
    • 低 6 位:每磁道扇区数(索引从 1 开始)。
  • BL:驱动器类型(仅 AT/PS2 软盘有效);
  • ES:DI:软盘参数表地址(仅软盘有效,硬盘返回 0000h:0000h)。

功能号 08h 的逻辑值可能/应该不同于功能号 48h 的物理 CHS 值。
结果寄存器 CX 包含柱面和扇区/磁道值,见功能号 02h 注释。

INT 13h AH=41h

此 BIOS 中断用于检测磁盘驱动器(如硬盘或现代存储设备)是否支持扩展功能(如 LBA 模式、EDD 等)。

输入参数:

  • AH = 0x41:功能号,检查扩展功能是否支持;
  • DL:驱动器号。如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘;
  • BX = 0x55AA:魔数(固定值,用于验证)。

返回结果:

  • CF:进位标志。清除(0)表示支持扩展功能;设置(1)表示不支持;
  • AH:主版本号或错误码;
  • BX = AA55h:固定返回值,用于验证 BIOS 是否响应此功能;
  • CX:接口支持的位掩码:
    • 位 0:支持磁盘数据包结构(Disk Address Packet, DAP),即 LBA 模式访问;
    • 位 1:支持驱动器锁定和弹出(如可移动磁盘);
    • 位 2:支持增强型磁盘驱动器(Enhanced Disk Drive Support,EDD) 功能(如大容量磁盘访问)。支持的功能可能同时存在,例如 CX=0x0005 表示同时支持 DAP 和 EDD。

INT 13h AH=42h

从驱动器中扩展读扇区。

输入参数:

  • AH = 0x42:功能号,拓展读;
  • DL:驱动器号,如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘;
  • DS:SI段:偏移DAP 的地址。
    DAP(Disk Address Packet)是用于扩展磁盘访问(LBA 模式) 的数据结构,通过 BIOS 中断 INT 13h AH=42h 读取或写入磁盘。
    DAP 结构布局
    偏移量(字节)大小(字节)字段描述
    00h1DAP 大小(固定为 0x10,即 16 字节)。
    01h1保留字段,必须置零。
    02h-03h2要传输的扇区数(某些 BIOS 限制最大为 127)。
    04h-07h4内存缓冲区的 段:偏移 地址(小端序,偏移在前,段在后)。
    08h-0Fh8起始扇区的 64 位 LBA 地址(小端序,低 32 位在前,高 32 位在后)。

返回结果:

  • CF:进位标志。清除(0)表示正确;设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码。

如前面 int 13h AH=02h 所述,必须注意确保完整的缓冲区在给定的段内,即 (BX + size_of_buffer) <= 10000h

INT 13h AH=43h

向驱动器中扩展写扇区。

输入参数:

  • AH = 0x43:功能号,扩展写。
  • AL:位掩码控制:
    • 位 00 关闭写校验;1 开启写校验(写入后验证数据正确性)。
    • 位 1-7:保留位,必须设为 0。
  • DL:驱动器号。如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • DS:SI段:偏移DAP(Disk Address Packet)地址(与读操作相同)。

返回结果:

  • CF:进位标志。清除(0)表示正确;设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码。

INT 13h AH=48h

扩展读驱动器参数

输入参数:

  • AH = 0x48:功能号,扩展读驱动器参数。
  • DL:驱动器号。如 0x80 代表第 1 块硬盘,0x00 代表第 1 块软盘。
  • DS:SI段:偏移,RB(Result Buffer)地址。

Result Buffer 字段布局

偏移量(字节)大小(字节)字段名称描述
00h-01h2Result Buffer Size缓冲区大小(固定为 0x1E,即30字节)。
02h-03h2Information Flags信息标志位(表示支持的扩展功能)。
04h-07h4Physical Cylinders物理柱面数 = 最大柱面索引 + 1(索引从0开始)。
08h-0Bh4Physical Heads物理磁头数 = 最大磁头索引 + 1(索引从0开始)。
0Ch-0Fh4Sectors per Track每磁道扇区数 = 最大扇区索引(索引从1开始,因此无需加1)。
10h-17h8Total LBA Sectors磁盘的绝对扇区总数 = 最大LBA号 + 1(索引从0开始)。
18h-19h2Bytes per Sector每扇区字节数(通常为 512)。
1Ah-1Dh4EDD Configuration Pointer指向 EDD 配置参数表的指针(用于扩展功能调用,若无则为0)。

返回结果:

  • CF:进位标志。清除(0)表示正确;设置(1)表示错误(需检查 AH 中的错误码);
  • AH:返回码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值