这个电子书只是很简单地把txt做成了chm,文本格式方面可能会让人看得有点恼火,呵,不好意思了,将就一下,因为我本身写网页是手工的,如果全部进行整理会花上几天时间。希望您看的时候不会边看边骂 (京)新登字158号 DOS Programmer's Reference,4th Edition Terrv Dettmann Authorized translation from the English language edition published by Que Corporation. Copyright 1993 by Que Corporation All rights reserved. No part of this book maybe reproduced or transmitted in any form or by any means,electronic or mechanical, including photocopying,recording or by any information storage retrieval system,without permis- sion in writing from the Publisher. Chinese language edition published by Tsinghua University Press. 本书英文版Que Corporation于1993年出版,版权为Que所有。本书中文版由Que Corporation授予清华大学出 版社出版。未经出版科书面允许,不得以任何方式复制或抄袭本书内容。 中华人民共和国国家版权局著作权合同登记章图字:01-95-330。 版权所有,翻印必究。 本书封面贴有清华大学出版社激光防伪标签,无标签者不得销售。 图书在版编目(CIP)数据 DOS程序员参考手册/(美)Detmann著;熊桂喜等译.-北京:清华大学出版社,1995 ISBN 7-302-001984-3 微型计算机磁盘操作系统手册IV. TP316- 62 中国版本图书馆CIP数据核字(95)第17042号 出版者:清华大学出版社(北京清华大学校内,邮编100084) 印刷者:北京人民文学印刷厂 发行者:新华书店总店北京科技发行所 开本: 787*1092 1/16 印张: 54.75 字数: 1299千字 版次: 1996年1月第1版1996年1月第1次印刷 书号: ISBN 7-302-01984-3/TP·915 印数: 0001-5000 定价: 89.00元 a3页 内容简介 本书是介绍MS-DOS编程的技术书籍,是一本多年来的权威性畅销著作。内容非常 全面,覆盖了DOS的各个方面。 ·包括了MS-DOS 6.xx的全部内容,并覆盖了DOS的各个版本(1.0-6.22)。书中 包括全部的DOS功能调用及数据结构,包括一些未公开的功能和保留的功能。 ·介绍了PC编程时所需的BIOS、鼠标、EMS、XMS、DPMI、任务切换等的功能调 用。 .分专题介绍了DOS编程的各个方面:输入/输出设备;内存、文件、目录、设备管 理;TSR及设备驱动程序;DOS出错处理等等。 ·介绍了如何在汇编语言、BASIC C/C++及Pascal中使用DOS及BIOS的技术。 ·丰富而实用的大量实例源代码。 本书的读者对象为对PC编程有兴趣的专业技术人员、大专院校学生及计算机爱好 者。 a4页 目 录 译者序……………………………………………………………………………………………………… 1 引言………………………………………………………………………………………………… 2 第一部分DOS概述 第1章DOS简介………………………………………………………………………………………3 1.1什么是DOS………………………………………………………………………………………3 1.2DOS的历史………………………………………………………………………………………4 1.2.1 1.0版…………………………………………………·………………………………6 1.2.2 1.1版……………………………………………………………………………………6 1.2.3 1.25版…………………………………………………………………………………6 1.2.4 2.0版……………………………………………………………………………………6 1.2.5 2.1版…………………………………………………………………………………7 1.2.6 3.0版……………………………………………………………………………………7 1.2.7 3.1版……………………………………………………………………………………7 1.2.8 3.2版……………………………………………………………………………………7 1.2.9 3.3版……………………………………………………………………………………8 1.2.10 4.0版…………………………………………………………………………………8 1.2.11 5.0版…………………………………………………………………………………8 1.2.12 6.0版…………………………………………………………………………………8 1.2.13未来展望……………………………………………………………………………9 1.3DOS的结构……………………………………………………………………………………9 1.4 DOS的程序员接口……………………………………………………………………………10 1.5小结………………………………………………………………………………………………11 第2章 DOS系统结构………………………………………………………………………………12 2.1“虚机”概念………………………………………………………………………………………12 2.2物理机器…………………………………………………………………………………………13 2.3处理器……………………………………………………………………………………………13 2.3.1 8086内存寻址…………………………………………………………………………14 2.3.2 8086寄存器集…………………………………………………………………………16 2.3.3 80286及其更高档的处理器…………………………………………………………19 a5页 2.3.4CPU芯片的识别…………………………………………………………………… 20 2.3.5数学协处理器…………………………………………………………………………22 2.3.6数学协处理器的识别…………………………………………………………………22 2.4内存………………………………………………………………………………………………24 2.5 I/O通道……………………………………………………………………………………… 25 2.5.1键盘……………………………………………………………………………………25 2.5.2显示器屏幕……………………………………………………………………………26 2.5.3打印机…………………………………………………………………………………28 2.5.4串行口…………………………………………………………………………………28 2.5.5鼠标………………………………-……………………………………………… 29 2.6存储设备…………………………………………………………………………………………29 2.6.1物理磁盘结构…………………………………………………………………………29 2.6.2逻辑磁盘结构…………………………………………………………………………30 2.7软件………………………………………………………………………………………………31 2.7.1 BIOS……………………………………………………………………………………31 2.7.2 DOS核心………………………………………………………………………………32 2.7.3命令处理器………………………………………………………………………… 32 2.7.4设备驱动程序…………………………………………………………………………33 2.8小 结………………………………………………………………………………………………34 第3章动态的DOS…………………………………………………………………………………35 3.1 DOS启动顺序…………………………………………………………………………………35 3.2命令处理…………………………………………………………………………………………38 3.3 DOS下的程序…………………………………………………………………………………39 3.3.1 CoM程序………………………………………………………………………………39 3.3.2 EXE程序………………………………………………………………………………41 3.4一些高级语言的例子……………………………………………………………………………45 3.4.1一个Turbo Pascal程序………………………………………………………………45 3.4.2一个编译的C程序…………………………………………………………………46 3.4.3比较不同版本的程序…………………………………………………………………46 3.5中断………………………………………………………………………………………………48 3.5.1内部中断………………………………………………………………………………49 3.5.24非屏蔽中断……………………………………………………………………………49 3.5.3硬件(可屏蔽)中断……………………………………………………………………50 3.5.4软件中断………………………………………………………………………………50 3.6内存分配与管理…………………………………………………………………………………52 3.7小结………………………………………………………………………………………………55 第4章DOS和BIOS接口 ………………………………………………………………………56 4.1从程序中访问DOS和BIOS…………………………………………………………………56 4.1.1一个对Dos的简单调用………………………………………………………………57 a6页 4.1.2传递字符串地址给DOS………………………………………………………………58 4.2高级语言资源……………………………………………………………………………………59 4.2.1C语言………………………………………………………………………………60 4.2. 2 Turbo Pascal…………………………………………………………………………68 4.2.3 Quick BASIC…………………………………………………………………………72 4.3小结………………………………………………………………………………………………76 第二部分 输入输出设备 第5章输出设备………………………………………………………………………………………79 5.1基本的字符设备…………………………………………………………………………………79 5.2看看显示系统的工作方式…………………………………………………………………… 80 5.2.1存储和显示视频数据…………………………………………………………………81 5.2.2视频显示格式…………………………………………………………………………83 5.2.3识别视频显示适配卡…………………………………………………………………87 5.3视频功能…………………………………………………………………………………………99 5.3.1利用DOS和BIOS视频功能编程……………………………………………………99 5.3.2使用多个显示页………………………………………………………………………104 5.4打印机功能……………………………………………………………………………………106 5.5小结……………………………………………………………………………………………108 第6章输入设备……………………………………………………………………………………109 6.1键盘……………………………………………………………………………………………109 6.1.1了解键盘的工作方式…………………………………………………………………109 6.1.2用BASIC读键盘……………………………………………………………………113 6.1.3使用Int 16h来访问键盘……………………………………………………………114 6.1.4使用Int 21h来访问键盘……………………………………………………………118 6.1.5识别键盘支持的水平…………………………………………………………………124 6.2鼠标……………………………………………………………………………………………125 6.2.1了解鼠标的工作方式…………………………………………………………………125 6.2.2初始化鼠标驱动程序…………………………………………………………………125 6.2.3鼠标位于何处…………………………………………………………………………126 6.3小 结……………………………………………………………………………………………130 第7章串行设备……………………………………………………………………………………131 7.1串行接口………………………………………………………………………………………132 7.2 串行转换:UART……………………-…………………………………………………… 134 7.2.1发送保持寄存器(THR)………………………………………………………………135 7.2.2接收数据寄存器(RDR)………………………………………………………………135 7.2. 3波特率除数(BRD)……………………………………………………………………135 7.2.4中断允许寄存器(IER)………………………………………………………………136 a7页 7.2.5中断识别寄存器(IIR)………………………………………………………………136 7.2.6FIFO控制寄存器(FCR)……………………………………………………………137 7.2.7线控制寄存器(LCR)…………………………………………………………………137 7.2.8调制解调器控制寄存器(MCR)……………………………………………………138 7.2.9线状态寄存器(LSR)…………………………………………………………………138 7.2.10调制解调器状态寄存器(MSR)…………………………………………………139 7.3将通信端口初始化……………………………………………………………………………140 7.4调制解调器……………………………………………………………………………………142 7.5编写一个终端程序……………………………………………………………………………143 7.5.1双工考虑………………………………………………………………………………143 7.5.2控制程序Term.c……………………………………………………………………144 7.5.3支持函数………………………………………………………………………………144 7.6使用term.c……………………………………………………………………………………151 7.7直接访问UART………………………………………………………………………………151 7.7.1汇编语言………………………………………………………………………………152 7.7.2C语言…………………………………………………………………………………152 7.7.3BASIC语言……………………………………………………………………………152 7.7.4Pascal语言……………………………………………………………………………152 7.8修改Term.c…………………………………………………………………………………152 7.9回送检测…………………………………………………………………………………… 154 7.10评价串行I/O设备……………………………………………………………………………155 7.11小结……………………………………………………………………………………………155 第三部分 磁盘、目录和文件 第8章磁盘…………………………………………………………………………………………159 8.1磁盘的内部结构…………………………………………………………………………… 159 8.1.1分区表………………………………………………………………………………160 8.1.2引导记录………………………………………………………………………………163 8.1.3文件分配表(FAT)……………………………………………………………………166 8.2利用磁盘功能…………………………………………………………………………………172 8.2.1驱动器信息……………………………………………………………………………172 8.2.2格式化磁盘……………………………………………………………………………177 8.3小结……………………………………………………………………………………………183 第9章目录和文件…………………………………………………………………………………184 9.1磁盘目录……………………………………………………………………………………184 9.1.1根目录……………………………………………………………………………… 185 9.1.2目录项…………………………………………………………………………………186 9.1.3子目录…………………………………………………………………………………190 9.1.4卷标………………………………………………………………………………… 190 a8页 9.2什么是文件……………………………………………………………………………………191 9.3 DOS处理文件的方式…………………………………………………………………………191 9.3.1标准文件控制块………………………………………………………………………192 9.3.2扩展的文件控制………………………………………………………………………192 9.3.3基本的FCB文件处理……………………………………………………………193 9.3.4什么时候使用FCB功能…………………………-………………………………193 9.3.5句柄功能………………………………………………………………………………194 9.3.6基本的句柄文件处理技术……………………………………………………………194 9.3.7何时使用句柄功能……………………………………………………………………195 9.3.8练习:目录搜索………………………………………………………………………195 9.4小结……………………………………………………………………………………………199 第四部分内存管理及其它 第10章程序和内存管理…………………………………………………………………………203 10.1内存的工作方式………………………………………………………………………………204 10.2内存管理………………………………………………………………………………………207 10.2.1压缩程序内存………………………………………………………………………209 10.2.2获得更多的内存……………………………………………………………………210 10.3扩充内存………………………………………………………………………………………211 10.3.1确定扩充内存的有效性………………………………………………………… 211 10.3.2使用扩充内存………………………………………………………………………213 10.4扩展内存…………………………………………………………………………………… 217 10.4.1确定扩展内存的有效性……………………………………………………………217 10.4.2使用扩展内存………………………………………………………………………218 10.5程序执行………………………………………………………………………………………245 10.5.1 EXEC功能…………………………………………………………………………245 10.5.2程序退出…………………………………………………………………………··-249 10.5.3潜在的EXEC问题…………………………………………………………………249 10.5.4往DOS中输入命令………………………………………………………………250 10.5.5替换DOS的内部命令……………………………………………………………251 10.5.6为什么有些EXE文件不能被转换成COM文件………………………………252 10.5.7程序段前缀(PSP)…………………………………………………………………252 10.6内存常驻软件的编程…………………………………………………………………………254 10.7小结……………………………………………………………………………………………256 第11章中断处理程序……………………………………………………………………………257 11.1什么是中断……………………………………………………………………………………257 11.2中断的工作方式………………………………………………………………………………259 11.3 Intel 8086系列的中断类型…………………………………………………………………259 11.3.1内部硬件中断…………………………………………………………………… 260 a9页 11.3.2外部硬件中断……………………………………………………………………260 11.3.3软件中断……………………………………………………………………………261 11.4中断向量……………………………………………………………………………………262 11.5获取和设置中断向量…………………………………………………………………………262 11.6 什么时候必须写一个中断处理程序?………………………………………………………263 11.7编写Ctrl-C处理程序………………………………………………………………………264 11.8编写一个关键出错处理程序…………………………………………………………………270 11.9 TSR综述……………………………………………………………………………………294 11.10TSR的中断基础……………………………………………………………………………296 11.10.1键盘中断…………………………………………………………………………296 11.10.2 InDOS标志、DOSOK中断和定时器中断………………………………………296 11.11小结…………………………………………………………………………………………302 第12章设备驱动程序………………………………………………………………………… 304 12.1驱动程序的类型………………………………………………………………………………305 12.1.1字符设备驱动程序…………………………………………………………………305 12.1.2块设备驱动程序……………………………………………………………………305 12.2设备驱动程序的工作方式……………………………………………………………………306 12.3设备驱动程序的结构…………………………………………………………………………308 12.3.1设备头………………………………………………………………………………309 12.3.2策略例程………………………………………………………………………… 312 12.3.3中断例程……………………………………………………………………………314 12.4完整的驱动程序………………………………………………………………………………328 12.4.1汇编驱动程序………………………………………………………………………331 12.4.2安装驱动程序………………………………………………………………………332 12.4.3调试驱动程序………………………………………………………………………332 12.5编一个实用的驱动程序………………………………………………………………………333 12.6使用设备驱动程序……………………………………………………………………………334 12.7小结……………………………………………………………………………………………334 第13章其它杂项功能……………………………………………………………………………336 13.1DOS版本信息………………………………………………………………………………336 13.2设备信息………………………………………………………………………………………339 13.3日期和时间功能………………………………………………………………………………341 13.4扩展的出错处理………………………………………………………………………………345 13.5未公开的功能…………………………………………………………………………………349 13.6小结…………………………………………………………………………………………350 第五部分参考手册 第14章参考手册概述……………………………………………………………………………353 a10页 14.1怎样介绍各个服务……………………………………………………………………………353 14.1.1中断号…………………………………………………………………………… 353 14.1.2功能号………………………………………………………………………………354 14.1.3子功能号……………………………………………………………………………354 14.1.4版本的有效性………………………………………………………………………355 14.1.5用途……………………………………………………………………………… 355 14.1.6描述…………………………………………………………………………………355 14.1.7调用寄存器…………………………………………………………………………355 14.1.8返回寄存器…………………………………………………………………………355 14.1.9注释…………………………………………………………………………………355 14.2详细的功能总结………………………………………………………………………………355 第15章BIOS参考手册……………………………………………………………………………371 第16章DOS参考手册……………………………………………………………………………470 16.1怎样调用DOS服务…………………………………………………………………………470 16.2可重入性………………………………………………………………………………………470 16.3保留的功能……………………………………………………………………………………471 16.4未公开的功能…………………………………………………………………………………472 16.5 DOS服务……………………………………………………………………………………472 第17章鼠标参考手册……………………………………………………………………………649 17.1鼠标的功能…………………………………………………………………………………649 17.2鼠标驱动程序的EGA寄存器接口…………………………………………………………677 第18章EMS参考手册……………………………………………………………………………682 第19章XMS参考手册……………………………………………………………………………721 第20章DPMI参考手册…………………………………………………………………………731 第21章任务切换参考手册………………………………………………………………………780 21.1数据结构………………………………………………………………………………………780 21.2通报功能………………………………………………………………………………………784 21.3服务功能………………………………………………………………………………………789 第22章DoubleSpace参考手册…………………………………………………………………794 22.1CVF结构……………………………………………………………………………………794 22.2API功能………………………………………………………………………………………795 附录A ASCII字符集………………………………………………………………………………799 a11页 附录B 选中的内存位置……………………………………………………………………………806 B.1中断表…………………………………………………………………………………………806 B.2 BIOS数据区……………………………………………………………………………………808 附录C 一种标准的TSR标识技术………………………………………………………………811 C.1用户参数块………………………………………………………………………………… 812 C.2功能00h(检查安装)…………………………………………………………………………813 C.3功能01h(返回用户参数指针)………………………………………………………………814 C.4其它TesseRact功能…………………………………………………………………………815 附录D 保留的DOS功能…………………………………………………………………………816 D.1未公开的DOS功能的种类……………………………………………………………………816 D.2覆盖范围……………………………………………………………………………………817 D.3使用功能52h—表中表……………………………………………………………………818 D.4小结……………………………………………………………………………………………855 附录E 支持资源清单………………………………………………………………………………856 E.1硬件……………………………………………………………………………………………856 E.2 MS-DOS和BIOS编程………………………………………………………………………856 E.3编程语言…………………………………………………………………………………… 857 E.4一般编程技术……………………………………………………………………………… 858