《DOS程序员参考手册》第四版;英文原名为“DOS Programmer's Reference, 4th Edition”,作者是美国的Terry Dettman及AllenL.Wyatt, Sr. 。本书是Que的保留书 目,内容完整,解释清楚,在介绍DOS编程技术的书籍中,本书是多年来最有影响、最受欢 迎的书籍之一。 DOS是整个PC机的技术基础,即使是到今天,在Windows 3.1广为流行,乃至Win- dows 95(或Chicago)即将问世时仍是如此。因为无论是Windows、OS/2、NetWare还是 Windows NT,都离不开DOS的基础性、概念性支持。虽然DOS是一个单用户的操作系 统,但所有上述的多任务操作系统都是从DOS上发展起来的,并且尽可能地与DOS保持 兼容,才能被用户接受。用户使用计算机,必须先从DOS学习起,具备了DOS的初步知识 才能进入Windows、OS/2乃至NetWare及Windows NT的网络世界。学习PC编程的 人,无论是学生或计算机爱好者,都得从DOS开始,更不要说是开始学习C 、BASIC、Pas- cal,特别是学习汇编语言编程的人们。即使是PC编程高手,首先也必须具备完整而深入 ·的DOS知识。 正是在这样的背景下,我们在清华大学出版社的全力支持下,组织翻译了这本《DOS 程序员参考手册》。原书已到第四版,但在国内却是首次介绍。与Microsoft公司为DOS 软件而准备的《程序员技术参考手册》相比,这本书内容更丰富、完整、更易于使用。 全书共分五个部分及五个附录。第一至四部分是以技术专题方式对DOS编程的各个 方面进行了论述,并以大量的C/C++、Pascal、BASIC及汇编语言实例,使读者不仅可以 从理论上学习DOS编程的知识,而且可通过实例,立即构造出自己的实用程序。其中,第 一部分可以说是一些预备性的知识,介绍了DOS的历史、DOS的结构、DOS所运行的硬 件技术基础,以及提供给程序员的DOS和BIOS编程接口。本部分通过实例说明,要用好 DOS,使编出的程序效率更高,必须选择好适当的编程及层次;在C/C++、Pascal、BA- SIC中,都可以充分地利用DOS和BIOS提供的资源。 第二部分介绍DOS的外部设备编程技术。其中输入设备有键盘和鼠标;输出设备有 字符设备、显示器、打印机等。另外还重点介绍了串行设备。作者在这一部分里所介绍的 知识很有特色,且不局限于DOS范围,而是从编程者的需要出发,从各个层次上对输入 输出设备进行编程,且理论与实践并举。 第三部分介绍了DOS的磁盘、文件及目录管理和程序员对其编程时所应具备的技术 及知识。这一部分是DOS的重点,也是DOS程序员最常使用的功能。本书的这一部分, 内容详尽,实例也很有针对性。 2页 第四部分介绍了DOS编程技术的三个较难的专题:内存管理、中断处理程序及设备 处理程序。 Microsoft技术手册在这几个技术专题的介绍上过于简单,而本书则尽可能地 将所涉及的知识(无论是已公开的还是未公开的)介绍给读者,并给出了一些很有价值的 实例。但从译者角度看,所讲内容仍不够全面,有关这几个专题的内容,读者不妨参看清华 大学出版社出版的Addsion- Wesley的书籍《未公开的DOS核心技术》。 第五部分是本书最具特色的内容,也是它区别于其它DOS程序员参考书籍的地方。 这一部分的篇幅较大,比Microsoft的参考手册所提供的知识要丰富得多。在内容上,它 介绍了BIOS、DOS、EMS、XMS、DPMI、DoubleSpace及任务切换等方面的功能调用。在 每个功能调用的介绍内容中,尽可能地把所涉及的知识、禁止及注意事项介绍给了读者。 它的注释部分确实是独一无二的。 本书的内容都是最新的。本书的所有功能调用都已更新到了MS- DOS 6。不仅如此, 本书对每一个功能调用,都作了版本上的说明及在各个版本下的使用注意事项。因此,本 书完全可以作为任何一个DOS版本的技术参考手册。而且由于有了第五部分的内容,读 者在进行PC编程时,所涉及的技术,都可以在这里找到。像这样把BIOS、DOS、EMS、 XMS及DPMI都融于一体的书籍,确实给读者提供了方便。因为其中有些内容,一般程序 员是很难找到的。 就像书名所表达的那样,本书是为DOS程序员准备的。但是由于PC机的特点,由于 DOS是PC机上各种软件的基础,因此本书为所有在PC上进行编程的计算机专业人员、 大专院校学生及计算机爱好者都能提供方便。 这是一本在翻译上有较大难度的书籍,因为本书所涉及的知识非常丰富。由于工作量 关系,虽经我们做了巨大努力,书中仍难免有误,欢迎读者指正。 参加本书的翻译及审校工作的有熊桂喜、陆益民、黎军英、田子钧、蒋华、陈石、陈清 等。此外还有其它同志为本书的翻译工作提供过宝贵的意见。在此一并致谢。 译者 1994年12月于北京航空航天大学计算机系 3页 引 言 欢迎使用《DOS程序员参考手册》第四版。编写本书的目的有两个。首先,我们想向人 们解释清楚:在DOS级上的程序如何使用DOS、BIOS以及其它能帮助编程的相关功能。 其次,我们也想鼓励使用高级语言的程序员使用DOS功能来扩展他们对PC系统的控 制。 大多数谈及DOS和BIOS编程的书籍,都把重点放在汇编语言上。虽然也有少量的 书籍讨论了从高级语言中使用DOS功能的内容,但大多数也只涉及皮毛,实际上是很难 作为参考手册来使用的。《DOS程序员参考手册》第四版一书,通过大量的实例,希望能帮 助读者在程序中充分地发掘出使用DOS或BIOS功能的潜力。我们的目的就是,当读者 进行编程工作时,本书能实实在在地摆在计算机旁,助你一臂之力,而不仅仅是放在书架 上的摆设。 为了使本书能对读者发挥出最大的作用,我们充分地考虑到了谈及内容的深度和广 度,做到了读者能任意从某个具体的编程主题开始。本来,整本那可由介绍众多编程主题 和技巧的内容组成,但是,本书并没有对每个专题都穷追不舍,而是给出一个开始点,然后 给出足够的参考信息,让读者自己一步步地深入下去。书中的内容提供了各种所需的基础 知识,利用这些知识,读者自己就能进一步地编写出功能强大而富有活力的程序。 本书讨论了BIOS和DOS功能可应用到的各个主要领域。书中的讨论和实例,能有 助于初学者了解到如何使用这些功能;对于高级程序员,则提供了更进一步的方法,让他 们去组织所了解的内容。只要可能,任何时候我们都强调搞清楚为什么要这么用的道理。 像本书这样题材的书籍,只有提供了尽可能详尽的参考资料,才能对程序员真正有 用。本书的最后一大部分,一个功能一个功能地详细列出了所有的DOS和BIOS功能(包 括许多未曾公开的功能)。对每个功能,都对它提供了信息进行总结,并提供了对寄存器要 求的详细信息。在本手册中这一部分所列出的信息,对任何DOS程序员都是很有用的,无 论他工作时使用的是汇编语言,还是BASIC、C或Pascal。 本书另一个有意义之处就是其中的内容都是最新的。书中所列功能的版本已覆盖了 MS-DOS6,还包括了有关扩展内存驱动程序、扩充内存驱动程序以及鼠标驱动程序的内 容。其中还有一些与硬件有关的章节,介绍了如何识别所使用的CPU芯片的类型,有什 么样的协处理器、系统当前使用的是何种显示卡等。 本书在第四版中增加了一些以往版本所不具备的内容。除了对使用功能按照最新信 息进行了更新外,整个参考手册部分中的内容更加充实和完善,能够让读者尽快地获得所 需的内容。我们相信,仅仅通过这部分所增加的内容,就会让读者受益匪浅。 4页 有时,有关未公开功能的内容是不完整或不准确的,但我们在本书中仍介绍了这方面 的内容,因为程序员在编程时需要全面地了解DOS和BIOS的知识,而仅靠已公开的内 容尚不能完全做到这一点。但使用这些未公开的特性是有风险的,因为它们未公开,因而 不能担保在所有的DOS版本下都能正常地工作。其中有些特性甚至有可能在某些版本中 不存在。 编写本书的目的 编写本书的目的和指导思想,就是向读者显示如何在相应的层次上对DOS系统进行 编程。我们讨论了各种可用的功能,但并不是在任何地方都必须用汇编语言来使用这些功 能。而某些编程任务又必须用汇编语言才能有效地完成。(事实上,有些任务甚至必须通 过直接进入硬件层才能完成,即使DOS和BIOS服务有时也不能令人满意)。但是,尽可 能地在最高层上工作,肯定是有好处的。书中已提供了决定使用何种层次来编程的知识。 书中给出的例子,其方向是在高级语言中如何与DOS和BIOS例程打交道。尽管使 用汇编语言最简练,但我们不推荐这么做。通过强调在C/C++、Pascal、BASIC中也能有 效地使用这些例程,我们希望能使这些技术获得广泛的应用。 本书的读者对象 如果你是一个对在DOS上工作感兴趣的程序员,并且希望提高程序的效率,那么本 书一定适合于你。本书涉及DOS编程的各个层次,从高级编程语言服务到BIOS中断。 本书的读者应该是熟悉C/C++、Pascal、BASIC的程序员,对汇编语言也应有一定 了解。我们假定你至少熟悉一种编程语言,对其它语言也有兴趣,并且熟悉MS-DOS以及 它的变种一DOS的IBM版本。 我们还假定你希望提高自己的程序的速度,或想访问编程语言中不能提供的一些功 能,而通过DOS和BIOS功能便能得到这些功能。本书给出了许多高级程序技巧,除了汇 编语言外,在高级语言中也能随意地使用各类技巧。 尽管某些特定技术只能在特定编程语言中才能说明,但是,我们真正感兴趣的是技 术,而不是语言。在掌握了如何使用某项技术后,无论是在C/C++、Pascal、BASIC或汇 编语言中,都能使用它,事实上,任何编程语言都能访问DOS或BIOS中断。 阅读本书应具备的知识 本书是为C/C++、Pascal、BASIC程序员编写的。书中也给出了一点使用汇编语言 来编程的知识,但没有作深入的解释。如果读者想深入地了解汇编语言,可以参见Que出 版的“Using Assembly Language”<<使用汇编语言>>一书,也可以参看附录E中所列出的 其它书籍。 书中的例子是用汇编语言、C/C++、Pascal和BASIC写成的,并推荐尽量使用C/ C++。我们尽可能地把例子讲述清楚,而不要求读者具备很强的背景知识。所给出的程 序清单有助于读者实际使用好DOS和BIOS功能。 5页 如何阅读本书 本书分成五个部分。对了解DOS的基础编程知识感兴趣的读者可从第一部分开始。 而对各个专门方面的编程知识感兴趣的读者,则可以参看第二、三和四部分。而对许多高 级程序员来说,只需要一个快速的参考手册,这部分内容位于第五部分。 在第一部分“DOS简介”的四章内容中,对DOS的基本内容作了简要介绍。第一部分 首先对DOS系统的历史和DOS的工作方式,无论是静态的还是动态的,都简单地浏览了 一遍。接下来,介绍了在DOS级编程的基本原则,并介绍了在工作时可以使用的编程语言 资源。最后,本部分还探讨了在DOS级编程的“细节”知识。 第二部分,“字符设备和串行设备”中,第5章和第6章讨论了输出设备(显示器和打印 机)及输入设备(键盘和鼠标)。第7章介绍了串行输入和输出设备;同时还讨论了 8250UART。 第三部分“磁盘、目录和文件”含有两章内容。第8章讨论了磁盘分区表、引导记录和 文件分配表(FAT),还讨论了DOS的磁盘功能。第9章则讨论了根目录、目录项、子目录 和卷标等内容。第9章还解释了通过DOS来处理文件的方式,在讨论中同时涉及了所使 用的文件控制块(FCB)和句柄功能。 第四部分“内存管理和杂项主题”讨论了程序内存管理(第10章)、中断处理程序(第 11章)和设备驱动程序(第12章)。第13章“杂项功能”则介绍了设备信息和扩展的错误 处理等内容。 第二、三、四部分的各章在阐述各个专题时,还给出了一些实际例子,读者可以使用这 些例子来构成自己的库函数。 第五部分是一个完整的参考手册集。在本部分里,我们在编排上作了精心安排,以便 给读者在使用查阅时提供方便。 DOS及BIOS服务都按功能号的数字顺序给出。每一功 能都以标准的参考手册格式列出,并在各个功能的注释中给出了注意事项和使用限制。除 了BIOS和标准的DOS功能外,第五部分还包括有鼠标功能(DOS Int 33h)、扩充内存 (DOS Int 67h)、XMS、DPMI、任务切换程序以及DoubleSpace等技术规范的说明。 在本书的最后给出了五个附录,提供了一些其它信息。附录A包含有ASCII字符集; 附录B给出了一个选择的内存位置表;附录C给出了一个TSR接口的标准;附录D讨论 了各种未公开的DOS功能,其中包括两个探讨性的实例程序;附录E是一个其它书籍的 资源列表。 本书中的代码 如果你已做了很长时间的编程工作,就会明白:仅仅将程序代码敲入计算机并保证它 无错误,也会消耗大量的时间。这样的经验同样适用于本书中的程序代码。尽管读者可以 将书中所包含的程序全部敲入机器中,但完成此工作也得耗费几天的时光。而要改正敲入 的错误,则又会花费更长的时间。如果读者时间富裕,那就没什么好说的;否则,可考虑购 买本书所配的程序附盘,寄出所需费用,或与Discovery Computing公司联系。其地址和 电话在下一节中给出。 6页 请与作者联系 为本书作过贡献的人们,心中只有一个目标:让本书成为一本最好的DOS程序员 参考手册。在本书出版后,书中错误仍在所难免。如果发现了任何错误和疏漏之处,可用 各种方式告知我们,以便在下一个版本中更正过来,使之更完善。既可以直接给Que公司 写信,也可以与本书的作者直接联系,地址如下: Allen L. Wyatt Discovery Cottiputing Inc. 2323State Route 585 P. O. Box 738 Sundance,WY82729 800-628-8280 307-283-2714(传真) 72561,2207(CompuServe)