📄 00000006.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: suzhe (I Love Linux), 信区: Linux <BR>标 题: HardDisk,Partition,Boot,OSLoader专题(4) <BR>发信站: BBS 水木清华站 (Tue Nov 23 17:35:15 1999) <BR> <BR>三. 接口规范 <BR> <BR>1. 寄存器约定 <BR> 在扩展 Int13H 调用中一般使用如下寄存器约定: <BR> <BR> ds:di ==> 磁盘地址数据包( disk address packet ) <BR> dl ==> 驱动器号 <BR> ah ==> 功能代码 / 返回码 <BR> <BR> 在基本 Int13H 调用中, 0 - 0x7F 之间的驱动器号代表可移动驱动器 <BR>0x80 - 0xFF 之间的驱动器号代表固定驱动器. 但在扩展 Int13H 调用中 <BR>0x80 - 0xFF 之间还包括一些新出现的可移动驱动器, 比如活动硬盘等. <BR>这些驱动器支持先进的锁定,解锁等功能. <BR> ah 返回的错误码除了标准 Int13H 调用规定的基本错误码以外,又增加 <BR>了以下错误码: <BR> <BR> B0h 驱动器中的介质未被锁定 <BR> <BR> B1h 驱动器中的介质已经锁定 <BR> <BR> B2h 介质是可移动的 <BR> <BR> B3h 介质正在被使用 <BR> <BR> B4h 锁定记数溢出 <BR> <BR> B5h 合法的弹出请求失败 <BR> <BR>2. API 子集介绍 <BR> 1.x 版的扩展 Int13H 调用中规定了两个主要的 API 子集. <BR> <BR> 第一个子集提供了访问大硬盘所必须的功能, 包括 检查扩展 In13H <BR>是否存在( 41h ), 扩展读( 42h ), 扩展写( 43h ), 校验扇区( 44h ), <BR>扩展定位( 47h ) 和 取得驱动器参数( 48h ). <BR> 第二个子集提供了对软件控制驱动器锁定和弹出的支持, 包括 检查扩展 <BR>Int13H 是否存在( 41h ), 锁定/解锁驱动器( 45h ), 弹出驱动器( 46h ), <BR>取得驱动器参数( 48h ), 取得扩展驱动器改变状态( 49h ), int 15h. <BR> 如果使用了调用规范中不支持的功能, BIOS 将返回错误码 ah = 01h, <BR>CF = 1. <BR> <BR>3. API 详解 <BR> <BR>1) 检验扩展功能是否存在 <BR>入口: <BR> AH = 41h <BR> BX = 55AAh <BR> DL = 驱动器号 <BR> <BR>返回: <BR> CF = 0 <BR> AH = 扩展功能的主版本号 <BR> AL = 内部使用 <BR> BX = AA55h <BR> CX = API 子集支持位图 <BR> CF = 1 <BR> AH = 错误码 01h, 无效命令 <BR> <BR> 这个调用检验对特定的驱动器是否存在扩展功能. 如果进位标志置 1 <BR>则此驱动器不支持扩展功能. 如果进位标志为 0, 同时 BX = AA55h, 则 <BR>存在扩展功能. 此时 CX 的 0 位表示是否支持第一个子集, 1位表示是否 <BR>支持第二个子集. <BR> 对于 1.x 版的扩展 Int13H 来说, 主版本号 AH = 1. AL 是副版本号, <BR>但这仅限于 BIOS 内部使用, 任何软件不得检查 AL 的值. <BR> <BR>2) 扩展读 <BR>入口: <BR> AH = 42h <BR> DL = 驱动器号 <BR> DS:DI = 磁盘地址数据包(Disk Address Packet) <BR> <BR>返回: <BR> CF = 0, AH = 0 成功 <BR> CF = 1, AH = 错误码 <BR> <BR> 这个调用将磁盘上的数据读入内存. 如果出现错误, DAP 的 BlockCount <BR>项中则记录了出错前实际读取的数据块个数. <BR> <BR>3) 扩展写 <BR>入口: <BR> AH = 43h <BR> AL <BR> 0 位 = 0 关闭写校验 <BR> 1 打开写校验 <BR> 1 - 7 位保留, 置 0 <BR> DL = 驱动器号 <BR> DS:DI = 磁盘地址数据包(DAP) <BR>返回: <BR> CF = 0, AH = 0 成功 <BR> CF = 1, AH = 错误码 <BR> <BR> 这个调用将内存中的数据写入磁盘. 如果打开了写校验选项, 但 BIOS <BR>不支持, 则会返回错误码 AH = 01h, CF = 1. 功能 48h 可以检测BIOS是否 <BR>支持写校验. <BR> 如果出现错误, DAP 的 BlockCount 项中则记录了出错前实际写入的数 <BR>据块个数. <BR> <BR>4) 校验扇区 <BR>入口: <BR> AH = 44h <BR> DL = 驱动器号 <BR> DS:DI = 磁盘地址数据包(Disk Address Packet) <BR> <BR>返回: <BR> CF = 0, AH = 0 成功 <BR> CF = 1, AH = 错误码 <BR> <BR> 这个调用校验磁盘数据, 但并不将数据读入内存.如果出现错误, DAP 的 <BR>BlockCount 项中则记录了出错前实际校验的数据块个数. <BR> <BR>(未完 待续) <BR> <BR>抱歉, 没时间了, 下回再写吧. <BR> <BR>-- <BR>※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.26.196] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -