DOS时代的程序员干不了活活到现在是啥感觉

当今MS-Windows横扫大江南北让我们这就來研究一下它的祖宗——MS-DOS!

这本书很难得,希望读者好好学习!

DOS程序员干不了活手册(一)

(以下内容全部为原作者的阐述照样保留)

這个电子书只是很简单地把txt做成了chm,文本格式方面可能会让人看得有点恼火,呵不好意思了,将就一下因为我本身写网页是手工的,如果全部进行整理会花上几天时间希望您看的时候不会边看边骂

    版社出版。未经出版科书面允许不得以任何方式复制或抄袭本书内容。

夲书封面贴有清华大学出版社激光防伪标签无标签者不得销售。

图书在版编目(CIP)数据

出版者:清华大学出版社(北京清华大学校内郵编100084)

印刷者:北京人民文学印刷厂

发行者:新华书店总店北京科技发行所

全面,覆盖了DOS的各个方面

      本书的读者对象为对PC编程有兴趣的專业技术人员、大专院校学生及计算机爱好

译者序……………………………………………………………………………………………………… 1

引言…………………………………………………………………………………………………   2

第1章DOS简介………………………………………………………………………………………3

      2.4内存………………………………………………………………………………………………24

      2.6存储设備…………………………………………………………………………………………29

      2.7软件………………………………………………………………………………………………31

      2.8小 结………………………………………………………………………………………………34

第3章动态的DOS…………………………………………………………………………………35

      3.2命令处理…………………………………………………………………………………………38

      3.4一些高级语言的例子……………………………………………………………………………45

      3.5中断………………………………………………………………………………………………48

      3.6内存分配与管理…………………………………………………………………………………52

      3.7小结………………………………………………………………………………………………55

第4章DOS和BIOS接口 ………………………………………………………………………56

      4.2高级语言资源……………………………………………………………………………………59

      4.3小结………………………………………………………………………………………………76

第5章输出设备………………………………………………………………………………………79

      5.1基本的字符设备…………………………………………………………………………………79

      5.3视频功能…………………………………………………………………………………………99

      5.4打印机功能……………………………………………………………………………………106

      5.5小结……………………………………………………………………………………………108

第6章输入设备……………………………………………………………………………………109

      6.1键盘……………………………………………………………………………………………109

    6.2鼠标……………………………………………………………………………………………125

    6.3小 结……………………………………………………………………………………………130

第7章串行设备……………………………………………………………………………………131

    7.1串行接ロ………………………………………………………………………………………132

    7.2 串行转换:UART……………………-…………………………………………………… 134

      7.3将通信端口初始化……………………………………………………………………………140

      7.4调制解调器……………………………………………………………………………………142

      7.5编写一个终端程序……………………………………………………………………………143

      7.11小结……………………………………………………………………………………………155

第8章磁盘…………………………………………………………………………………………159

    8.1磁盘的内部结构…………………………………………………………………………… 159

      8.2利用磁盤功能…………………………………………………………………………………172

      8.3小结……………………………………………………………………………………………183

第9章目录和文件…………………………………………………………………………………184

      9.1磁盘目录……………………………………………………………………………………184

    9.2什么是文件……………………………………………………………………………………191

    9.3 DOS处理文件的方式…………………………………………………………………………191

    9.4小结……………………………………………………………………………………………199

第10章程序和内存管理…………………………………………………………………………203

    10.1内存的工莋方式………………………………………………………………………………204

    10.2内存管理………………………………………………………………………………………207

    10.3扩充内存………………………………………………………………………………………211

    10.4扩展内存…………………………………………………………………………………… 217

    10.5程序执行………………………………………………………………………………………245

    10.6内存常驻软件的编程…………………………………………………………………………254

    10.7小结……………………………………………………………………………………………256

第11章中断处理程序……………………………………………………………………………257

    11.1什么是中断……………………………………………………………………………………257

11.2中断的工作方式………………………………………………………………………………259

    第12章设备驱动程序………………………………………………………………………… 304

    第13章其它杂项功能……………………………………………………………………………336

第14章参考手册概述……………………………………………………………………………353

    苐15章BIOS参考手册……………………………………………………………………………371

    第16章DOS参考手册……………………………………………………………………………470

    第17章鼠标参考手册……………………………………………………………………………649

    第18章EMS参考手册……………………………………………………………………………682

    第19章XMS参考手册……………………………………………………………………………721

    第20章DPMI参栲手册…………………………………………………………………………731

    第21章任务切换参考手册………………………………………………………………………780

    附录A ASCII字符集………………………………………………………………………………799

附录B 选中的内存位置……………………………………………………………………………806

附录C 一种标准的TSR标识技术………………………………………………………………811

附录D 保留嘚DOS功能…………………………………………………………………………816

附录E 支持资源清单………………………………………………………………………………856

目,内容完整解释清楚,在介绍DOS编程技术的书籍中本书是多年来最有影响、最受欢
 DOS是整个PC机的技术基础,即使是箌今天在Windows 3.1广为流行,乃至Win- 
Windows NT都离不开DOS的基础性、概念性支持。虽然DOS是一个单用户的操作系
统但所有上述的多任务操作系统都是从DOS上發展起来的,并且尽可能地与DOS保持
兼容才能被用户接受。用户使用计算机必须先从DOS学习起,具备了DOS的初步知识
人无论是学生或计算機爱好者,都得从DOS开始更不要说是开始学习C 、BASIC、Pas- 
cal,特别是学习汇编语言编程的人们即使是PC编程高手,首先也必须具备完整而深入
 正是茬这样的背景下我们在清华大学出版社的全力支持下,组织翻译了这本《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程序员干不了活最常使用的功能本书的这一部分,
内容详尽實例也很有针对性。
 
 第四部分介绍了DOS编程技术的三个较难的专题:内存管理、中断处理程序及设备
处理程序 Microsoft技术手册在这几个技术专题嘚介绍上过于简单,而本书则尽可能地
将所涉及的知识(无论是已公开的还是未公开的)介绍给读者并给出了一些很有价值的
实例。但從译者角度看所讲内容仍不够全面,有关这几个专题的内容读者不妨参看清华
大学出版社出版的Addsion- Wesley的书籍《未公开的DOS核心技术》。
 第五蔀分是本书最具特色的内容也是它区别于其它DOS程序员干不了活参考书籍的地方。
这一部分的篇幅较大比Microsoft的参考手册所提供的知识要丰富得多。在内容上它
每个功能调用的介绍内容中,尽可能地把所涉及的知识、禁止及注意事项介绍给了读者
它的注释部分确实是独一無二的。
 本书的内容都是最新的本书的所有功能调用都已更新到了MS- DOS 6。不仅如此
本书对每一个功能调用,都作了版本上的说明及在各个蝂本下的使用注意事项因此,本
书完全可以作为任何一个DOS版本的技术参考手册而且由于有了第五部分的内容,读
者在进行PC编程时所涉及的技术,都可以在这里找到像这样把BIOS、DOS、EMS、
XMS及DPMI都融于一体的书籍,确实给读者提供了方便因为其中有些内容,一般程序
 就像书名所表达的那样本书是为DOS程序员干不了活准备的。但是由于PC机的特点由于
DOS是PC机上各种软件的基础,因此本书为所有在PC上进行编程的计算機专业人员、
大专院校学生及计算机爱好者都能提供方便
 这是一本在翻译上有较大难度的书籍,因为本书所涉及的知识非常丰富由于笁作量
关系,虽经我们做了巨大努力书中仍难免有误,欢迎读者指正
 参加本书的翻译及审校工作的有熊桂喜、陆益民、黎军英、田子鈞、蒋华、陈石、陈清
等。此外还有其它同志为本书的翻译工作提供过宝贵的意见在此一并致谢。
 1994年12月于北京航空航天大学计算机系
 欢迎使用《DOS程序员干不了活参考手册》第四版编写本书的目的有两个。首先我们想向人
们解释清楚:在DOS级上的程序如何使用DOS、BIOS以及其它能帮助编程的相关功能。
其次我们也想鼓励使用高级语言的程序员干不了活使用DOS功能来扩展他们对PC系统的控
 大多数谈及DOS和BIOS编程的书籍,嘟把重点放在汇编语言上虽然也有少量的
书籍讨论了从高级语言中使用DOS功能的内容,但大多数也只涉及皮毛实际上是很难
作为参考手冊来使用的。《DOS程序员干不了活参考手册》第四版一书通过大量的实例,希望能帮
助读者在程序中充分地发掘出使用DOS或BIOS功能的潜力我們的目的就是,当读者
进行编程工作时本书能实实在在地摆在计算机旁,助你一臂之力而不仅仅是放在书架
 为了使本书能对读者发挥絀最大的作用,我们充分地考虑到了谈及内容的深度和广
度做到了读者能任意从某个具体的编程主题开始。本来整本那可由介绍众多編程主题
和技巧的内容组成,但是本书并没有对每个专题都穷追不舍,而是给出一个开始点然后
给出足够的参考信息,让读者自己一步步地深入下去书中的内容提供了各种所需的基础
知识,利用这些知识读者自己就能进一步地编写出功能强大而富有活力的程序。
 本書讨论了BIOS和DOS功能可应用到的各个主要领域书中的讨论和实例,能有
助于初学者了解到如何使用这些功能;对于高级程序员干不了活则提供了更进一步的方法,让他
们去组织所了解的内容只要可能,任何时候我们都强调搞清楚为什么要这么用的道理
 像本书这样题材的書籍,只有提供了尽可能详尽的参考资料才能对程序员干不了活真正有
用。本书的最后一大部分一个功能一个功能地详细列出了所有嘚DOS和BIOS功能(包
括许多未曾公开的功能)。对每个功能都对它提供了信息进行总结,并提供了对寄存器要
求的详细信息在本手册中这一蔀分所列出的信息,对任何DOS程序员干不了活都是很有用的无
论他工作时使用的是汇编语言,还是BASIC、C或Pascal
 本书另一个有意义之处就是其中嘚内容都是最新的。书中所列功能的版本已覆盖了
MS-DOS6还包括了有关扩展内存驱动程序、扩充内存驱动程序以及鼠标驱动程序的内
容。其Φ还有一些与硬件有关的章节介绍了如何识别所使用的CPU芯片的类型,有什
么样的协处理器、系统当前使用的是何种显示卡等
 本书在第㈣版中增加了一些以往版本所不具备的内容。除了对使用功能按照最新信
息进行了更新外整个参考手册部分中的内容更加充实和完善,能够让读者尽快地获得所
需的内容我们相信,仅仅通过这部分所增加的内容就会让读者受益匪浅。
 
 有时有关未公开功能的内容是不唍整或不准确的,但我们在本书中仍介绍了这方面
 的内容因为程序员干不了活在编程时需要全面地了解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出
 书中的例子是用汇编语言、C/C++、Pascal和BASIC写成的,并嶊荐尽量使用C/
 C++我们尽可能地把例子讲述清楚,而不要求读者具备很强的背景知识所给出的程
 序清单有助于读者实际使用好DOS和BIOS功能。
 本书分成五个部分对了解DOS的基础编程知识感兴趣的读者可从第一部分开始。
 而对各个专门方面的编程知识感兴趣的读者则可以参看第二、三和四部分。而对许多高
 级程序员干不了活来说只需要一个快速的参考手册,这部分内容位于第五部分
 在第一部分“DOS简介”嘚四章内容中,对DOS的基本内容作了简要介绍第一部分
 首先对DOS系统的历史和DOS的工作方式,无论是静态的还是动态的都简单地浏览了
 一遍。接下来介绍了在DOS级编程的基本原则,并介绍了在工作时可以使用的编程语言
 资源最后,本部分还探讨了在DOS级编程的“细节”知识
 苐二部分,“字符设备和串行设备”中第5章和第6章讨论了输出设备(显示器和打印
 机)及输入设备(键盘和鼠标)。第7章介绍了串行输叺和输出设备;同时还讨论了
 第三部分“磁盘、目录和文件”含有两章内容第8章讨论了磁盘分区表、引导记录和
 文件分配表(FAT),还讨論了DOS的磁盘功能第9章则讨论了根目录、目录项、子目录
 和卷标等内容。第9章还解释了通过DOS来处理文件的方式在讨论中同时涉及了所使
 鼡的文件控制块(FCB)和句柄功能。
 第四部分“内存管理和杂项主题”讨论了程序内存管理(第10章)、中断处理程序(第
 11章)和设备驱动程序(第12章)第13章“杂项功能”则介绍了设备信息和扩展的错误
 第二、三、四部分的各章在阐述各个专题时,还给出了一些实际例子读鍺可以使用这
 些例子来构成自己的库函数。
 第五部分是一个完整的参考手册集在本部分里,我们在编排上作了精心安排以便
 给读者在使用查阅时提供方便。 DOS及BIOS服务都按功能号的数字顺序给出每一功
 能都以标准的参考手册格式列出,并在各个功能的注释中给出了注意事項和使用限制除
 了BIOS和标准的DOS功能外,第五部分还包括有鼠标功能(DOS Int 33h)、扩充内存
 在本书的最后给出了五个附录提供了一些其它信息。附录A包含有ASCII字符集;
 附录B给出了一个选择的内存位置表;附录C给出了一个TSR接口的标准;附录D讨论
 了各种未公开的DOS功能其中包括两个探讨性的实例程序;附录E是一个其它书籍的
 如果你已做了很长时间的编程工作,就会明白:仅仅将程序代码敲入计算机并保证它
 无错误也会消耗大量的时间。这样的经验同样适用于本书中的程序代码尽管读者可以
 将书中所包含的程序全部敲入机器中,但完成此工作也得耗费幾天的时光而要改正敲入
 的错误,则又会花费更长的时间如果读者时间富裕,那就没什么好说的;否则可考虑购
 买本书所配的程序附盘,寄出所需费用或与Discovery Computing公司联系。其地址和
 为本书作过贡献的人们心中只有一个目标:让本书成为一本最好的DOS程序员干不了活
参考掱册。在本书出版后书中错误仍在所难免。如果发现了任何错误和疏漏之处可用
各种方式告知我们,以便在下一个版本中更正过来使之更完善。既可以直接给Que公司
写信也可以与本书的作者直接联系,地址如下:
 
 在进一步阅读本书之前首先要清楚什么是DOS。本章首先扼要地介绍DOS操作系
统再简短地介绍操作系统的历史,以说明DOS产生的历史渊源本章的内容还将涉及
DOS结构及接口。因为这是一个非常粗略嘚介绍所以不要关注一些尚不清楚的术语,因
为在本章之后的其它各章还会对其进行更详细的解释
 DOS由四个基本模块组成:
 ·引导记录(The boot record)此记录起始于每个磁盘的0道、0扇区、第1面上,
 是由DOS FORMAT命令格式化磁盘时放入的对于硬盘,引导记录位于DOS分
 区的第一个扇区内这个需偠一个扇区空间的记录,标识了该磁盘并含有用于引
 导该磁盘的初始化程序。
 · BIOS 基本输入/输出系统(BIOS)是存放在ROM中的这个面向物理設备的
 低层接口,使得各种软件可以透明地使用各种变幻莫测的硬件设备对于DOS它
 也通过从磁盘中调入I/O来扩展其功能。
 · DOS程序 DOS是通过两個程序来实现的一个是O/I系统,它是从磁盘中调
 入的接口模块用来扩展ROM BIOS的功能,并包含有标准的设备驱动程序集
 另一个文件是磁盘操作系统(DOS),它是一个所有运行在计算机上的程序的高层
 接口而不管该程序是否使用磁盘。
 处理程序是人们工作在该系统下运行DOS服务嘚标准界面它产生命令提示符
 (C>),接收命令并执行用户向系统请求执行的各项任务。
 各个模块将在第2章“DOS系统结构”和第3章“动態的DOS” 中详细介绍然而我们
在这里还是作些基本的介绍。
 BIOS提供了一系列功能程序员干不了活可以利用这些功能来完成各种操作而不必關心底层
硬件的细节。在本书中我们将利用BIOS来执行各种实例程序里的必需操作。在本书第
五部分“参考手册”中按顺序详细介绍了BIOS中烸个功能的作用。
 虽然BIOS功能非常强但它离完整性还差得很远。建立在BIOS基础上的DOS平
台为编程者提供了很多必要的服务。在通用的操作系統(如DOS)成为现实之前的早期
 
 个人计算机上程序员干不了活所写的程序中,常常包含有与DOS功能等同的内容因此,跟踪应
用程序的过程也是非常复杂和可怕的。
 由于DOS功能的编程已由Microsoft(和其它厂商)完成DOS已成为读者在程序开
发中的伙伴。虽然不能认为DOS中的一切都工作得非常正确而不会出错但可以假定
DOS是坚实的(除非有其它已证实的理由)。第五部分则包含了各种DOS功能的一项一
 多少年以来DOS一直被当作微型计算机的最原始的操作系统。今天的DOS所拥有
的用户数比任何其它操作系统要多得多。它已变得非常复杂是一个带有各种工具和应鼡
程序来满足各种需要的操作环境。
 DOS富有远见卓识之处就在于它能处理各种复杂的微处理器的复杂特性,如80386
和80486等将来的DOS版本,甚至可鉯处理多任务支持多用户,尽管Microsoft公司还
没有明确地提供这方面的信息一些人可能会对此心存疑问,特别是出现了新一代操作系
DOS的最原始程序是由Tim Paterson编写的它开始于1980年8月,第一个产品诞生于
该年的8月那时,Digited Research的CP/M操作系统在微机操作系统领域有着广泛的
应用86-DOS的一个特殊设计是CP/M的应用程序很容易转换过来,它保留了同样的文
件控制块结构和功能因此,可以自动地将CP/M的程序转换到86—DOS上
 因为86-DOS只能工莋在1980年刚上市的 CPU芯片上,所以很少有人知
道它的存在但那些已经从8位的8088/Z80标准和CP/M系统升级到s-100系统的人
个多客户的市场基础,其中至少还包括一两个硬件制造广商与此同时,Microsoft公司也
在与SCP公司接触要他们为一个未知的公司研制一个新的版本。而在当时没有人(除
Microsoft公司外)知道,IBM也在寻找一种操作系统在1981年1月,Paterson知道了那
个客户的名字并且Microsoft公司已经将从86-DOS分离出的版本注册在他们自己的名
几个月,他按照IBM嘚需要进一步裁剪了该系统。
(少于10万美元)购买了86-DOS的全部版权以后,SCP公司对此交易提出过起诉最后
法院判决Microsoft支付了数百万美元嘚补偿。其结果是Microsoft公司毫无异议地永远
拥有了最流行的操作系统的版权
语,以后IBM版本也都简称为DOS)
 Paterson在1982年结束了直接参与DOS工作的生涯,泹他仍活跃在PC舞台上最
 
 在PC原始版本发布后,DOS在一些市场中还没有成为主流 IBM还选择了CP/M-
86和Softech的P-system作为PC的可选系统。然而卖主很少代理这些產品,也很少有
可以在这些操作系统上使用的开发语言此时,Microsoft已经在编程语言方面也获得了
良好声誉IBM用DOS发布自己的软件,开发者就迅速捡起这个从未停止过转动的球开
发出了新的功能。 CP/M-86和P-system也从来没有脱离PC市场它也一直在参与着市
 DOS已经正式修改过很多次(并且┅直还有许多版本并非是为通用系统而设计的),
尽管每次发展总包含一些改进和错误纠正但实际上每次版本都对应着一些硬件的改变
—其中的一种就是磁盘格式和容量的改变。
 表1.1列出了正式公布的主要DOS版本(按日期)和主要的改进本表中还未包含那
 表1.1 DOS的各种版本
蝂本 日期 硬件或操作系统上的更新
1.1 1982.3 双面磁盘,日期时间印记
3.2 1985.12 扩充支持新的介质
4.0 1988.6 支持大于32M的硬盘驱动器。 EMS内存性能的集成支歭
6.0 1993.3 支持磁盘的压缩,碎片去除改进的CONFIG.SYS结构,
 综合表1.1可以看出每个新DOS版本的性能提高和其所需的内存量总是相对应
的。DOSV1.0可存在於16K内存之下原始的IBMPC只允许使用64K内存。版本2至
少需要24K内存(如果安装设备驱动程序的话还需要更多的内存)。任何可用的程序至
少需要128K嘚最小内存作为版本3,DOS需要36K内存(如果安装设备驱动程序和文
件外壳的话所需更多),机器如果少于512K内存几乎不能使用了对于版本4, 512K變
成必需的内存,并且640K以上内存(扩展内存和扩充内存详见第2章)利用变成了现
实。因为内存紧张DOS5.0提供了将DOS调入高位内存的方法,這样它看上去便比
DOS 4少用了传统的常规内存,但它使用了更多的高内存区最后,DOS6是一个最强大
的DOS版本但它提供了一个改进的内存管理方法,使得已经安装的内存能发挥出最大
 
 让我们了解一下每个DOS版本所包含的改变之处在这本书中,我们有一些约定如
V1,表示的是版本1但也包括V1的子版本;而v1.n表示v1版本的子版本n。
 DOS V1.0是支持PC的最原始系统它支持基本的单面、8个扇区(8-sector磁盘格
式,并且提供了所有基本的磁盤服务主要的改变(相对cp/M而言)是,它包括了支持磁
盘目录结构、管理文件属性及文件大小的功能版本1.0还加入了比原始86-DOS改进的
磁盤分配和管理功能,更好的操作系统服务程序以及启动初始化时执行AUTOEXEC
.BAT批处理文件的功能IBM只是向生产厂家发放此版本。有趣的是这个DOS版夲没
有包括文件的日期和时间印记,这也是它和以后DOS版本的一个主要区别
 在版本V1.1(最后一个只属于IBM的版本),加入了日期、时间印记并且加入了支
持双面磁盘的驱动程序,还有一些错误更正它发布于1982年3月。
 · V1.25是第一个非IBM的而由原始设备制造厂商(OEM)发布的版本(版本号从
1.1跳到1.25对应了IBM版本号和Tim Paterson个人修订控制系统版本的不同,IBM
V1.1就是众所周知的版本V1.24)在这个版本中加入了VERIFY功能,即加入00h作为
目录結束标志字节(IBM的版本到2.0才出现了该功能)
 V1离统一的标准还差得很远;Microsoft不直接向最终用户销售该产品,而是授权给
OEM厂商由它们任意修妀,甚至可以更名(例如Heath-Zenith公司在1982年3月将它
改为ZDOS,成为第一个非IBM使用的DOS)
 在DOS V2.0中,增加了支持双面和单面9扇区格式的软盘、硬盘和在pcjr下使鼡
磁带的功能 DOS的服务程序也大大改善了。这个版本还加入了类似UNIX的分层式结
构的文件系统下面列出了DOS V2.0中的一些主要改进之处:
 ·筛选程序(或称为滤符程序)
 
 ·ANSI显示驱动程序
 ·支持用户自定义的命令处理程序
 和V1一样,V2也授权给做了改变的OEM厂商在这个时候,大多数OEM厂商知
道为了市场因素要接近或全部和IBM的机器兼容,因此改变就很小。一些公司像
Tandy公司的2000型号(它是第一个使用MS-DOS V2.0的机器)是到目前为圵修改
DOS最多的厂家,在其BIOS中提供双重的向量来和IBM BIOS保持兼容
 在版本2中,版本相同但来自不同的OEM厂商的不同版本还可以发现一些不同之
处。几乎所有V2版本都存在这种情况
 在2.1版中,只增加了对时钟的改变以便更加适合于IBM的PC杠和便携式PC机
的需要。 MS-DOS的这一版本如已知的2.11蝂,现仅在少量机器上出现过如东芝的
便携式组合设备,就已经将V2.11固化于ROM中
这个版本增加了支持高密度(1.2M)软盘和附加的硬盘格式,增加了支持网络磁盘功能的
技术基础下面列出了主要的新特性:
.应用程序控制的假脱机打印
 尽管IBM和Microsoft版本到今天还有些不同,但V3的公咘标志着OEM厂商自由
更改DOS结构的结束例如,对于IBM它提供的支持实用程序都作为COM文件,而Mi- 
crosoft则是以EXE格式来支持而在众多的编码中,则很少囿明显的区别
 然而,对网络操作支持就非常有必要在DOS结构上,特别是在内部数据格式上执行
严格的统一标准OEM合同也按照这个要求进荇了修改。从这个时候开始DOS的关键
部分基本上稳定了下来,这使得以前没有支持的开发者现在有了技术上的支持,开发就
 DOS 3.1增加了网絡磁盘包括支持文件共享,并修正了一些错误这个版本在一段
时间内,已经成为销售商的标准
 3.2版增加了支持3.5英寸软盘的功能。它還将格式化控制集成到外围设备驱动程
 
 序中3.2版是Microsoft以其自己的名字出售给最终用户的第一个版本。
 在DOS3.3中增加了两个新的用户命令(ULSFUNC和FASTOPEN)和两个新的
功能,升级了很多其它服务程序设备支持也覆盖到了IBM PS/2系列。该版本有影响的
地方是DOS的管理和开发工作,从Microsoft转到了IBM以解放Microsoft,使之专心致
致地开发iBM的OS/2源程序(作为交易的一部分IBM把自己的OS/2开发权转让给了
Microsoft)。两个公司都继续公布和支持其特有的产品版本
 在DOS 4.0版本中,扩充了很多用户命令增加了许多功能,并且指出了图形用户外
壳程序然而,最主要的改变是增加了支持超过32M容量的硬盤驱动器并且将扩充内存
(expanded memory)驱动程序作为DOS的一个标准部分。(这些特性在那时已被作为附加
 两个月以后IBM发布了升级的版本4.0—在磁盤卷标上标识为V4.01—该版
本更正了一些错误,而VER命令仍然标识该版本为4.0只有通过查看两个隐含文件和
SHARE.EXE文件的日期和时间区分这两个版夲。4.01版所标明的日期为08/03/88或
更晚而4.0版的日期06/17/88。 Microsoft延迟一段时间后也发布了它自己的4.0版,
其4.0版等效于IBM的4.01版过了不久,Microsoft又发布了进一步修正其错误的4.01
 在DOS5.0版中增加了支持扩展内存(extended memory)的功能,改进了很多用户
命令增加了一些新的用户命令,主要的有UNDELETE、UNFORMAT、MIRROR以及鼠
标响應全屏幕文本编辑器等,增加了在外壳程序中支持的任务切换器API(应用程序接
口) DOS核心已重新构造,第一次使得DOS减少了空间另外,DOS現在可以运行在
ROM中只有使用SHARE命令才能安全地支持超过32M DOS分区的要求,也已不再是
 DOS 6.0版在1993年3月发布主要改变在于为操作系统增加了很多实鼡程序。例
如新增加了如下几个很有用的实用程序:
 下,保护系统免受已知病毒的侵犯 Anti-Virus也可增加新病毒的有关信息。
 · Deleted file recovery(删除文件恢複)这个实用程序可以恢复被误删除的文
 件与第三方产品不同的是,UNDELETE为用户提供了三个层次的安全服务
 
 在使用压缩过的文件时,又对其解压缩
 · File backup(文件备份) 该实用程序是经过改进的Backup,由菜单驱动该实
 用程序可将硬盘数据拷到软盘做备份工作。在DOS和Windows下都可以运行
 .BAT文件来优化使用内存的实用程序。
 另外其它一些DOS实用程序也做了改进。CONFIG.SYS文件结构也被改成可以有
多个启动序列例如,可以有一个特殊的配置用于支持使用CD-ROM另一个配置用于支
持磁带驱动程序。 DOS在每次启动时便会询问用户选择哪一个启动序列
 对程序员干不了活来说,DOS繼续发展将使新的服务和选项成为可能。像Microsoft Windows
和DESQview这样的窗口环境的出现已经为还在DOS层次编程的程序员干不了活提供了新的更
复杂的服务功能。每增加一个新的服务就可能使更多的机器硬件代码从程序中隐去,同
时又为用户创造了新的功能这种不断增加的新功能,会导致牺牲程序的运行速度和响应
速度而造成了太高的代价。但是随着处理器速度的加快,对低层次进行的编程需求在不
断地减少应用程序将主要使用DOS的服务和它的类似物。只有系统级的程序员干不了活才需要
工作在DOS内部Windows或DESQView将不必担心去直接访问机器和它的服务。这就
昰未来技术发展的趋势
 因为本书的目的是深入地探讨DOS和PC系统,因此应注意到系统的分层功能。图
1.1将有助于你理解这种层次的结构
 設计整个DOS/PC系统的基本思想是一种“系统套系统”的设计途径。在系统的底
层是从电子电路开始的。例如正是带有一定功能和特点的电蕗(称为计算机)实现了
 
 BIOS又用严格定义的功能和特性与此电路层组合成一体,形成了一个新的“计算机
系统”。BIOS层是通过具备了标准属性的设备来描述其特性的不管使用的是何种显示
器,也不管购买了何种键盘BIOS都认为它们的响应是相同的。总之所有BIOS的这些
特性,使嘚它有能力支持一个编程环境在这个环境中,人们开发出了DOS为使DOS和
各种厂家标准的BIOS之间的接口标准化,DOS设计者引入了一个缓冲层使鼡者通过它
来调用I/O系统。它经常被认为是BIOS的一部分然而,由于此I/O系统层是从磁盘装
入的它是DOS系统的一部分(并且会在需要时进行修改,以满足DOS的要求)技术上,
应将它看作是DOS整体的组成部分因为它们之间的关系比它与BIOS之间的关系更密
 DOS环境仍定义的是一个计算机系统,但它是在一个更高层次上可以管理文件和
文件系统的语言在这个层次上被引入,语言就像是基于此设备一样在这个层次,DOS在
标准化的环境中集成了用户所需要操作的特性例如,不管使用的是Toshiba的还是
Maxtor的磁盘系统都将同样地对待它们。对在DOS上工作的程序详细的低层情况就
 在下个层次(命令处理器)上,是另一个以与设备无关但能与设备交互为标志的计算
机系统,在这个层次上可以将设备和攵件按相同的方式处理,尽管DOS是按顺序执行
的但在命令处理器层,可以将结果直接输出到文件(正常情况下是输出到屏幕)。在这里
 鈈必考虑各设备速度的差异和各设备之间的不同之处
 再上一层是由应用程序定义的计算机系统。因为这个系统是面向用户而不是面向程
 序员的所以这个接口更加简单。现在的“计算机语言”是由菜单选择和窗口组成的这一
层,和其它层一样也是建立在下一层次之上嘚。
 当阅读本书或按个人的爱好跳过这些层次工作时,要留意跳过部分系统层次的得和
失因为DOS是建立在BIOS程序之上的,因此程序越过DOS 环境而直接到BIOS能影
响到DOS工作的方式。例如你可以在BIOS层用磁盘读和写功能来写一个自己的文件
处理程序。但如果这样做也许得花整年的時间来做和DOS一样的工作。反之你也可以
只停留在顶层,但更低的层次却可以让你的程序提高运行速度这是一个复杂性与速度的
交替过程,如何选择全在于程序员干不了活自己。
 1.4 DOS的程序员干不了活接口
 在高级语言工作的程序员干不了活习惯于工作在预定义的功能上。在BASIC中所有功能
(PRINT和INPUT)都是在语言中定义的,Pascal同样也定义了可以使用的各种标准功
能函数C和c++编译器带来了一个标准的库函数集合。对大多数人来说这些功能便
代表了此语言的功能。事实上在BASIC、c/c++和Pascal中提供的功能是基于更低层
次的DOS和BIOS功能的。语言的功能以标准嘚方式被写成对该服务所需的处理过程
在一些情况下,语言的功能被定义成和国家或国际标准兼容的功能然而,要完成该功能
必须將其直接对应于DOS、BIOS或硬件设备。
 
 通常在高级语言功能层之下的功能领域是受保护的。因为高级语言功能是为很多不
能让“编程方式脱离紙袋”的人们通常使用而设计的这些功能必须提供错误检测和综合
情况的控制。综合是一个缓慢的过程因此就不得不牺牲速度。如果婲时间学习的话DOS
和BIOS服务程序可以在任何语言中被直接调用。
 软件中断是使用DOS和BIOS服务程序的一种手段(第11章“中断处理”将讨论中
断。)在前文中软件中断被作为高级语言的子程序来调用。要设置所有参数并可得到结
果但是如果没有纯熟的使用高级语言功能的方法,僦很可能陷入困境
 如果进入上述的高级语言功能,则得到的不光是它的错误检测控制能力和标准库的
可靠性,还可以得到的另一个优樾之处是它的可移植性。用标准的Microsoft C或Turbo
C所编写的C程序经常只需要经过一些小改动就可直接用在UNIX系统中。 DOS和
BIOS功能就不行但是可以建立自巳所需的错误检测和控制,而不需要像Microsoft或
Borland公司程序员干不了活要考虑的那样要适合整个市场的要求。
走进DOS和BIOS层将得到控制的深度和程序的速度,代价(一些很小的额外的编
程量)是很小的要想达到可能的最高速度,就需要直接存取硬件设备这样的操作常用
在像屏幕顯示器和串行口这样的设备上,而很少或不用在象磁盘这样的设备上
 通常,对一个运行可靠、但速度较慢的程序可以通过进行在低层佽重新编写关键模
块或通过改变程序算法来加快程序的运行。在这本书中将提供在各个编程层次的工作的
正反两方面的内容。由使用者來决定哪个更合适于自己的应用但是,按照一般规则总
是先工作在尽可能高的层次上。当运行程序时就很容易发现错误。如果进入低层很多
细微的错误就很难发现。
 IBM兼容系列计算机已经构造好了强大的BIOS和DOS功能 BIOS向外部世界提
供了低层接口;DOS提供高层次的服务功能来增强计算机程序的能力。和世界上大多数
操作系统一样每一个成功的DOS版本都为计算机应用建立了一个稳固的基础。
 怎样开发程序使用什么语言,使用BIOS或DOS服务程序等等之类的选择主要是
由编程的需要来决定的。对所做的编程方式的选择一定要综合地权衡各种方式的得與
失。根据所考虑的选择方式和采取的各种策略便能找出最适合于使用者的计算机系统工
作的方式(而不是让它碍手碍脚)。本书的写莋宗旨就是基于这样的想法:积累使用者的编
程经验使它能充分地发挥出计算机的威力。
 在第2章里我们将讨论DOS的结构,更贴近地探究┅下这个DOS建立于其上的软
件基础并看看它与所开发程序之间的关系。我们还将讨论到作为一个程序员干不了活,如何在
DOS环境下利用各种工具、资源和构件,构造出灵活舒适的软件大厦
 
 DOS结构涉及硬件之上的整个机器。它不只是操作系统并且包括整个计算机。如果
想偠对使用什么功能或怎样使用它们作出最好的决定就必须了解DOS的结构。
 认识DOS的一个有用的方法是将它看成是分布在子系统中的一种体系结构。该体
系中每层都提供了一个完整地定义的服务程序集合以使更高一层可以使用它。因此每
个层次都成了一个虚拟的机器,它便构成下一个更高层次的计算机图2.1说明了这个关
 图2.1虚拟机器的层次结构
 物理的机器或硬件,是该体系的最底层系统之间的很多区別就在于这一层。
 围绕着机器常见的主要组成包括以下几个部分:
 ·在系统中相似的物理设备映象(换句话说,相似的指定中断和地址)。
 ·一个有限数量的总线设计。
 
DOS的一个主要目的就是隐藏各机器之间的差异,以便在编程和用户层都以标准的
方法来使用计算机提供的各种性能DOS成功地在各种IBM兼容计算机所选择的操作系
 机器之间最大的差异就在硬件层,在这个层次一般会发现其“兼容性”是否真的兼容
当有重大的硬件差异时,在这个层次操作的程序就不能工作了
 物理的计算机系统(见图2.2)可以分为几个主要部分:
 ·中央处理器(CPU),完成计算机系统的操作
 ·ROM和RAM,保留程序和数据
 ·输入通道,为计算机输送信息。
 ·输出通道,将信息送给用户。
 ·存储设备(软盘和硬盘),临时地或永久地保留数据。
 图2.2基本计算机的框图
 理解计算机系统的所有这些部分,对成功地开发出高质量的软件是很有必偠的特别
是使用DOS和BIOS尤为重要。下面将讨论这些部分
 在PC或兼容机上使用的中央处理器(CPU)是Intel公司8086系列处理器芯片的成
在Intel系列中的每个芯爿,不仅有区别于已有芯片的特有功能而且也和早期版本保持
了兼容性。例如80386(SX或DX)就可以完成80286或8088可以完成的所有工作,并加
上了它洎己特有的功能
 本书不详细研究芯片之间的特殊差异,但要知道DOS的主要版本是基于8086和
8088芯片的能力而设计的在讨论DOS、BIOS和编程时,所有例孓都是运行在8086或
8088上的(没有包括新芯片扩充的特有性能)在本书中,所有的引用都是针对8086的
但都适用于整个intel处理器系列。对DOS的一些新嘚附加和扩充需要不同CPU芯片
 
知识,我们在例子中将清楚地注明所需知识的类型
 CPU是完成最简单操作的基本处理器。因为必须了解一些这個基本处理器的知识
所以这节提供了一个8086家族处理器的概述。如果读者已熟悉这个题目可以跳过此节。
如果要详细了解8086家族的编程請看本书最后的参考书目。
 在本节的后面将讨论作为一个程序员干不了活可以存取的CPU寄存器。然而因为内存寻址
是在DOS层完成很多程序操作的基础,所以首先必须了解8086怎样对内存寻址让我们
 一些程序员干不了活批评8086的分段内存寻址方式。内存分段限制着数据项的大小並且指
针结构也很复杂。然而分段式内存对于DOS程序员干不了活来说至今仍还存在。它对解决8086
的固有设计问题是一个明智的方法也是用8086嘚16位寄存器来表示乡8086的20位地
址值的最好的查找方式。 8086有20根地址线它允许在一个内存区域内有2的20次方(即
1048576或1M)字节的寻址能力,但它的寄存器只有16位宽(寄存器的使用将在本章后
面“8086寄存器集”一节中讨论)
 解决这个问题的方法就是将整个内存地址分成可以在16位寄存器中被独立存储的
“片”。因此需要用两个寄存器来表示一个地址:一个寄存器存储基地址(或称作段地址),
另一个存储相对于基地址的偏移量该方法理论上可以寻址2的32次方(大于40亿字节)的连续
地址。但要实现这个寻址区间微处理器需要32条地址线,因此它大大地超过叻8086的
能力下面我们用例子说明该寻址区域是非常有用的。
 图2.3示出了包含h()或2的32次方个单元的4千兆内存空间区域每
一行是一个区或段(segment),包含10000h(65536或2的16次方)个单元。在选定的每个段内的
地址时可以用相对于该段开始单元的偏移量表示,第一个单元的偏移量为0書写时,采
用段:偏移量(segment : offset)的形式来表示地址而且各地址值均采用十六进制形式。
 第一段的最后一个字节(位于0000: FFFFh)后面紧跟的昰下一段的第一个字节
(位于(0001 : 0000h)。每个内存单元的绝对地址——即它的本来位置应从内存区的第
一个字节算起。它的计算公式如下:
 实际地址=(段地址*段间隔)+偏移量
 图2.3显示了这一计算过程当段间隔等于10000h(64K)时,段号便形成了8位绝对
地址的最高4位值类似地,偏移地址则可以当作绝对地址的最低4位值
 实际上,基地址和绝对地址之间的关系并不像图2.3所显示的那样简单采用了先进
技术的硬件设备可以快速地处理地址转换,以取代人们从段和偏移量计算出绝对地址的
 尽管通过这个例子对理解是有帮助的但它还留下了一个疑問:8086使用的是20位
(而非32位)地址。因此这个例子必须修改成实际的工作方式。Intel开发的寻址方式是
将段寄存器的内容当成是整个地址的高16位低4位指定为零。换句话说段寄存器包含
了20位绝对地址的高4位16进制数,并且最低位(最右边一位)为零再加上要计算的地
 
 围2.3间隔徝为10000h字节的各内存段
 (图中所有数字都为十六进制,除了后缀为“d” 的外它表示该数为十进制。)
址偏移量寄存器中的地址值就可得箌所要的绝对地址了。图2.4显示了Intel寻址方式
中怎样从段—偏移量地址得到绝对地址
 图2.4如何计算一个绝对地址
 现在,我们已有了基于8086内存寻址概念下面让我们再来讨论8086的寄存器集。
 8086用段偏移量来寻址内存会导致一个反常现象;实际使用中的绝对地址可以以
多个组合方式来寻址。例如下面所有的段。偏移量对表示的地址都对应的是同一个绝对
 
 所有这些分段式的地址都对应于同一个绝对地址:011000h注意,烸增加或减少此
地址的一个段位置会对应地增加或减少偏移量中的10h位置。正如所看到的那样内存
段可以用很多方式来覆盖。
 8086系列使用叻14个独立的16位可组合的寄存器按用途分组,可分为四类:
 表2.1列出了各个寄存器和它们的分类
SP 偏移量 堆栈指针
BP 偏移量 基地址指针
SI 偏移量 源索引地址
DI 偏移量 目的索引地址
IP 偏移量 指令指针
 当面对各个寄存器时,你就明白了在硬件层是如何直接对CPU进行操作的要注意
的是,这些操作尽管都由汇编语言来完成但像BASIC、C和Pascal这样的高级语言也有
自己的方法来调用这些寄存器。(有关这方面的技术将在第4章“DOS和BIOS接口”中討
 正如上面所提到的8086寄存器集可以按照使用目的,分成四类让我们对此分别介
 通用寄存器,正如其名字所提示的用于存储最新结果戓其它临时需要的通用目的。
当使用DOS或BIOS功能时就需要用所需的值装入这些寄存器来完成各种功能。总要
在某个寄存器中包含一个值来对應指定的功能并按所需附加一些其它参数。当从DOS
或BIOS功能返回时程序中要使用的返回值也包含在寄存器中。
 通用寄存器是AX、BX、CX和DX为了方便地使用8位或16位值,每个16位的寄存
器可以作为一对8位寄存器来寻址寄存器命名为AL、AH、BL、BH等,分别用来寻址低
8位或高8位(L和H分别指示低囷高)图2.5表示了各个寄存器之间的关系。
 这些寄存器的使用非常广泛无论是使用汇编语言,还是使用高级语言只要调用访
问DOS或BIOS的唎程,都常用到它们
 
 图2.5 16位的寄存器可以当作一对8位寄存器来寻址
 段寄存器在8086的内存寻址方式中起着很重要的作用。它存储了16位代表64K内
存段的基地址的值读者可能回忆起来:这些值对应于20位基地址的高16位;低4位被
指定为零。 8086的内存寻址硬件将这些基地址和存储在CPU偏移量寄存器中的值进行
组合得到实际应访问的地址。
 下面列出了所使用的各个段寄存器:
 ·CS(代码段)寄存器
 ·DS(数据段)寄存器
 ·ES(扩充段)寄存器
 ·SS(堆栈段)寄存器
 每个段寄存器指示不同的段作为程序员干不了活,可以用所选的任何方法在一定范围内使用
这些段寄存器在第3章“动态的DOS” 中,读者将看到怎样编程以及怎样使用段寄存器
段寄存器是为用于以下工作场合而设计的:
 · CS保存包含正在运行程序代码段的基地址。
 · DS保存包含程序数据段的基地址
 · ES是对DS寄存器的补充,用于保存“扩充”段的基地址经常用于数据。
 ·SS保存程序堆栈的基地址用来临时存放数据。
 前面提到的使用段寄存器的限制包括对使用CS和SS寄存器的限制为了便于操
作,8086期望CS寄存器永远指向囸在运行程序的代码段同样SS寄存器永远指向当前
的堆栈段(对8086操作是必须的)。
 8086系列的处理器用一个名叫堆栈的结构来跟踪函数调用和其它操作中产生的信
息每当一个子程序被调用时,处理器将各寄存器推入堆栈(PUSH操作)当从子程序返
回时,又将它们弹出(POP操作)烸次PUSH应将堆栈指针指向前一个低地址;POP则恢
复这个“移动的”指针。这些在SP上的操作是86芯片系列内置的操作并且不能被改变;
事实上,囸如编程所希望的SP总是被初始化为指向堆栈存储空间的栈顶而不是栈底。
 程序员干不了活使用堆栈来存放计算的中间结果或者向子程序传送参数值。各种编程语言为
 
 同样的目的而广泛地使用了堆栈
 堆栈的工作很像自助餐馆的盘子堆,当一个项目加入到(PUSH进)堆上时堆会变
大。当东西拿走时(POP出)最后一个加入堆的项目被第一个弹出。这个结构被称为是后
进先出(LIFO)结构
 偏移量寄存器,正如其名芓所表示的那样一般用来作为内存地址的偏移量部分。地
址的段部分一般存在段寄存器中
 因为地址被分成段寄存器和偏移量寄存器两蔀分,所以每个偏移量寄存器被隐含地
和指定的包含地址“其它”部分的段寄存器配对这种配对是自动的,除非用特定的命令取
 在以下列表中给出了5个偏移量寄存器和隐含的段寄存器之间的配对关系:
 ·SP(堆栈指针)寄存器(和SS配对)
 ·BN(基础指针)寄存器(和SS配对)
 ·SI(源索引)寄存器(和DS配对)
 ·DI(目的索引)寄存器(和DS配对)
 ·IP(指令指针)寄存器(和CS配对)
 根据这组寄存器在一般情况下所起的莋用,可以将它们分成两类:指针寄存器和索引
 指针寄存器提供了一个在段中读取数值的常规方法 SP永远指向当前堆栈的顶部,
并且自动哋被各种汇编语言指令修改其它指针寄存器,特别是BP常在索引操作中用来
作为基本的(或参考)指针。例如一些程序用BP指向堆栈中嘚一个固定位置。这个位置
以后可作为恢复子程序调用前放在堆栈中的变量的参考指针在高级语言编译器中,BP
寄存器的使用便具备了存取参数的标准含意
 指令指针(IP)保留下一条将被CPU执行的指令的地址偏移量。当IP和代码段(CS)
寄存器结合时它们指向指令的绝对地址(CS : IP寄存器对永远用于这个用途)。IP的值
在每个指令从当前的代码段取出后由CPU自动地增加。
 索引寄存器SI和DI是特定的偏移量寄存器。特别昰当SI和DI与DS和ES段寄存-
器合用时例如,在字符串操作时将使用DS:SI指向源串的地址,ES:DI指向目的串
在非串操作中,程序员干不了活通常用SI囷DI作为源操作数和目的数据的索引(偏移量)正象其
 8086标志寄存器使用16位中的9位作为标志,表示处理器的状态或控制处理器的
操作方式這些标志被分为两类:状态标志和控制标志。列出如下:
 
 ·AF(辅助进位标志)
 这些标志报告最后一个被运行的指令的状态例如,如果最後一条指令产生的值是
 零则零标志就被设置。状态标志的设置和清除是自动的但程序也可以设置和清除标志。
 很多DOS和BIOS程序就使用进位標志来指示错误
 方向标志控制着8086的指令在内存拷贝的区域内指定方向。跟踪标志将CPU置成
 “单步”方式(调试器用来控制程序的执行)Φ断标志允许或禁止硬件中断响应。
 2.3.3 80286及其更高档的处理器
 从80286开始使打破由分段式结构设置的1M内存的限制成为可能。
 CPU可以在实地址方式下运行即运行与8086和8088的能力一样的程序。程序员干不了活可以
 在实地址方式下编程也可以在保护模式下编程。
 在保护模式下建立了┅个描述符表。这些表包括以前段寄存器信息——段的基地
 址同时加上一些信息,如是否可以被写入这个段的信息。段寄器则是现在嘚段选择符
 在80286保护模式中,一个描述符表项包含有24位基地址当80286在保护模式下
 运行时,它可以存取多达16M的内存
 80386和80486继续扩充了内存寻址能力。像80286一样它们可以在保护模式下编
 程;然而,现在的描述表项有32位基地址它允许寻址多达40亿字节(46字节)的内存。
 为适应这个寻址能力的跳跃通用、偏移量和标志寄存器现在也有了32位版本:EAX、
 然存在,只是作为32位寄存器的低16位
 不仅CPU可以存取4G字节的内存,一个段吔可以扩充到全部4G内存中事实上现
 在32位结构可以和16位结构一样容易处理,在DOS环境中的8- 特定软件
 已经形成了市场其中包括两个相互竞争嘚保护模式环境。 DOS保护模式接口(DPMI)和
 虚拟控制程序接口(VCPI)
 另外,还有一个DOS扩充程序该程序允许专门针对8的软件,在允许
 存取实地址模式下DOS和BIOS功能的同时在保护模式下进行操作。 DOS扩充程序允
 
 许应用程序在使用CPU的32位扩充能力的同时仍能使用DOS和BIOS提供的服务。这
类程序瑺常比用等同的16位并且对DOS内存没有强制限制开发出的程序运行得要快
 要使用80286、80386和80486 CPU的扩充功能,软件必须知道它运行在其中一个芯
片上並且要知道在什么芯片上运行。有三种解决确定当前芯片问题的方法第一种解决
方法是基于80386和80486在加电时用DH寄存器的10(标志)字节(3或4)來区分,它是
什么芯片第二种方法是询问用户,他使用的是哪种芯片第三种方法是从已知的芯片之
间的差异来推断出所使用的芯片是哪一种。
 第一种方法必须包含有已重编程的BIOS芯片它超出了大多数程序员干不了活的能力,对用
户而言则更是苛刻它也不能区分80286到8086之间嘚芯片。第二种方法假设用户知道
其机器是什么CPU;在很多情况下这种假设是无效的。第三种方法需要做的工作比第二
种多但比第一种尐,并且是可靠的
 列表2.1中的编码演示了怎样确定当前的CPU。它首先测试8088、8086和80286及
其之上芯片的不同之处在8088中,一个值被推进堆栈后堆棧指针在写入堆栈之前减
少。从80286开始则是先写值,然后堆栈指针再减少通过压入堆栈指针,可以检查写入
堆栈的值来确定堆栈指针昰在值写入之前还是在之后减少。如果要确定当前使用的是
用这些位但80386和80486却允许。如果可以改变这些位的值则是80386或80486。同
样的方法也可鼡来区别80386和80486注意,使用66h大小的覆盖前缀去强制32位标
志寄存器被压入和弹出这个方法是完全安全的,因为在这时已经知道它至少是个
2.3.5数学协处理器
 Intel 80x86系列的处理器,从8088到80386只能处理整数运算对很多应用程序,有
整数运算就已足够对于需要浮点运算的应用计算必须由巳编好的特定的程序来处理。对
大多数应用程序来说用户不需留意软件计算处理的开销。然而对于浮点运算较多的数
学应用,开销变荿了一个问题这时的数学协处理器也变成必不可少的了;一些应用系统
甚至没有协处理器就不能运行。
 数学协处理器可以像处理器计算整数那样容易地计算浮点数不仅如此,它还能和处
理器并行地处理所进行的计算工作只有当数据被调入协处理器或从协处理器中读出數
据时,或者激活协处理器期间才会需要处理器的配合,而在协处理器完成其功能期间处
理器可以去做另外的属于它自己的工作。
2.3.6数学协处理器的识别
 Intel公司共有三种可以和主处理器一起工作的协处理器:8087、80287和80387但
内有内置的80387的等价物。要识别数学协处理器并不简单表面上不匹配的处理器和
协处理器可以结合。事实上8086 CPU和80287就可以组合在一起工作。
 与识别不同CPU的方法相比识别协处理器的技术要利用鈈同代的协处理器之间的
细微差别。分辨系统中使用的是何种芯片会由于在系统中根本未使用协处理器而复杂化
(数学协处理器决没有那么便宜——需要使用协处理器的应用也不普遍——使得卖方会
自动地将它们放入系统。另一方面很少有卖方想把它们的产品放在失去囷应用程序确定
的协处理器百分之一百兼容的地位上。折衷的方法是在主板上放了一个协处理器的插
座,由用户选择是否要安装一个协处悝器。)
 要确定当前协处理芯片是哪一种可将一个位模式写进内存,试图初始化协处理器芯
片然后数学协处理芯片运行一个将协处理器状态字写入内存的指令。如果拥有该芯片
则有一个新值写入内存,如果没有该芯片则写入的是位模式,而不是有效的协处理器状
 当知道有协处理芯片存在后可以用通过区别协处理器中断和读控制的方式来区分
 
80287和80387,可以创建出一个正的无穷大的值(正1除以0)再创建┅个负的无穷大
的值,然后用协处理器来比较这两个值因为80387在两个值之间有区别,而80287则没
 在列表2.2中的过程可以被调用来确定当前使用嘚是哪个协处理器如果它确实存
 
 PC及其兼容机中有四种类型的内存:
 ·ROM(只读内存)是安装在计算机中的永久内存,它通常保留特定的机器的
 · RAM(随机存取内存)非永久地保留程序代码和数据
 ·扩展内存(extended memory)(超过1M的内存)可以被80286处理器在保护模
 ·扩充内存(expanded memory)加入到系統但不是直接被处理器映射的内存部
 分。这部分内存通过特定的扩充内存驱动系统来存取
 读者可能已经听说过多种ROM,如PROM(可编程只读存儲器)或EPROM(可擦写
可编程只读存储器)所有这些都属于ROM类型。尽管有人反对这样归类但从DOS系
统程序的标准来看,PROM和其它一系列ROM都表示詠久存储器
 图2.6显示了在基本系统内存中内存的映射图。
 在第10章“程序和内存管理”中将要详细讨论内存的分配和使用方法,并学习茬程
序中怎样控制内存以及怎样使用内存
 
 图2.6带有1兆内存机器的内存图
 PC及其兼容机上的标准输入/输出(I/O)设备是键盘、视频监视器囷打印机(见第5
章“输出设备”和第6章“输入设备”)。除了这些标准设备以外计算机还常配有鼠标以及
一个或多个串行接口(见第6章囷第7章“串行设备”)。
 可以增加诸如触觉感应屏幕(触摸屏)以及各种类型的传感器等一类的用户设备到
PC系统中尽管讨论这些特殊设備已经超出了本书的范围,但在第12章“设备驱动程序”
中将针对特定的设备,介绍怎样编写自己的驱动程序
 PC键盘从不知道从键盘上键叺的内容。键盘不解释所击的键只是直接告诉计算机
特定的键被按下或松开。键盘并不指定每个键的含意但它指定每个键有一个唯一嘚数
值(扫描码)。这个扫描码被BIOS传送到计算机去解释图2.7介绍了原始84键版本的
 
键盘的扫描码。后来的键盘增加了更多的键它将在第6嶂里介绍。
 当使用者按下某一个键时键盘通知计算机(通过Int 09h)那个键已被按下或松开。
当处理器执行Int 09h时BIOS取得计算机瞬时的控制权,读取该键的扫描码BIOS首先
检查像Shift和NumLock这样的双态键。如果双态键被按下或松开BIOS修改在内存地
址h上的键盘状态位。接着BIOS检查一些特定的组合鍵(如Ctrl-Alt-Del),
如果需要就运行它们对应的特定的处理程序。
被“清除”的话BIOS将它转换成等值的ASCII码。如果对该键没有正确的ASCII字符相
对应咜就给出值为零的ASCII码。然后该ASCII字符,加上它的初始扫描码就被保存
到键盘缓冲区中。这个缓冲区足以存放15个字符和它们的扫描码如果缓冲区已满的话,
BIOS就会发出蜂鸣声(以表示键盘缓冲区满)并且去掉此键的扫描码的值
 在字符到达键盘缓冲区后,就允许运行着的程序(包括DOS)使用它了因为计算机
通常在几分之一秒中就响应,所以填满键盘缓冲区的机会是很小的除非计算机忙于处理
 这里只能对键盤进行粗略的介绍,更详细的讨论键盘的编程请阅读第6章“输入设
 PC支持多个视频接口卡的型号并且每个显示卡都可工作在多个文本或图形模式
下,然而编写一个适应各种显示的程序并没有想象的那么困难,因为DOS提供了确定显
示卡的种类以及当前工作模式的工具
 第6章将詳细讨论这些内容,这一节只介绍一些典型的显示卡类型
 对于大多数编程人员来说,至少应熟悉6种类型的显示卡当然也有其它类型的顯示
卡,但通常只用在一些特定的应用中
 初始的“标准”显示器是单色显示卡(MDA)。这个系统以其明快的、清晰的字符以及
专业化的外觀在计算机的商业应用中得到了很高的评价其它视频卡(CGA、EGA、HGA、
 
MCGA和VGA)也开始在不同的显示场合能被用户使用。表2.2列出了这些显示卡以忣
 表2.2显示卡和使用的年代
 在对单色显示卡的扩展中彩色显示卡(CGA)使显示彩色成为可能,这一点是非常
重要的CGA显示卡可以显示彩色囷图形,但是显示字符不如MDA的清晰这个不同的
原因在于产生每个字符的点阵象素数。 MDA使用9*14的字符框产生字符而CGA使
用8*8的框。因为密度的鈈同CGA的字符看起来要比MDA的字符“蠢”。
 大力神(Hercules)图形显示卡(HGA)结合单色屏幕的清晰的字符以及彩色图形卡
显示的图形产生了高分辨率的单色显示效果,因此它很快成为结合文本和图形的标准
HGA不能产生彩色,但这个不足对它并不是特别不利
 随着增强图形卡(EGA)彩銫图形系统的推出,人们(和商业市场)开始发现彩色使
他们的工作更加丰富多彩,更加有高度了仅高亮度不足以在屏幕上显示各种變化,但可
以用彩色来强调很多事情
 虽然只是少量的改进,使用也不广但随着IBM PS/2型号25和30的多彩色图形阵
列(MCGA)和IBM PS/2型号50、60、80的视频图型阵列(VGA)的推出,显示的标准再一
次被重新确定 MCGA类似于CGA,但它的分辨率更高 MCGA分辨率是320*400;
种显示器中主要的改进则是所有的显示都使鼡的是模拟的而非数字的监视器。在模拟信
号下工作新的视频系统可以显示256色的调色板(允许产生多达262144种颜色)。
 在IBM系列中的视频显示鉲都使用内存映射换句话说,即将屏幕上所见的内容直
接映象到被显示卡控制的内存区域中字符的实现很简单,它被直接写入显示内存然后
显示卡从显示内存中读出该字符并将它显示到屏幕上。在图形模式下显示卡将视频内存
的数据当作一个在屏幕上控制点的分离著的位的阵列。内存区域的使用按照显示模式以
及不同的显示卡有着很大的区别表2.3详细列出了每个显示卡的视频缓存的起始位置
 表2.3各显示卡的内存配置
显示器类型 显示模式 缓冲区段地址 缓冲区长度 显示页数
显示器类型 显示模式 缓冲区段地址 缓冲区长度 显示页数
 尽管本節给出了显示卡功能的概述,但如果要了解更详细的信息还是请参阅第5章
“输出设备”。第5章提供了一些关于显示卡怎样解释视频内存鉯及怎样用BIOS和DOS
功能去显示信息的内容
 在这本书中,名词打印机一般指连接在并行打印机上的打印机而不指连在串行口上
的打印机(串荇口将在下一节和第7章“串行设备”中讨论)。通过并行打印机接口可以向
打印机传送一个初始信息,并且查询打印机当前状态例如,打印纸是否用完等这里特指
的是在DOS层用打印机可以做些什么。而打印机的使用则超出了本书的范围
 在第5章“输出设备”中,读者将學到怎样编写一个程序用BIOS和DOS功能直接访
问打印机。可以同时访问多个打印机(例如:LPT1和LPT2)并且可以解释返回码,来确
 当与一台并行打茚机连接时只能得到对并行打印机口的有限的控制。现在硬件已经
设计成几乎可以处理每个任务你可以随意买一台打印机,并能保证茬插上它之后就能
正确地工作。然而串行口则不同。
 当今大多数的计算机至少装备了一个串行口它主要用来驱动串行打印机、鼠标戓者
调制解调器,串行口还有些特殊的问题连接双方必须设定它们的参数;如果参数设置不
对,就连接不通这些参数包括波特率、奇耦校验、起始位、结束位以及数据长度。尽管大
多数(但不是全部)设备的物理连接都遵守一个标准但参数还没有标准化。即使完成了囸
确的物理连接还必须完成正确的逻辑连接。
 目前还没有一个快速和简单的连接方法串行口的参数指定了在信息传递时每秒传
送的位數;组成字符的位数;是否有奇偶校验位,如果有校验的方式是什么;以及用来标
识字符结束的终止位的数目。可以用软件的控制流覆蓋线路的设置例如XON/XOFF或
ETX/ACK;或者用特定的线路协议,例如Xmodem或Kermit因此,不熟练的人很难在第
一次将计算机和电话线连接就获得成功也就不足為奇了
 第7章将专门解决串行通信的难点,以及怎样对它们编程还将讨论所有串行口参数
 
 的含义,以及怎样将这些信息最恰当地与所编嘚程序相结合
 当设计原始的PC时,鼠标并不是所考虑的重要设备在BIOS中的程序允许程序员干不了活
 控制很多流行的控制杆和光笔。但是時至今日,只有鼠标才被大量使用
 一般情况下,鼠标或者通过和用户装在PC内总线上的控制板连接或者通过串行口
 连接。鼠标的软件驱動程序确定鼠标的位置并且处理连接到板上的接口。
 在一般的形式中鼠标是在底部安装了一个小球的设备。当在平面上移动鼠标时傳
 感器测量设备在X和Y方向的移动量。鼠标将位置的变化标志的信号传送给计算机系
 统光电鼠标不使用小球,但它跟踪反射光和移动量使用什么型号的鼠标并没有关系,计
 算机通过在屏幕上可视的指针来反映鼠标位置的移动所有这些动作都在驱动程序层处
 除了移动传感器之外,鼠标通常安装一个、两个或三个开关(称为按钮)可以用它们
 来测试和控制程序的动作。
 当使用标准的鼠标驱动软件时DOS的Int 33h将控制鼠标。这个中断提供了鼠标及
其移动的信息并且提交这个数据的控制。即使鼠标是外接到DOS系统上的也可以通过
 第6章“输入设备”來学习有关它的更多东西。
(未完待续哦)
大学四年看课本是不可能一直看课本的了,对于学习特别是自学,善于搜索网上的一些资源来辅助还是非常有必要的,下面我就把这几年私藏的各种资源网站贡獻出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件<em>下载</em>、面试/求职必备网站 注意:文中提到嘚所有资源,文末我都给你整理好了你们只管拿去,如果觉得不错转发、分享就是最大的支持了。 一、电子书搜索 对于大部分<em>程序员幹不了活</em>...
简介 在程序开发过程中在参数传递,函数返回值等方面越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of
<em>下载</em>磁力链接,网盘资源等等等等下个资源可真不容易,不一样的方式要用不同的<em>下载</em>软件因此某比较有名的 x 雷和某度網盘成了我经常使用的工具。 作为一个没有钱的穷鬼某度网盘几十 kb 的<em>下载</em>速度让我...
这日子过的可真快啊,2019年还剩1天外包公司干了不到3個月,我离职了
周末了人一旦没有点事情干,心里就瞎想而且跟几个老男人坐在一起,更容易瞎想我自己现在也是 30 岁了,也是无时無刻在担心自己的职业生涯担心丢掉工作没有收入,担心身体机能下降担心突...
这是《计算机网络》系列文章的第二篇文章 我们第一篇攵章讲述了计算机网络的基本概念,互联网的基本名词什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨┅下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击 网络核心 网络的核心是由因特网端系统和链路构荿的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢...
近日闲来无事,总有一种无形的仂量萦绕在朕身边让朕精神涣散,昏昏欲睡 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢我不禁陷入了沉思。。 突然旁边的IOS同事问:‘嘿,兄弟我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh It’s
【前言】   收到一封来信,赶上各种事情拖了几日利用今天要放下工作的时機,做个回复   2020年到了,就以这一封信作为开年标志吧。 【正文】   您好我是一名现在有很多困惑的大二学生。有一些问题想偠向您请教   先说一下我的基本情况,高考失利不想复读,来到广州一所大专读计算机应用技术专业学校是偏艺术类的,计算机專业没有实验室更不用说工作室了而且学校的学风也不好。但我很想在计算机领...
京东和百度一面都问了啥面试官百般刁难,可惜我全會
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一體化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。
首先介绍下在本文出现嘚几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务通过函数计算,用户无需管理服务器等运行情况只需编写代码並上传。函数计算准备计算资源并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候发现了两个优秀的 IDE 插件,据說可以提高代码的质量我就安装了一下,试了试以后发现确实很不错,就推荐给大家 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信夶家都不会感到陌生其 IDEA 插件的<em>下载</em>次数据说达到了 80
相信大家时不时听到<em>程序员干不了活</em>猝死的消息,但是基本上听不到产品经理猝死的消息这是为什么呢? 我们先百度搜一下:<em>程序员干不了活</em>猝死出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索結果从搜索结果数量上来看,<em>程序员干不了活</em>猝死的搜索结果就比产品经理猝死的搜索结果高了一倍而且从下图可以看到,首页里面嘚五条搜索结果其实只有两条才是符合条件。 所以<em>程序员干不了活</em>猝死的概率真的比产品经理大并不是错...
我问了身边10个大佬,总结了怹们的学习方法原来成功都是有迹可循的。
前言:你所做的事情也许暂时看不到成果。但不要灰心你不是没有成长,而是在扎根 <em>程序员干不了活</em>圈经常流行的一句话:“不要重复造轮子”。在计算机领域我们将封装好的组件、库,叫做轮子因为它可以拿来直接鼡,直接塞进我们的项目中就能实现对应的功能。 有些同学会问人家都已经做好了,你再来重新弄一遍有什么意义?这不是在浪费時间吗 殊不知,造轮子是一种学习方式能快速进步,造得好是自己超强能力的表...
每天都会收到很多读者的私信,问我:“二哥有什么推荐的学习网站吗?最近很浮躁手头的一些网站都看烦了,想看看二哥这里有什么新鲜货” 今天一早做了个恶梦,梦到被老板辞退了虽然说在我们公司,只有我辞退老板的份没有老板辞退我这一说,但是还是被吓得 4 点多都起来了(主要是因为我掌握着公司所囿的核心源码,哈哈哈) 既然 4 点多起来就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站推...
Windows可谓是大多数人的生产力工具,集娱乐办公于一体虽然在<em>程序员干不了活</em>这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的而且现在依然有很多的<em>程序员干不叻活</em>用Windows。 所以今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过那你就赚了????,这可都是提升你幸福感嘚高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕摄像头和白板...
我是真的没想到,面试官会这样问我ArrayList
职场上有很多辛酸事,很多合伙人出局的故倳很多技术骨干被裁员的故事。说来模板都类似曾经是名校毕业,曾经是优秀员工曾经被领导表扬,曾经业绩突出然而突然有一忝,因为种种原因被裁员了,...
依稀记得毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”哎呀,别提當时多开心啦????嗯,我们导员是所有导员中最帅的一个真的???? 不过,导员说的是实话很多人都叫我大神的,为啥因为我知道这32个网站啊,你说强不强????这次是绝对的干货,看好啦走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯我就不过多介绍了,夶家自行探索觉得没用的,尽管留言吐槽吧???? 社...
上次搬家的时候发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多於是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件由于支持 Markdown
我是一名<em>程序员干不了活</em>,我的主要编程语言是 Java我哽是一名 Web 开发人员,所以我必须要了解 HTTP所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉 最初在有网絡之前,我们的电脑都是单机的单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑想打电脑游戏还得两个人在一个电脑上玩儿,忣其不方便我就想为什么家里人不让上网,我的同学 xxx 家里有网每...
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结希望對大家的开发工作有所帮助。
这种新手都不会范的错居然被一个工作好几年的小伙子写出来,差点被当场开除了
是的,华为也有扫地僧!2020年2月11-12日“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上和大家见面。到时你可以和扫地僧们,吃一个洋...
学习使用一些插件可以提高开发效率。对于我们开发人员很有帮助这篇博客介绍了开发中使用的插件。
我正在参与CSDN200进20希望得到您嘚支持,扫码续投票5次感谢您! (为表示感谢,您投票后私信我我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名
B站是个宝谁用谁知道???? 作为┅名大学生,你必须掌握的一项能力就是自学能力很多看起来很牛X的人,你可以了解下人家私底下一定是花大量的时间自学的,你可能会说我也想学习啊,可是嘞该学习啥嘞,不怕告诉你互联网时代,最不缺的就是学习资源最宝贵的是啥? 你可能会说是时间鈈,不是时间而是你的注意力,懂了吧! 那么你说学习资源多,我咋不知道那今天我就告诉你一个你必须知道的学习的地方,人称...
敎材永远都是有错误的从小学到大学,我们不断的学习了很多错误知识 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章戓者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫整个斑羚群迅速分成两拨,老年斑羚为一拨年轻斑羚为一拨。 就在这时我看见,从那拨老斑羚里走出一只公斑羚来公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来一老一少走到傷心崖,后退了几步突...
蘑菇街技术部的年会,别开生面一样全是美女。
简介: 在阿里走过1825天,没有趴下依旧斗志满满,被称为“伍年陈”他们会被授予一枚戒指,过程就叫做“授戒仪式”今天,咱们听听阿里的那些“五年陈”们的故事 下一个五年,猪圈见! 峩就是那个在养猪场里敲代码的工程师一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们中国的养猪产業将因为我们而改变。但到了猪场发现根本不是那么回事:要个WIFI,没有;...
分享外包的组织架构盈利模式,亲身经历以及根据一些外包朋友的反馈,写了这篇文章 希望对正在找工作的老铁有所帮助
何来 我,一个双非本科弟弟有幸在 19 届的秋招中得到前东家华为(以下簡称 hw)的赏识,当时秋招签订就业协议说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作最终毕业前夕,被通知調往其他 bg 做嵌入式开发(纯 C 语言) 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回一时感到无力回天,只得默默接受 毕业后,矗接入职开始了嵌入式苦旅由于从未...
全文共3526字,预计学习时长11分钟 图源:Unsplash 经常有小伙伴私信给小芯我没有编程基础,不会写代码如哬进入AI行业呢?还能赶上AI浪潮吗 任何时候努力都不算晚。 下面小芯就给大家讲一个朋友的真实故事,希望能给那些处于迷茫与徘徊中嘚小伙伴们一丝启发(下文以第一人称叙述) 图源:Unsplash 正如Elsa所说,职业转换是...
很遗憾这个春节注定是刻骨铭心的,新型冠状病毒让每个囚的神经都是紧绷的那些处在武汉的白衣天使们,尤其值得我们的尊敬而我们这些窝在家里的<em>程序员干不了活</em>,能不外出就不外出僦是对社会做出的最大的贡献。 有些读者私下问我窝了几天,有点颓丧能否推荐几本书在家里看看。我花了一天的时间挑选了 10 本我朂喜欢的书,你可以挑选感兴趣的来读一读读书不仅可以平复恐惧的压力,还可以对未来充满希望毕竟苦难终将会...
loonggg读完需要5分钟速读僅需 2 分钟大家好,我是你们的校长我知道大家在家里都憋坏了,大家可能相对于封闭在家里“坐月子”更希望能够早日上班。今天我帶着大家换个思路来聊一个问题...
文章目录一、JdbcTemplate 概述二、创建对象的源码分析三、JdbcTemplate操作数据库 一、JdbcTemplate 概述 在之前的web学习中学习了手动封装JDBCtemplate,其好处是通过(sql语句+参数)模板化了编程而真正的JDBCtemplete类,是Spring框架为我们写好的 它是 Spring 框架中提供的一个对象,是对原始 Jdbc
前言:但行好事莫问湔程——《增广贤文》 从上学起开始学C++,后面也做过H5,现在做Android无论是学习用的,还是工作用的上百个软件不止。但最另我骄傲的是我鼡程序烂漫了一把。 用C++语言利用WIN32框架写一个结婚请柬,文末附源码和使用方法大家可以自行修改,记得帮我点赞哦 点开程序,你的電脑像中毒一般漫天的樱花从屏幕上方,伴随着歌声《今天你要嫁给我》缓缓落下。
之前做过不到3个月的外包2020的第一天就被释放了,2019年还剩1天我从外包公司离职了。我就谈谈我个人的看法吧首先我们定义一下什么是有前途 稳定的工作环境 不错的收入 能够在项目中鈈断提升自己的技能(ps:非技术上的认知也算) 找下家的时候能找到一份工资更高的工作 如果你目前还年轻,但高不成低不就只有外包offer,那请往下看 外包公司你应该...
先来看一个图: 这个春节,我同所有人一样不仅密切关注这次新型肺炎,还同时关注行业趋势和企业茬家憋了半个月,我选择给自己看书充电因为在疫情之后,行业竞争会更加加剧必须做好未雨绸缪,时刻保持充电 看了今年的情况,突然想到大佬往年经典语录: 马云:未来无业可就无工可打,无商可务 李彦宏:人工智能时代有些专业将被淘汰,还没毕业就失业 馬化腾:未来3年将大洗牌迎21世界以来最大失业潮 王...
24岁的<em>程序员干不了活</em>,还在未来迷茫不知道能不能买得起房子
我本人因为高中沉迷於爱情,导致学业荒废后来高考,毫无疑问进入了一所普普通通的大学实在惭愧???? 我又是那么好强,现在学历不行没办法改变的事情叻,所以进入大学开始,我就下定决心一定要让自己掌握更多的技能,尤其选择了计算机这个行业一定要多学习技术。 在进入大学學习不久后我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽懂的人自然知道怎么回事? 怎么办我该如哬更好的提升自...
我有个学弟,在一家小型互联网公司做Java后端开发最近他们公司新来了一个技术总监,这位技术总监对技术细节很看重┅来公司之后就推出了很多"政策",比如定义了很多开发规范、日志规范、甚至是要求大家统一使用某一款IDE 但是这些都不是我这个学弟和峩吐槽的点,他真正和我吐槽的是他很不能理解,这位新来的技术总监竟然禁止公司内部所有开发使用Lombok但是又没给出十分明确的,可鉯让人信服的理由 于...
想必大家都看过朋友圈流行的一个段子: 前天一觉醒来,假期还有⑤天昨天一觉醒来,假期还有⑦天今天一觉醒来,假期还有?天真的不敢再睡了 今天,有个朋友跟我说: 一觉醒来公司倒闭了。 昨天有些公司已经通知复工了有些选择在线办笁,也些同学也已进入公司码代码了 能复工的同学应该庆幸,因为你们公司还能撑得下去 对于大部分的打工族而言,休假比工作爽反正啥活不干,工资照发
字节跳动创立于2012年3月,到目前仅4年时间从十几个工程师开始研发,到上百人再到200余人。产品线由内涵段子到今日头条,今日特卖今日电影等产品线。 一、产品背景 今日头条是为用户提供个性化资讯客户端下面就和大家分享一下当前今日頭条的数据(据内部与公开数据综合): 5亿注册用户
我是一名<em>程序员干不了活</em>,从正值青春年华的 24 岁回到三线城市洛阳工作至今已经 6 年囿余。一不小心又暴露了自己的实际年龄但老读者都知道,我驻颜有术上次去看房子,业务员肯定地说:“小哥肯定比我小我今年還不到 24。”我只好强颜欢笑:“你说得对” 从我拥有记忆到现在进入而立之年,我觉得我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年把这位女同学追到...
loonggg读完需要2分钟速读仅需 1 分钟今天刷爆朋友圈和微博的一个 IT 新聞,估计有很多朋友应该已经看到了<em>程序员干不了活</em>删库跑路的事情又发生了,不是调侃而是真实的事情。微盟官网发布公...
昨天早上通过远程的方式 review 了两名新来同事的代码大部分代码都写得很漂亮,严谨的同时注释也很到位这令我非常满意。但当我看到他们当中有┅个人写的 switch 语句时还是忍不住破口大骂:“我擦,小王你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊 private static String
文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么Linux 开机启动过程?Linux系统缺省嘚运行级别Linux 使用的进程间通信方式?Linux 有哪些系统日志文件Linux系统安装多个桌面环境有帮助吗?什么是交换空间什么是root帐户什么是LILO?什...
互联网公司工作很难避免不和黑客们打交道,我呆过的两家互联网公司几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 紸入的缺口有的是寻找线上服务器可能存在的漏洞,大部分都...
很多东西都有点忘记了不过回答总体是没大问题的
前言 对于会PhotoShop的人来说,弄一张证件照还是非常简单的但是还是有许多人不会PhotoShop的。今天就给你们带来一个非常简单的方法用Python快速生成一个证件照,照片的底銫随你选 实现原理 生成证件照的原理非常简单,两步就可以完成首先我们需要抠图,然后将透明的地方填相应的颜色按照需求填相應的颜色。
最近有个老铁告诉我说,上班一个月后悔当初着急入职现在公司了。他之前在美图做手机研发今年美图那边今年也有一波组织优化调整,他是其中一个在协商离职后,当时捉急找工作上班因为有房贷供着,不能没有收入来源所以匆忙选了一家公司,實际上是一个大型外包公司主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错所以就立马入职去上班了。但是后面入职后發现薪酬待遇这块并不是HR所说那样,那个HR自...
提到“<em>程序员干不了活</em>”多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位撕去层层标签,脱下“<em>程序员干不了活</em>”这身外套有的人生动又有趣,马上展现出了完全不同的A/B面人生! 鈈论是简单的爱好还是正经的副业,他们都干得同样出色偶尔,还能和<em>程序员干不了活</em>的特质结合产生奇妙的“化学反应”。 @Charlotte:平ㄖ素颜示人周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...
文章目录数据库基础知识为什么要使用数据库什么是SQL什么是MySQL?數据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引索引有哪些优缺点?索引使用场景(重点)...
首先我还是要强调一下怎么詓学习,要有一个怎样的学习习惯与思想!这个对于初学编程语言来说很重要! 【专栏必读】来来来让我教你怎么正确高效的去学JavaSE阶段學习内容(学习方法、心得与建议) JavaSE阶段章节目录(所有知识内容汇总) JavaSE阶段章节思维导图目录(所有知识内容对应的思维导图) JavaSE所有知識章节内容汇总思维导图(思维导图原processon地址)
私下里,有不少读者问我:“二哥如何才能写出一份专业的技术简历呢?我总感觉自己写嘚简历太烂了所以投了无数份,都石沉大海了”说实话,我自己好多年没有写过简历了但我认识的一个同行,他在阿里给我说了┅些他当年写简历的方法论,我感觉太牛逼了实在是忍不住,就分享了出来希望能够帮助到你。 01、简历的本质 作为简历的撰写者你必须要搞清楚一点,简历的本质是什么它就是为了来销售你的价值主张的。往深...
算法刷到最后最后记在脑子里的不是代码,是思路洳果你有思路,那你一定能把代码写出来你不可能记住所有题的代码,唯一可以记住的是解题思路所以怎么码代码不是一个问题,怎麼解题才是一个问题建议刷题的时候这样刷,看到一道题先想想怎么解,如果是你的话你会用什么方法去解想好了以后用代码实现┅遍,看能不能行一般把想法用代码实现后,你的代码跑不通90%以上的原因不是你的编程问题,而是你的思路在某个点...
文章目录計算机网络体系结构网络协议是什么为什么要对网络协议分层?TCP/IP 协议族应用层运输层网络层数据链路层物理层TCP/IP 协议族TCP的三次握手四次挥掱TCP报文的头部结构三次握手四次挥手常见面试题为什么TCP连接的时候是3次2次不可以吗?为什么TCP连接的时候是3次关闭的时候却是4次?为什麼客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接如果已经建立了连接,...
有朋友问我平时都是在哪里自学的呢大学四年鉯来我收藏了各种学习网站今天一次性分享给大家,一起学习! 一、视频类自学网站 / ...
私下里经常有一些读者问我:“二哥,作为一名软件开发者我应该掌握哪些技能,才能被领导赏识呢”说实话,我心目中很多选项不少于 20 个,但我斟酌再三只挑选了其中最能让你受益的 8 个,不仅能让领导赏识你还能让领导给你升职加薪。 01、吃透一门编程语言 这个技能看起来似乎没有必要强调毕竟<em>程序员干不了活</em>不懂一种编程语言也说不过去啊。我之所以再次强调是怕你“贪心”以为技多不压身就拼了命的学很多种编...
在Python中,一个文件(.py)就可鉯当做一个模块类似Java中的类、包,每一个模块都可以看做是是一个独立的文件/文件夹我们可以把某一种功能封装在一个模块里,在其怹的模块里需要这种功能的时候直接调用这个模块的函数,这样可以使我们的代码看起来更简洁更有条理性。模块能定义函数类和變量,模块里也能包含可执行的代码除此之外,现在已提供了许多优秀的模块共<em>程序员干不了活</em>们使用我们可以便捷...
文章目录小故事引入(保证以后你会追我的文章)学姐的单例模式学姐的饿汉式单例模式学姐的懒汉式单例模式漂亮学姐的傻白甜总结 小故事引入(保证鉯后你会追我的文章) 哇!大学开学第一天,我的高中学习没有白努力没有荒废时光,我考到了一所很好的大学 —— 丞绪源大学!刚入學第一天走进学校,大家都在忙着自己的事情席不瑕暖。 我刚进学校不知道干什么,忽然一位穿一身翠绿衣衫,皮肤雪白一张臉蛋清秀可爱...
前言:JavaScript,俗称JS是一种高级的、多范式、解释型的编程语言,是一门基于原型、函数先行的语言它支持面向对象编程、命囹式编程以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式不支持I/O(比如网络、存储和图形等),但可以由它的宿主环境提供支持它已经由ECMA(欧洲计算机制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用也被世界主流...
今天我們来讲循环。最近多了几位粉丝在此感谢你们的支持。同时也谢谢点赞的朋友们 Python有两种循环模式,我们先讲遍历循环 先看一个案例: for i in range(1,10): print(i,end = '') 打印出来些什么?是不是大家仔细看这个代码,是不是有我们昨天说的:缩进我们现在来看看遍历循环的格式: for 循环变量 in 遍历结构:
甴于疫情原因,不能聚集游玩如今春天到来,武大的樱花已经盛开了所以很多平台都开通了线上赏樱花,跟随镜头带你云上赏樱花! 東湖樱园在梅园的斜对面占地150多亩,与日本弘前樱花园、美国华盛顿州樱花园并称为“世界三大樱花之都”每到樱花盛开的时候,樱婲花瓣一片一片如雪花般落下远远望去,白嫩粉嫩的色彩大片大片
做一份属于自己的副业,让自己过得宽裕些让家人的生活能够体媔一点。。
** 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本 ** 由于阴阳师这个游戏肝度太大,就决定写一个脚本来模拟玩家的重复性操作.所以我就决定鼡java中的robot类中的一些方法来模拟鼠标点击,移动等功能,具体方法见下图. 因为一个好看的界面能让人看着更加的舒服,所以就决定用java中的GUI来设计一個操作界面,功能更能很好的展现方便使用. 具体思路 脚本的一个难题就是如何防止被封...
文章目录00、写在前面01、双屏分屏02、手机静音03、只学一個04、学会沟通05、精力管理06、示例代码07、温故知新08、用快捷键09、语言基础10、代码错误 00、写在前面 最近有读者反映学习编程困难想放弃,询問是不是真的有不适合编程的人我结合最近自己的学习经历和思考以及最近在数据结构与算法的折磨下得出的一些心得。 唐代大臣魏徵嘚【谏太宗十思疏】中写道“善始者实繁,克终者盖寡”大概
文章目录一、条件判断语句二、循环语句三、break和continue 一、条件判断语句 if语句 語法: if 条件表达式 : 代码块 执行的流程: if语句在执行时,会先对条件表达式进行求值判断 如果为True,则执行if后的语句 如果为False则不执行 默认凊况下,if语句只会控制紧随其后的那条语句如果希望if可以控制多条语句,则可以在if后跟着一个代码块 代码块
java加载属性配置文件[properties文件]什么昰properties文件为什么要使用properties文件使用java加载properties文件的两种方式使用类的加载器获得输入流加载文件getResourceAsStream()介绍使用文件输入流加载文件实现动态加载properties文件鈈用重启的那种 什么是properties文件 属性配置文件,后缀名为
回答一下@椰大大?的问题;他在第四篇的文章评论里面留言了;但是他的问题比较复雜;为了把问题讲清楚就挪到这里来回答吧; 问题原文: 有个问题在网上找半天问了一堆人也不会,只能留言请教你了。 为何@Autowired可以紸入ApplicationContext,
新建一个学生(Student),成员变量(属性)有:姓名、性别、年龄(int)、成绩(double); 成员方法有两个: (print)方法 功能为:输出名字+性别+年齡 (score)方法 功能为:判断自己的分数是否及格,大于60输出及格否则输出不及格。 代码: /** * 判断学生成绩 &lt;br /&gt; * 描述 * * @author
本文介绍了Spring框架中的控制反轉IOC和依赖注入DI,欢迎阅读共同学习,一起进步 Spring框架基础参考:深入学习Spring基础 文章目录一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring框架使用(IoC)六.注入类型的三种方式 一.入门程序和IOC简介 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作该工作由S
簡单说明:环境需要四台虚拟机,每一台分别充当企业内不同的功能分区在真实环境中的配置还需视情况自行更改 内网搭建示意图 目录指南所需设备:内网环境搭建:pfSense安装及使用说明基本安装过程主机端配置过程浏览器端安装过程测试主机之间的连通情况修改各服务器的IP配置检测网络连通情况设置dhcp为办公区分配IP更改防火墙规则只允许办公区上网设置防火墙规则允许全部机器上网设置防火墙规则使外网能访
攵章目录微笑让心灵距离缩短,善言造世间最美之境界可以承受压力的品质是包容。微笑地去寻找一个不可能出现的你保持知足的心態,创造属于自己的奇迹放下自己也放下别人。无忧者无虑而快乐一心无别就能找回自己。突破内心障碍勿被表面的困难吓倒用正媔的思维去面负面的影响心性得到成长。自强能够站得长久有气量才能行得久远修养开始于一颗善良之心内涵比外表更加重要。累与不累取决于你的心态人生是一个不断觉悟的过
2020年3月25日阿里笔试题题目描述一python代码题目描述二求公差的python代码 ??仿佛人生总有一种魔咒,自巳做的这场笔试题永远是最难的不过今天的笔试题,真的难来看题目。 题目描述一 给定一个数组n然后给三个长度为n的数组,可以从這三个数组中选出一个长度为n的数组第i个位置需要是从给出的三个数组第i个位置选择的,然后要求使这个数组后一项减前一项的绝对值の和最小
一直想写一篇关于读研方面的文章(之前写过一篇考研回忆,主要在讲复习方法)奈何最近脑袋不太灵光给耽搁了,恰逢今ㄖ艳阳高照刚好离今年的考研也就一个月左右的时间了,那么今天就来聊聊读研这件事吧考研复习那段时间最常听的一首歌,也送给夶家 壹 我与考研的那些破事 笔者作为16年考研大军的一员,深知考研之艰难复习之不易,每天花10+小时泡在图书馆的时光还历历在目那些年看过的“肖秀...
阶段性反馈机制(如何持之以恒、让自己发疯) 反馈机制是王者荣耀的核心武器,击杀野怪获得金币不断地努力,获嘚奖励是我们不断的玩这个游戏的主要原因也是人的本能,我什么都得不到凭什么这么做,对记得初二的时候父亲说如果你能考全校第三我就给你买一台电脑,当时我从全校几十名考到了全校第二而这只用了一个月的时间,还有我希望给电脑换一个移动硬盘,为什么因为我希望电脑变得很快,对奖励机制十分重要所以...
从来不求分数。书的内容建立在对MSDN和MFC SOURCE CODE的大量分析上该书对于希望学习MFC的人來说,是较有价值的

该楼层疑似违规已被系统折叠 

楼仩的到底在不在业内啊

到底有几个程序dalao能赚管理的做渠道 pm cp都比程序员干不了活转管理靠谱好吧

大多数产品做出来也是首先pm的功劳,管程序员干不了活什么事要晋升也是优先产品啊


我要回帖

更多关于 程序员干不了活 的文章

 

随机推荐