第14章参考手册概述 本书余下的章节将向读者们介绍BIOS、DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的。在所介绍的参考手册中,每部手册都汇集了大 量的资源。所有的内容都力求给出准确的技术以及当前最新最流行的信息,如果读者发现 书中有不恰当之处,请向我们的Que公司的有关部门反映,对读者所提的每一个问题他 们都会很重视。 以下几章的主要内容是: · BIOS参考手册 · DOS参考手册 . 鼠标参考手册 · EMS参考手册 · XMS参考手册 · DPMI参考手册 ·任务切换参考手册 · DoubleSpace参考手册 14.1怎样介绍各个服务 每一部分参考手册都采用一种标准格式来展现中断或功能。书中按中断号和功能号 的次序由小到大将各个服务依次组织起来。例如: Int 21h 功能44h 子功能08h V3 块设备能否移动? 上例中的第一行代表中断号、功能号(如果有)、子功能号(如果有)以及可提供此服务 的版本号。第二行表明该功能的用途。其他的信息还包括简要描述、调用寄存器、返回寄 存器和注释。要仔细阅读这种格式中的每一元素。 14.1.1中断号 中断号用于请求服务。表14.1中介绍了大量的中断信息。 354页 表14.1“DOS程序员参考手册”中介绍的一断 中断号 用途 00h 被零除中断 01h 单步中断 02h 不可屏蔽中断 03h 断点中断 04h 运算溢出中断 05h 打印屏幕 06h 保留 07h 保留 08h 系统计时器 09h 键盘中断 0Ah 保留 0Bh 通信 0Ch 通信 0Dh 硬盘控制卡 0Eh 软盘管理 0Fh 打印机管理 10h 视频显示 11h 获取设备状态 12h 获取内存大小 13h 软盘 14h 异步通信 15h 系统服务 16h 键盘 17h 打印机 18h 执行ROMBASIC 19h 系统热引导 1Ah 系统计时器/实时时钟服务 1Bh Ctrl-Break地址 1Ch 计时器计数中断 1Dh 视频初始化参数表 1Eh 磁盘初始化参数表 1Fh 图形显示字符位图表 20h 程序终止 21h DOS功能调用程序 22h 终止地址 23h Ctrl-C中断向量 24h 关键出错中断向量 25h 绝对磁盘读 26h 绝对磁盘写 27h 终止并驻留 28h 键盘忙碌循环 29h 快速输出字符 2Ah 网络接口 2Eh 执行命令 2Fh 多路复用接口 31h DPMI接口 33h 鼠标接口 4Fh VESABIOS服务器 67h LIM-EMS接口 70h 实时时钟中断 14.1.2功能号 功能号是一种几乎全部都装载在AH寄存器中的标志符,中断处理程序用它来确定 期望获取哪一种服务。尽管功能号取决于被调用的中断,但它们都是必须的。例如,仅Int 21h就有超过150种可用的功能。若没有功能号,中断处理程序对使用者的要求就会显得 不知所措。 14.1.3子功能号 同功能号一样,子功能号也是一种可选的标志符,它更进一步定义了所期望的服务。 划分成子功能的功能不是很多。若所选择的DOS功能要求说明某个子功能,那么在调用 此功能之前,就应把该子功能号装入AL寄存器。若此功能不支持任何子功能,则定义AL 的用途,或用AL来把其它参数传送给所调用的服务。 355页 14.1.4版本的有效性 本书中所有的功能都不涉及版本的有效性。版本有效性只是作为一种软件版本号的 标志,用以衡量该服务是否可用。这种信息对开发程序至关重要,因为没有人想调用不为 程序运行于其上的系统所支持的服务。 14.1.5用途 接下来将介绍此服务的用途。这样做的目的是想让读者快速地从总体上了解服务所 能实现的功能。在绝大多数情况下,这些用途摘自于IBM、Microsoft或其他厂商的科技出 版物。但是,在极个别的情况下,某些厂商所公布的用途可能不清楚、用词含混或不精确、 遇到这些情况,应对该服务的用途进行语法上的修改,以使之更加清晰明了。 14.1.6描述 简略地用一两句话概括出该服务所能做到的事情。这一部分类似于“用途”部分,只不 过增加了对服务的使用范围所进行的简要说明。 14.1.7调用寄存器 这一部分介绍CPU寄存器的设置列表,所调用的服务必须用这些设置才能正确地行 使功能。通常情况下,这些设置就是指参数,尽管它们可以包含指向所要求的参数表的指 针。这种功能列表是服务所要求的寄存器设置的快速查阅列表。 14.1.8返回寄存器 同“调用寄存器”部分一样,“返回寄存器”也是一种快速的查阅列表,表中所列的是调 用的服务通过寄存器所返回的值。它完整地列出了特殊服务所提供的内容。 14.1.9注释 注释部分是每个服务列表的主体部分。它较准确地说明了对应的功能所做的事情、如 何使用该功能,该功能可能的用途以及所有要注意的地方。若某一功能要求说明参数表的 用途,则在注释部分进行说明或者提供帮助你确定参数表内容的信息。 14.2详细的功能总结 下面给出的是本书中所涉及的具体功能列表,可以以这份列表为参考指南来从总体 上了解某个具体服务的有关信息。 注意:列表中凡是未公开的功能都注明了星号标记(*)。 356页 中断号 功能 子功能 用 途 00 被零除中断 01 单步中断 02 不可屏蔽中断 03 断点中断 04 运算溢出中断 05 打印屏幕 06 保留 07 保留 08 系统计时器 09 键盘中断 0A 保留 0B 通信 0C 通信 0D 硬盘控制卡 0E 软盘管理 0F 打印机管理 10 视频 00 设置视频模式 01 设置光标类型 02 设置光标位置 03 读光标位置和配置 04 读光笔位置 05 选择活动显示页 06 上卷窗口 07 下卷窗口 08 读字符和属性 09 写字符和属性 0A 在光标处写字符 0B 设置彩色调色板 0C 写图形像素 0D 读图形像素 0E 用电传方式写文本 0F 获取当前显示模式 10 设置调色板寄存器 11 字符生成程序 12 选择可选字符集 13 写字符串 1A 读/写显示代码 1B 获取显示状态 1C 保存/恢复显示状态 4F VESA BIOS服务 00 返回Super VGA信息 357页 中断号 功能 子功能 用 途 01 返回Super VGA模式信息 02 设置Super VGA显示模式 03 返回Super VGA显示模式 04 保存/恢复superVGA视频状态 05 显示内存窗口控制 F0 读一个寄存器 F1 写一个寄存器 F2 读寄存器范围 F3 写寄存器范围 F4 读寄存器集 F5 写寄存器集 F6 恢复到默认寄存器 F7 定义默认寄存器表 FA 询问驱动程序 11 获取设备状态 12 获取内存大小 13 软盘 00 重置磁盘系统 01 获取磁盘系统状态 02 读磁盘扇区 03 写磁盘扇区 04 检验磁盘扇区 05 格式化磁盘磁道 06 格式化柱面并设置坏扇区标志 07 从指定柱面中格式化驱动器 08 返回磁盘驱动器参数 09 初始化硬盘表 0A 读长扇区 0B 写长扇区 0C 查找柱面 0D 磁盘重置 0E 读扇区缓冲 0F 写扇区缓冲 10 检验硬盘系统状态 11 重新校准硬盘驱动器 12 诊断控制卡RAM 13 诊断驱动器 14 诊断控制卡 15 返回DASD类型 16 读磁盘变换行状态 17 为磁盘格式化设置DASD类型 358页 中断号 功能 子功能 用 途 18 为格式化设置介质类型 19 停泊磁头 1A 格式化ESDI单元 14 异步通信 00 初始化通信端口 01 把字符写给通信端口 02 从通信端口中读字符 03 请求通信端口状态 04 扩展的初始化 05 扩展的通信端控制 15 系统服务 00 打开磁带电机 01 关闭磁带电机 02 从磁带驱动器中读取数据块 03 把数据块写给磁带驱动器 0F ESDI单元格式化周期性中断 21 开电自检出错记录 4F 键盘截获 80 设备打开 81 设备关闭 82 程序终止 83 事件等待 84 操纵杆支持 85 系统请求键已按下 86 延迟 87 移动块 88 扩充内存大小测定 89 把处理器切换到保护模式下 90 设备等待 C0 中断完成 C1 返回系统配置参数 C2 返回扩充的BIOS数据区段地址 C3 指向设备BIOS接口 C4 允许/禁止监视器超时 C5 可编程的选项选择 D8 00 读取EISA Slot信息 01 读取EISA功能信息 02 清除EISA CMOS 03 写入EISA COMS 16 键盘 00 读取键盘字符 359页 中断号 功能 子功能 用 途 01 读取键盘状态 02 返回键盘标志 03 调整键盘重复率 04 键击开/关 05 写入键盘缓冲区 10 获取击键 11 检查键盘 12 获取键盘状态标志 17 打印机 00 把字符写入打印机 01 初始化打印机端口 02 请求打印机端口状态 18 执行ROMBASIC 19 系统热引导 1A 系统计时器/实时时钟服务 00 获取时钟计数器 01 设置时钟计数器 02 读取实时时钟 03 设置实时时钟 04 从实时时钟内读取日期 05 设置实时时钟的日期 06 设置系统报答信号 07 禁止实时时钟报答 09 读取实时时钟报警 0A 获取日计数 0B 设置日计数 80 设置声源 1B Ctrl-Break地址 1C 时钟节拍中断 1D 视频初始化参数表 1E 磁盘初始化参数表 1F 图形显示字符位图表 20 终止程序 21 DOS功能调度程序 00 终止程序 01 带回显的键盘输入 02 显示输出 03 辅助输入 04 辅助输出 05 打印机输出 06 直接的控制台I/O 360页 中断号 功能 子功能 用 途 07 直接的STDIN输入 08 STDIN输入 09 显示串 0A 缓冲的STDIN输入 0B 检查STDIN状态 0C 清空缓冲区和输入内容 0D 重置磁盘 0E 选择磁盘 0F 打开文件(FCB) 10 关闭文件(FCB) 11 搜索第一项(FCB) 12 搜索第二项(FCB) 13 删除文件(FCB) 14 读顺序文件(FCB) 15 写顺序文件(FCB) 16 创建文件(FCB) 17 重命名文件(FCB) 18 保留 19 获取默认驱动器 1A 设置DTA地址 1B 获取分配表信息 1C 获取指定驱动器的分配表信息 1D 保留 1E 保留 1F 获取默认磁盘参数块 20 保留 21 随机文件读(FCB) 22 随机文件写(FCB) 23 获取文件大小(FCB) 24 设置随机记录字段(FCB) 25 设置中断向量 26 创建PSP 27 随机块读(FCB) 28 随机块写(FCB) 29 分析文件名 2A 获取系统日期 2B 设置系统日期 2C 获取系统时间 2D 设置系统时间 2E 设置检验标志 2F 获取DTA地址 361页 中断号 功能 子功能 用 途 30 获取DOS版本号 31 终止并驻留 32 获取驱动器参数块 33 00 获取Ctrl-Break标志 33 01 设置Ctrl-Break标志 33 05 获取引导驱动器代码 33 06 获取MS-DOS版本 34 返回InDOS标志的地址 35 获取中断向量 36 获取自由磁盘空间 37 00* 获取开关字符 01* 设置开关字符 02* 读取设备有效性 03* 设置设备有效性 38 获取/设置国家信息 39 创建子目录 3A 移动子目录 3B 设置目录 3C 创建/截断文件(句柄) 3D 打开文件(句柄) 3E 关闭文件(句柄) 3F 读文件或设备(句柄) 40 写文件或设备(句柄) 41 删除文件 42 移动文件指针 43 00 获取文件属性 43 01 设置文件属性 44 设备驱动程序控制(IOCTL) 44 00 获取设备信息 01 设置设备信息 02 设备IOCTL读 03 设备IOCTL写 04 块驱动程序IOCTL读 05 块驱动程序IOCTL写 06 获取输入状态 07 获取输出状态 08 块设备可移动与否? 09 块设备是本地的还是远程的? 0A 句柄是是本地的还是远程的? 0B 设置共享重试计数 0C 用于句柄的通用I/O控制 362页 中断号 功能 子功能 用 途 0D 用于块设备的通用I/O控制 0E 获取逻辑驱动器映象 0F 设置逻辑驱动器映象 10 询问IOCTL句柄 11 询问IOCTL设备 45 复制句柄 46 强制复制句柄 47 获取当前目录 48 分配内存 49 释放内存 4A 修改内存分配 4B 执行程序(EXEC) 4C 带返回代码的终止 4D 获取返回代码 4E 搜索最先匹配 4F 搜索第二匹配 50 设置PSP段 51 获取PSP段 52* 获取磁盘列表 53* 把BPB转换成DPB 54* 获取检验标志 55* 创建PSP 56 重命名文件 57 00 获取文件日期和时间 01 设置文件日期和时间 58 00 获取分配策略 01 设置分配策略 02 获取UMB连接状态 03 设置UMB连接状态 59 获取扩展的出错信息 5A 创建唯一命名的文件 5B 创建新文件 5C 00 设置文件访问锁定 5C 01 清除文件访问锁定 5D 00* 把数据复制给DOS保存区 06* 获取关键出错标志地址 0A 设置出错数据值 5E 00 获取机器名 01* 设置机器名 02 设置网络打印机装置 363页 中断号 功能 子功能 用 途 03 获取网络打印机装置 5F 02 获取重定向列表项 03 设置重定向列表项 04 取消重定向列表项 60* 扩展路径名串 61 保留 62 获取PSP地址 63 00 获取系统前导字节表 01 设置/清除临时控制台标志 02 获取临时控制台标志 64* 设置当前国家字节 65 获取扩展的国家信息 20 转换字符 21 转换串 22 转换ASCIIZ串 66 01 获取全局代码页 02 设置全局代码页 67 设置句柄计数 68 清空缓冲区 69 保留 6A* 分配内存 6B 保留 6C 扩充的打开/创建 22 终止地址 23 Ctrl-C中断处理程序 24 关键出错处理程序 25 绝对磁盘读 26 绝对磁盘写 27 终止并驻留 28* DOS可安全使用 29* 快速放置字符 2A* Microsoft网络接口 2B 保留 2C 保留 2D 保留 2E* 主外围程序加载器 2F 多种复用服务中断 01 00 打印安装检查 01 把文件保存到打印假脱机程序中 02 从打印队列中移走文件 03 取消打印队列中的全部文件 364页 中断号 功能 子功能 用 途 04 保持打印作业 05 结束打印保持 06 获取打印机设备 05* 获取外围关键出错处理程序安装状态 06 获取ASSIGN.COM/ASSIGN.EXE安装状态 08* 获取DRIVER.SYS安装状态 10 获取SHARE.EXE安装状态 11 获取网络重定向程序安装状态 12 00* 获取DOS安装状态 01* 清空文件 02* 获取中断向量地址 03* 获取DOS日期段 04* 正规化路径分隔符 05* 输出一个字符 06* 请求关键出错 07* 移动磁盘缓冲区 08* 减少用户计数 0C* 供DOS使用的IOCTL打开 0D* 获取文件关闭的日期和时间 0E* 搜索缓冲区链 10* 找出已修改的缓冲区,时间延迟 11* 正规化ASCIIZ文件名 12* 找到ASCIIZ串长度 13* 大小写和国家约定 14* 比较32位的数字 16* 获取DCB地址 17* 获取LDT地址 18* 获取用户堆栈地址 19* 设置LDT指针 1A* 从路径名中获取驱动器代码 1B* 较正闰年 1C* 计算从月头起的天数 1D* 计算日期 1E* 比较串 1F* 初始化LDT 20* 获取DCB数值 21* 扩展ASCIIZ路径名 22* 翻译扩充的出错代码 24* 执行延迟 25* 获取ASCIIZ串长度 26* 打开文件 365页 中断号 功能 子功能 用 途 27* 关闭文件 28* 定位文件指针 29* 读取文件 2B * IOCTL接口 2D* 获取扩充的出错代码 2F* 保存Dx 14 00 获取NLAFUNC安装状态 15* CDROM接口 16 80 MS-DOS空闲调用 释放当前虚拟机器的时间片(DPMI) 86 获取CPU模式(DPMI) 87 保存由实模式至保护模式的切换入口点(DPMI) 8A 获取厂商指定的入口点(DPMI) 1A 00 获取已安装的ANSI.SYS状态 43 00 获取已安装的XMS驱动程序状态 01 获取XMS驱动程序入口点地址 48 00 获取DOSKEY.COM的安装状态 10 读命令行 4B 01 建立通报链 02 检测切换程序 03 分配切换程序ID号 04 自由切换程序ID 05 标识实例数据 AD 80 获取KEYB.COM版本号 81 获取KEYB.COM活动代码页 82 设置KEYB.COM国家标志 83 获取KEYB.COM国家标志 B0 00 获取已安装的GRAFTABL.COM状态 87 00 检查APPEND安装 02 获取APPEND版本 04 获取APPEND路径指针 06 获取APPEND功能状态 07 设置APPEND功能状态 11 设置返回找到的名称状态 31 DPMI中断 00 00 分配LDT描述符 00 01 释放LDT描述符 00 02 分段描述符 00 03 获取选择子增加值 00 06 获取段基地址 00 07 设置段基地址 366页 续 中断号 功能 子功能 用 途 00 08 设置段界限 00 09 设置描述符访问权限 00 0A 创建别名描述符 00 08 获取描述符 00 0C 设置描述符 00 0D 分配指定的LDT描述符 00 0E 获取多个描述符 00 0F 设置多个描述符 01 00 分配DOS内存块 01 01 释放DOS内存块 01 02 重新规定DOS内存块的大小 02 00 获取实模式中断向量 02 01 设置实模式中断向量 02 02 获取处理器异常处理程序向量 02 03 设置处理器异常处理程序向量 02 04 获取保护模式中断向量 02 05 设置保护模式中断向量 02 10 获取扩充的处理器异常程序向量(保护模式) 02 11 获取扩充的处理器异常程序向量(实模式) 02 12 设置扩充的处理器异常程序向量(保护模式) 02 13 设置扩充的处理器异常程序向量(实模式) 03 00 模拟实模式中断 03 01 用远返回调用实模式过程 03 02 用IRET调用实模式过程 03 03 分配实模式回调程序地址 03 04 释放实模式回调程序地址 03 05 获取状态保存/恢复地址 03 06 获取原始模式切换地址 04 00 获取版本 04 01 获取DPMI功能 05 00 获取自由内存信息 05 01 分配内存块 05 02 释放内存块 05 03 重新规定内存的大小 05 04 分配线性内存块 05 05 重新规定线性内存块的大小 05 06 获取页属性 05 07 设置页属性 05 08 在内存块中映射设备 05 09 在内存块中映射常规内存 05 0A 获取内存块大小和基地址 367页 (续) 中断号 功能 子功能 用 途 05 03 获取内存信息 06 00 锁定线性区域 06 01 解锁线性区域 06 02 把实模式区域标记为可分页的区域 06 03 重新锁定实模式区域 06 04 获取页面大小 07 02 将页面标记为要求分页的对象 07 03 删除页面内容 08 00 物理地址映象 08 01 释放物理地址映象 09 00 获取并禁止虚拟中断状态 09 01 获取并允许虚拟中断状态 09 02 获取虚拟中断状态 0A 00 获取厂商指定的API入口点 0B 00 设置调试监视点 0B 01 清除调试监视点 0B 02 获取调试监视点的状态 0B 03 重置调试监视点 0C 00 安装常驻服务供应者回调程序 0C 01 终止并驻留 0D 00 分配共享内存 0D 01 释放共享内存 0D 02 在共享内存上进行串行化 0D 03 释放共享内存上的串行化处理 0E 00 获取协处理器状态 0E 01 设置处理器仿真 33 鼠标中断 00 初始化鼠标 01 显示鼠标光标 02 隐藏鼠标光标 03 获取鼠标位置 04 设置鼠标位置 05 获取按钮压下信息 06 获取按钮释放信息 07 设置鼠标x限 08 设置鼠标Y限 09 设置图形光标形状 0A 设置文本光标类型 0B 读取运行计数器 0C 设置用户定义的事件处理程序 0D 启动光笔仿真 368页 中断号 功能 子功能 用 途 0E 停止光笔仿真 0F 设置设备与象素的比例 10 有条件的鼠标关闭 13 设置双速阈值 14 交换用户事件处理程序 15 获取保存状态的存储容量 16 保存鼠标驱动程序状态 17 恢复鼠标驱动程序状态 18 设置备用的鼠标用户处理程序 19 获取用户备用的中断向量 1A 设置鼠标灵敏度 1B 获取鼠标灵敏度 1C 设置中断速率 1D 设置CRT页号 1E 获取CRT页号 1F 禁止鼠标驱动程序 20 允许鼠标驱动程序 21 软件重置 22 设置消息语言 23 获取消息语言 24 获取鼠标信息 25 获取通用的驱动程序信息 26 获取最大的虚拟坐标系 27 获取光标屏蔽和素基计数 28 设置视频模式 29 获取受支持的视频模式 2A 获取光标热点 2B 设置加速曲线 2C 获取加速曲线 2D 设置或获取活动的加速曲线 2F 鼠标硬件重置 30 设置或获取球点信息 31 获取虚拟坐标 32 获取现有的高级功能 33 获取切换设置 34 获取MOUSE.INI路径 4A 实时时钟警告中断 67 LIM-EMS接口 40 获取管理器状态 41 获取页框段 42 获取页面计数 369页 (续) 中断号 功能 子功能 用 途 43 获取句柄并分配内存 44 映射/不映射内存 45 解除对句柄和内存的分配 46 获取EMM版本 47 保存页面映象 48 恢复页面映象 49 保留 4A 保留 4B 获取句柄计数 4C 获取句柄拥有的页 4D 获取所有句柄的页 4E 00 获取页映象寄存器 01 设置页映象寄存器 02 获取并设置页映象寄存器 03 获取页映象数组的大小 4F 00 获取部分页映象 01 设置部分页映象 02 获取部分页映象的大小 50 00 映射/不映射多重句柄页(物理页号模式) 01 映射/不映射多重句柄页(段地址模式) 51 重分配页面 52 00 获取句柄属性 01 设置句柄属性 02 获取属性功能 53 00 获取句柄名 01 设置句柄名 54 00 获取句柄目录 01 查找命名句柄 02 获取句柄名计数 55 修改页映象并跳转 56 修改页面映象并调用 02 获取堆栈空间大小 57 00 移动内存区域 01 交换内存区域 58 00 获取可映射的物理地址数组 01 获取可映射的物理地址数组大小 59 00 获取扩展内存硬件信息 01 获取未分配的原始页计数 5A 00 分配标准页 01 分配原始页 5B 00 获取备用映象寄存器 370页 续 中断号 功能 子功能 用 途 01 设置备用映象寄存器 02 获取备用映象寄存器集大小 03 分配备用映象寄存器集 04 解除对备用映象寄存器集的分配 05 分配DMA寄存器集 06 允许DMA寄存器集 07 禁止DMA寄存器集 08 解除对DMA寄存器集的分配 5C 准备用于热引导的硬件 5D 00 允许OS/E功能 01 禁止OS/E功能 02 OS/E存取键代码到EMS上 70 实时时钟中断