中断INT13功能及用法分析
INT 13H,AH=00H 软、硬盘控制器复位
说明: 此功能复位磁盘(软盘和硬盘)控制器板和磁盘驱动器,它在磁盘控制器 芯片上完成复位操场作并在磁盘进行所需之操作之前做一系列用于磁盘校准之 磁盘操作。 当磁盘I/O功能调用出现错误时,需要调用此功能,此刻复位功能将使BIOS 象该磁盘重新插入一样检查驱动器中磁盘状态,并将磁头校准使之在应该在之 位置上。 此功能调用不影响软盘或硬盘上之数据。 入口参数: AH=00H 指明调用复位磁盘功能。 DL 需要复位之驱动器号。 返回参数: 若产生错误,进位标志CF=1,错误码在AH寄存器。 详情请见磁盘错误状态返回码一文。 示例: C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG,DS:C_SEG ORG 100H START: MOV AH, 00H MOV DL, 80H INT 13H ;复位硬盘 C JC ERROR …… ERROR: …… C_SEG ENDS END START
INT 13H,AH=02H 读扇区说明: 调用此功能将从磁盘上把一个或更多之扇区内容读进存贮器。因为这是一个 低级功能,在一个操作中读取之全部扇区必须在同一条磁道上(磁头号和磁道号 相同)。BIOS不能自动地从一条磁道末尾切换到另一条磁道开始,因此用户必须 把跨多条磁道之读操作分为若干条单磁道读操作。 入口参数: AH=02H 指明调用读扇区功能。 AL 置要读之扇区数目,不允许使用读磁道末端以外之数值,也不允许 使该寄存器为0。 DL 需要进行读操作之驱动器号。 DH 所读磁盘之磁头号。 CH 磁道号之低8位数。 CL 低5位放入所读起始扇区号,位7-6表示磁道号之高2位。 ES:BX 读出数据之缓冲区地址。 返回参数: 如果CF=1,AX中存放出错状态。读出后之数据在ES:BX区域依次排列。 详情请参见磁盘错误状态返回码一文。 示例: C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG,DS:C_SEG ORG 100H START: JMP READ BUFFER DB 512 DUP(0) READ: PUSH CS POP ES MOV BX, OFFSET BUFFER MOV AX, 0201H MOV CX, 0001H MOV DX, 0000H INT 13H ;读软盘A, 0面0道1扇区 ;读出后数据在BUFFER中 JC ERROR …… ERROR: …… C_SEG ENDS END START
INT 13H,AH=03H 写扇区
说明: 调用此功能将从磁盘上把一个或更多之扇区内容写入驱动器。因为这 是一个低级功能,在一个写入操作中之全部扇区必须在同一条磁道上(磁 头号和磁道号相同)。BIOS不能自动地从一条磁道末尾切换到另一条磁道 开始,因此用户必须把跨多条磁道之写操作分为若干条单磁道写操作。 入口参数: AH=03H 指明调用写扇区功能。 AL 置要写之扇区数目,不允许使用超出磁道末端以外之数值, 也不允许使该寄存器为0。 DL 需要进行写操作之驱动器号。 DH 所写磁盘之磁头号。 CH 磁道号之低8位数。 CL 低5位放入所读起始扇区号,位7-6表示磁道号之高2位。 ES:BX 放置写入数据之存贮区地址。 返回参数: 如果CF=1,AX中存放出错状态。 详情请参见磁盘错误状态返回码一文。 示例: C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG,DS:C_SEG ORG 100H START: JMP WRITE BUFFER DB 512 DUP(0FFH) WRITE: PUSH CS POP ES MOV BX, OFFSET BUFFER MOV AX, 0301H MOV CX, 0001H MOV DX, 0000H INT 13H ;写入软盘A, 0面0道1扇区 ;把此扇区数据全部置为0FFH JC ERROR …… ERROR: …… C_SEG ENDS END START INT 13H,AH=04H 检测扇区
说明: 这个功能检测磁盘上1个或更多之扇区。这个验证测试不是把磁盘上之 数据和内存中之数据进行比较,而只是简单地确定读出之数据有没有CRC错误。 这个功能可用来验证驱动器中之软盘版。如果盘片之格式正确,CF=0。 入口参数: AH=03H 指明调用检测扇区功能。 AL 置要检测之连续扇区数目,不允许使用超出磁道末端以外之 数值,也不允许使该寄存器为0。 DL 需要进行检测之驱动器号。 DH 磁盘之磁头号。 CH 磁道号之低8位数。 CL 低5位放入起始扇区号,位7-6表示磁道号之高2位。 返回参数: 如果CF=1,AX中存放出错状态。CF=0,检测正确。 详情请参见磁盘错误状态返回码一文。 示例: C_SEG SEGMENT PUBLIC ASSUME CS:C_SEG,DS:C_SEG ORG 100H START: MOV AX, 0401H MOV CX, 0001H MOV DX, 0000H INT 13H ;检测软盘A, 0面0道1扇区 JC ERROR …… ERROR: …… C_SEG ENDS END START
磁盘错误状态返回码:
磁盘错误状态
AH= 00H 未出错 01H 非法功能调用命令区。 02H 地址标记损坏,扇区标识(ID)没有效或未找到。 03H 企图对有写保护之软盘执行写操作。 04H 所寻找之扇区没找到。 05H 复位操作失败。 06H 没有介质。 07H 初始化错误,数据未存在DMA之64K缓冲区内。 08H DMA故障 09H DMA边界错误,数据未存在DMA之64K缓冲区内。 0AH 检测出错误码率之扇区标志。 0BH 所寻找之磁道没找到。 0CH 介质类型没发现。 0DH 扇区号有问题。 0EH 发现控制数据地址标记。 0FH 超出DMA边界 10H 读磁盘时奇偶校验错,且纠错码(EDC)不能纠正。 11H 读磁盘时奇偶校验错,但纠错码(EDC)已纠正错误。 20H 控制器错。 40H 查找操作没有效。 80H 超时错误,驱动器不响应。 AAH 驱动器未准备好。 BBH 不明错误。 CCH 被选驱动器出现写故障。 E0H 错误寄存器是零 FFH 非法操作。
备注: 控制器之 后状态将会在磁盘操作完成后写入相应之BIOS数据区
|