﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-学好delphi-随笔分类-初学汇编</title><link>http://www.cnitblog.com/shuyezi122/category/8052.html</link><description>我delphi笔记,你的参与就是对我最大的支持,还有汇编语言也在学
我的QQ群:79598397
</description><language>zh-cn</language><lastBuildDate>Tue, 04 Oct 2011 11:32:43 GMT</lastBuildDate><pubDate>Tue, 04 Oct 2011 11:32:43 GMT</pubDate><ttl>60</ttl><item><title>win32汇编用到的nmake.exe下载</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/06/05/59075.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Fri, 05 Jun 2009 06:45:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/06/05/59075.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/59075.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/06/05/59075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/59075.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/59075.html</trackback:ping><description><![CDATA[<a href="http://www.cnitblog.com/Files/shuyezi122/nmake.rar">http://www.cnitblog.com/Files/shuyezi122/nmake.rar</a>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/59075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-06-05 14:45 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/06/05/59075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>intel微处理器</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55469.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Mon, 16 Mar 2009 09:57:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55469.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55469.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55469.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55469.html</trackback:ping><description><![CDATA[发展过程:8080,8086/8088,80186,80286,80386,80486,pentium,pentium2,pentium3,pentium4<br><br>8086是一个重要的阶段,8086与8088差相不大<br><br>80386是第二个重要的型号,它可以在3个模式下工作:<br>&nbsp;&nbsp; 1,实模式,想当于8086<br>&nbsp;&nbsp; 2,保护模式,windows下<br>&nbsp;&nbsp; 3,虚拟8086模式<br>比如你的电脑是winXP+dos系统,刚开机,加载DOS就是实模式,加载WINXP就是保护模式,进有cmd就是虚拟8086模式,CPU在这三个模式下运行<br>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-16 17:57 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>intel的CPU</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55468.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Mon, 16 Mar 2009 09:47:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55468.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55468.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55468.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55468.html</trackback:ping><description><![CDATA[<font size=2>这张图相信很多人都看过，世界上第一台电子计算机ENIAC<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/206587591.jpg" border=0><br>&nbsp; &nbsp;&nbsp;&nbsp;教科书里面的答案是ENIAC。这个答案不算正确，但也没完全错。ENIAC是美国宾州大学研制的第一台电子计算机，也是世界上第一台电子计算机。准确一点说：ENIAC是世界上第一台通用型计算机。ENIAC是Electronic Numerical Integrator And Computer的缩写，它于1946年2月15日诞生；当时的资助者是美国军方，目的是计算弹道的各种非常复杂的非线性方程组。众所周知，这些方程组是没有办法求出准确解的，因此只能用数值方法近似地进行计算，因此研究一种快捷准确计算的办法很有必要。<br><br>那个时候的&#8220;程序设计&#8221;，需要插拔N多的插头<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/148475534.jpg" border=0><br>&nbsp; &nbsp;&nbsp;&nbsp;美国军方花费了48万美元经费在ENIAC项目上，这在当时可是一笔巨款，要不是为了二次世界大战，谁能舍得出这么大的钱？事实上ENIAC也是美国陆军军械部和宾州大学莫尔学院联合发布的，而非书本上所提的只有宾州大学。<br>　　从技术上而言，ENIAC是没有太明晰的CPU概念的。因为它采用电子管作为基本电子元件。用了足足18800个电子管，而每个电子管大约有一个普通家用25瓦灯泡那么大。这样整部电脑就有了8英尺高、3英尺宽、100英尺长的身躯，体积有研立方米，重达30吨，耗电高达140千瓦。每秒能进行5000次加法运算(而人最快的运算速度每秒仅5次加法运算)，还能进行平方和立方运算，计算正弦和余弦等三角函数的值及其它一些更复杂的运算。这样的速度在当时已经是人类智慧的最高水平。<br><br>&nbsp; &nbsp;&nbsp;&nbsp;但是，其实ENIAC还不是计算机的最早始祖。现代计算机的思想由来已久，到了19世纪已经才日渐成熟，但是当时的技术水平很低弱，所以根本无法制造出可以运行的系统来，其中最据代表性的就是巴贝奇的分析机。<br>下图是巴贝奇分析机部件<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/173404682.jpg" border=0><br>&nbsp; &nbsp;&nbsp;&nbsp;英国皇家学会会员、剑桥大学数学教授巴贝奇(Charles Babbage, 1792-1871.)，是一位富有的银行家的儿子。他于1792年出生于英格兰西南部的托格茅斯，后来继承了相当丰厚的遗产。巴贝奇把继承的财富都用于科学研究，并显示出极高的数学天赋，考入剑桥大学后，他发现自己掌握的代数知识甚至超过了教师。1817年获硕士学位，1928年受聘担任剑桥大学&#8220;卢卡辛讲座&#8221;的数学教授，这是只有牛顿等科学大师才能获得的殊荣。<br>巴贝奇教授，Charles Babbage<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/148701022.jpg" border=0><br>&nbsp; &nbsp;&nbsp;&nbsp;巴贝奇不但精于科学理论，更喜欢将科学应用在各种发明创造上。他最早提出，人类可以制造出通用的计算机，来代替大脑计算复杂的数学问题。当时并没有电子技术的应用，于是巴贝奇的设想就架构在当时日趋成熟的机械技术上。巴贝奇将他设想的通用计算机命名为&#8220;分析机&#8221;，并希望它能自动解算有100个变量的复杂算题，每个数达25位，速度达到每秒钟运算一次。分析机包括齿轮式&#8220;存贮仓库&#8221;(Store)和&#8220;运算室&#8221;即&#8220;作坊&#8221;(Mill)，而且还有他未给出名称的&#8220;控制器&#8221;装置，以及在&#8220;存贮仓库&#8221;和&#8220;作坊&#8221;之间运输数据的输入输出部件。这种天才的思想，划时代地提出了类似于现代电脑五大部件的逻辑结构，也为后世的通用处理器诞生奠定了坚实的基础。<br>　　最初，巴贝奇还有政府的资助来研究设计&#8220;分析机&#8221;，但是短视的英国政府于1842年，断然宣布停止对巴贝奇的一切资助，而当时的科学界也讥笑他是&#8220;愚笨的傻瓜&#8221;，公然称差分机&#8220;毫无任何价值&#8221;。不过英雄的故事里面总是有美人垂青，英国著名诗人拜伦的女儿爱达&#8226;拉夫拉斯伯爵夫人(注解1)，是唯一能理解巴贝奇的人，也是世界计算机先驱中的第一位女性。她帮助巴贝奇研究分析机，建议用二进制数代替原来的十进制数(编者注：真是天才！)。她还指出分析机可能像雅各织布机一样编程，并发现了编程的要素。她还为某些计算开发了一些指令，并预言计算机总有一天会演奏音乐。第二年，她帮助巴贝奇处理论文的译稿时，加入了许多独特的见解，深得巴贝奇教授的赞许。<br>　　在爱达夫人短暂生命的最后十年里，全力协助巴贝奇工作，甚至把自己的珠宝手饰都拿出来变卖，以帮助巴贝奇度过经济难关。之后，巴贝奇又独自坚持了近20年，直至1871年，这位先驱者孤独地离开了人世时，分析机终于没能制造出来，未完成的一部分也被保留在英国皇家博物馆里。巴贝奇逝世后，他的儿子亨利&#8226;巴贝奇少将制造了若干个复制品，送往世界各地保存。亨利坚定地相信，总有一天，他父亲的这种机器一定会被后人制造出来。<br>　　近年来，科学界已经普遍确认巴贝奇在信息科学的鼻祖地位。1991年，为了纪念巴贝奇200周年诞辰，英国肯圣顿(Kensington)科学博物馆根据这些图纸重新建造了一台差分机。复制过程中，只发现图纸存在着几处小的错误。复制者特地采用18世纪中期的技术设备来制作，不仅成功地造出了机器，而且可以正常运转。<br>后人完成的巴贝奇分析机<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/224426175.jpg" border=0><br>&nbsp; &nbsp;&nbsp; &nbsp;为什么要提这些旧事？其实无论是英特尔、IBM、微软，还是甲骨文，如果没有这些先驱们的奉献，就没有今天的繁荣。另外，我国的教育对于这一段历史的描述非常差，编者希望这样的说明能够在开始以下intel x86神奇时光之旅前，有一个很好的交待，权作抛砖引玉吧。<br>　　注解1： 1981年，美国国防部花了10年的时间，研制了一种计算机全功能混合语言，并成为军方数千种电脑的标准。为了纪念爱达夫人，这种语言被正式命名为ADA语言，并赞誉她是&#8220;世界上第一位软件工程师&#8221;。<br>在以下部分的介绍里，集成电路的通用型CPU诞生了！<br><br>&nbsp; &nbsp;&nbsp; &nbsp;其实早在英特尔公司诞生前，集成电路技术就已经被发明。1947年，AT&amp;T贝尔实验室的三位科学家发明了晶体管，晶体管的出现，迅速替代电子管占领了世界电子领域。随后，晶体管电路不断向微型化方向发展。1957年，美国科学家达默提出&#8220;将电子设备制作在一个没有引线的固体半导体板块中&#8221;的大胆技术设想，这就是半导体集成电路的核心思想。<br>　　1958年，美国德克萨斯州仪器公司的工程师基尔比(Jack Kilby)在一块半导体硅晶片上将电阻、电容等分立元件集成在里面，制成世界上第一片集成电路。也正因为这件事，2000年的诺贝尔物理奖颁发给了已退休的基尔比。1959年，美国仙童公司的诺伊斯用一种平面工艺制成半导体集成电路，从此开启了集成电路比黄金还诱人的时代。其后，摩尔、诺宜斯、葛洛夫这三个&#8220;伙伴&#8221;离开原来的仙童公司，一起开创事业——筹建一家他们自已的公司。三人一致认为，最有发展潜力的半导体市场是计算机存储器芯片市场。<br>英特尔的元老，摩尔<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/82217349.jpg" border=0><br>英特尔的元老，诺宜斯<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/80903420.jpg" border=0><br>英特尔的元老，葛洛夫<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/81857412.jpg" border=0><br>吸引他们成立新公司的另一个重要原因是：这一市场几乎完全依赖于高新技术，你可以尽可能地在一个芯片上放最多的电路，谁的集成度高，谁就能成为这一行业的领袖。基于以上考虑，摩尔为新公司命名为：Intel，这个字是由&#8220;集成/电子(Integrated Electronics)"两个英文单词组合成的，象征新公司将在集成电路市场上飞黄腾达，结果就真的如此，看来在摩尔有生之年，请他起个名字一定发达。<br>intel这个名字有着深远涵义<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/64843240.jpg" border=0><br>当时，这三位创业者说服风险资本家阿瑟.罗克给他们投资了200万美元；还找到了他们创业的最佳地点，就是原联合碳化物电子公司的大楼，这可比惠普的车库要强多了。公司创建不久，三位创建人就与公司职员(这时是1968年底，英特尔公司已约定，他们将不拘泥于任何特定的技术或产品生产线，用诺宜斯的话来说就是&#8220;对当今所有技术进行快镜拍摄，从中发现哪种技术行得通，哪种技术最卓有成效，就开发哪种技术&#8221;，公司有的是时间、才能和资金，所以他们不能草率行事。诺宜斯说：&#8220;没能任何合同规定我们必须保证某一生产线的生产。我们也不受任何旧技术的约束。&#8221;<br>　　英特尔公司发现：当电子在集成电路块的细微部位上出现或消失时，可以将若干比特(bites,资料的最小计量单位)信息非常廉价地储存在微型集成电路硅片上，他们首先将这种发现应用在商业上。1969年的春天，在公司成立一周年以后，英特尔公司生产了第一批产品，即双极处理64比特存储芯片。不久，公司又推出256比特的MOS存储器芯片。一个小小的Intel公司，以它的两种新产品的问世而打入了整个计算机存储器市场——这是一个辉煌的开端，而其他的一些公司直到1980年才能生产MOS芯片和双极芯片。<br>　　随着日本公司加入竞争，内存的生意越来越艰难。尽管当时有很多美国人抱怨日本人公司以低于成本的价格向美国倾销产品，但一个不可否认的事实是，日本在芯片制造上的速度和质量是无与伦比的。这时候，英特尔公司面对有史以来最大的生存危机。不过最终他们作出一个令人钦佩的决断：放弃内存，全力投入微处理器业务。<br>　　说到微处理器业务，其实最初是件很偶然的事情：英特尔的一家客户(Busicom，一家现已不存在的日本厂商)要求英特尔为其专门设计一些处理芯片。在研究过程中，英特尔的研究员霍夫(Hoff)问自已：对于集成电路，能否在外部软件的操纵下以简单的指令进行复杂的工作呢？为什么不可将这个计算机上的所有逻辑集成到一个芯片上并在上面编制简单通用的程序呢？这其实就是今天所有微处理器的原理。但日本公司对此毫无兴趣。在同事的帮助及公司支持下，霍夫把中央处理器的全部功能集成在一块芯片上，再加上存储器；完善了这种后来被称为4004的芯片，也就是世界上第一片微处理器。<br><br>4004CPU的样子，可爱吧？<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/89415279.jpg" border=0><br>1971年英特尔诞生了第一个微处理器——4004。该芯片其实是为Busicom calculator专门设计制造的，但已经可以看到个人电脑的影子在里面了。据说当时有一位留着长发的美国人在无线电杂志上读到I4004的消息，立即就想能用这个CPU来开发个人使用的操作系统。结果经过一番仔细折腾之后，发现I4004的功能实在是太弱，而他想实现的系统功能与Basic语言并不能在上面实现只好作罢，这个人就是比尔.盖茨——微软公司的老板。不过从此之后，他对英特尔的动向非常关注，终于在1975年成就了微软公司(Microsoft Corporation)。<br>的核心电路照片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/606438107.jpg" border=0><br>这个也是4004<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/209858246.jpg" border=0><br>另外一种样子的4004<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/156117868.jpg" border=0><br>4004系列CPU的全家福<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://img.pcpop.com/upimg2/2004/4/2/990217349.jpg" width=716 border=0 resized="true"><br>接下来到了8008<br>8008的运算能力比4004强劲2倍。1974年，一本无线电杂志刊登了一种使用8008作处理器的机器，叫做&#8220;Mark-8(马克八号)&#8221;，这也是目前已知的最早的家用电脑了。虽然从今天的角度看来，&#8220;Mark-8&#8221;非常难以使用、控制、编程及维护，但是这在当时却是一种伟大的发明。<br>8008的样子<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/188587349.jpg" border=0><br>这颗比较清楚一点<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/231087349.jpg" border=0><br>8008的核心照片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/751225800.jpg" border=0><br><br>事实上，8008共有四种型号，分别如下：<br>C8008<br>就是刚才发的第二张8008图片<br>C8008-1<br>刚才发的第一张8008图片<br>D8008现在发<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/232356215.jpg" border=0><br>D8008-1<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/132477349.jpg" border=0><br>下一代产品叫做8080，8080被用于当时一种品牌为Altair(牵牛星，这个名字来源于当时电视节目里一个流行的科幻剧)的电脑上。这也是有史以来第一个知名的个人电脑。当时这种电脑的套件售价是395美金，短短数月的时间里面，销售业绩达到了数万部，创造了个人电脑销售历史的一个里程碑。<br>8080A<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://img.pcpop.com/upimg2/2004/4/2/805853606.jpg" width=716 border=0 resized="true"><br>8080的核心照片<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://velox.stanford.edu/group/images/upro/intel_8080.jpg" width=716 border=0 resized="true"><br>史前总结：<br>　　4004的集成度只有2300个晶体管，功能其实比较弱，且计算速度较慢，以致只能用在Busicom计算器上，更不用说进行复杂的数学计算了。不过比起第一台电子计算机ENIAC来说，它已经轻巧太多太多了。而且最大的历史意义是，它是第一个通用型处理器，这在当时专用集成电路设计横行的时代是难得的突破。所谓专用集成电路设，就是为不同的应用设计独特的产品，一旦应用条件变化，就需要重新设计；当然在商业盈利上，对设计公司是很有好处的。但是英特尔公司的目光并没有这么短浅，霍夫做出大胆的设想：使用通用的硬件设计加上外部软件支持来完成不同的应用，这就是最初的通用微处理器的设想。<br>　　英特尔公司很快对这个设想进行了论证，发现确实可行，而且这种产品的好处就在于采用不同的软件支持就能完成不同的工作，这比重新设计专用的集成电路要简单得多。看到这种产品将来的广阔前景，英特尔公司马上投入了设计工作并很快推出了产品——世界上第一块微处理器Intel 4004。<br>其实4004处理只能处理4位数据，但内部指令是8位的。4004拥有46条指令，采用16针直插式封装。数据内存和程序内存分开，1K数据内存，4K程序内存。运行时钟频率预计为1M，最终实现达到了740kHz，能进行二进制编码的十进制数学运算。这款处理器很快得到了整个业界的承认，蓝色巨人IBM还将4004装备在IBM 1620机器上。<br>在4004发布后不久，英特尔连续的发布了几款CPU：4040、8008，但市场反响平平，不过却为开发8位微处理器打下了良好基础。1974年，英特尔公司又在8008的基础上研制出了8080处理器、拥有16位地址总线和8位数据总线，包含7个8位寄存器(A,B,C,D,E,F,G,其中BC,DE,HL组合可组成16位数据寄存器)，支持16位内存，同时它也包含一些输入输出端口，这是一个相当成功的设计，还有效解决了外部设备在内存寻址能力不足的问题。<br>大家一般都只知道8086，很少知道8085的存在，这个就是8085的真面目：<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/204443606.jpg" border=0><br>1978年，8086处理器诞生了。这个处理器标志着x86王朝的开始，为什么要纪念英特尔x86架构25周年？主要原因是从8086开始，才有了目前应用最广泛的PC行业基础。虽然从1971年，英特尔制造4004至今，已经有32年历史；但是从没有像8086这样影响深远的神来之作。<br>8086<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/180281792.jpg" border=0><br>8086/8088的核心<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://velox.stanford.edu/group/images/upro/intel_8088.jpg" width=716 border=0 resized="true"><br>8086的协处理器：8087<br>8087实际上有13种型号，这里只给出一种的图片，因为都大同小异。<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/622956215.jpg" border=0><br>还有一个更关键的因素，是时IBM研究新的PC机来打击苹果的个人电脑。IBM公司需要选择一款强大，易于扩展的处理器来驱动，英特尔的x86处理器取得了绝对的胜利，成为IBM PC的新&#8220;大脑&#8221;。这个历史的选择也将英特尔公司日后带入了财富500强大公司的行列，并被财富杂志称之为：&#8220;七十大商业奇迹之一(Business Triumphs of the Seventies)&#8221;<br>　　IBM公司的PC大获成功，不但带旺了英特尔的生意，还造就了另外一个商业奇迹——微软公司。比尔.盖茨搭车销售了DOS操作系统，为今天称霸软件行业攫取了第一桶金。不但如此，因为IBM公司的远见，开放了PC架构的授权，康柏(今天已经变成HP的一部分)等第三方的制造商也大获其利。甚至中国台湾等经济的腾飞都与这次历史的联合有着必然的联系，无论从历史，还是产业的眼光来阅读，这个事件都非常值得称颂！<br>8088的图片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/819265800.jpg" border=0><br>使用8088芯片的笔记本，它的配置如下：<br>Intel 8088 CPU <br>128Kb RAM <br>3.5" 360kb 或者 720kb 软驱 <br>5MB 硬盘 <br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/614334657.jpg" border=0><br>事实上，IBM在PC XT选用的是8088这个型号。以技术的观点来看，8088其实是8086的一个简版，其内部指令是16位的，但是外部是8位数据总线；相对于8086内部数据总线(CPU内部传输数据的总线)、外部数据总线(CPU外部传输数据的总线)均为16位，地址总线为20位，可寻址1MB内存的规格来说，是稍差了一点，但是已经足以胜任DOS系统和当时的应用程序了。8086集成2.9万只晶体管，时钟频率为4.77MHz，同时还生产出与之配合的数学协处理器8087，这两种芯片使用相同的指令集，可以互相配合提升科学运算的效率。<br>　　当然现在的CPU都内建数学协处理器，因此不再需要额外的数学协处理器芯片，但是七十年代的技术限制，一般只能将数学协处理器做成另外一个芯片，供用户选择。这样的好处是减少了制造的成本，提高了良品率，更降低速度不敏感的用户的支出：他们可以暂时不买数学协处理器，直到需要的时候买1982年，英特尔发布了80286处理器，也就是俗称的286。这是英特尔第一个可以运行所有为其撰写的处理器，在发布后的六年中，全球一共交付了一千五百万台基于286的个人电脑。<br>80286图片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/231749484.jpg" border=0><br>80286的核心照片<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://velox.stanford.edu/group/images/upro/intel_286.jpg" width=716 border=0 resized="true"><br>使用80286的电脑<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/709603717.jpg" border=0><br>80286芯片集成了14.3万只晶体管、16位字长，时钟频率由最初的6MHz逐步提高到20MHz。其内部和外部数据总线皆为16位，地址总线24位。与8086相比，80286寻址能力达到了16MB，可以使用外存储设备模拟大量存储空间，从而大大扩展了80286的工作范围，还能通过多任务硬件机构使处理器在各种任务间来回快速切换，以同时运行多个任务，其速度比8086提高了5倍甚至更多。IBM公司将80286用在技术更为先进AT机中，与IBM PC机相比，AT机的外部总线为16位(PC XT机为8位)，内存一般可扩展到16MB，可支持更大的硬盘，支持VGA显示系统，比PC XT机在性能上有了重大的进步。<br>　　但是这时候，IBM公司内部发生了很大的分歧：内部很多人反对快速转换到286计算机的销售，因为286 PC会对IBM的小型机与之前的PC XT销售有影响，他们希望缓慢过渡。但是intel公司并不能等，80286处理器已经批量生产了，不可能堆在仓库里等IBM慢慢消化；这时候生产兼容IBM PC的康柏公司就钻了一个空子——快速推出286的PC机，一举打败IBM成为PC市场的新霸主。<br>微处理器决定了计算机的性能和速度，谁能制造出性能卓越的高速PC，谁便能领导计算机的新潮流，这就是游戏规则。IBM的人最初顺应的这个规则，因此在PC市场大获成功，但是到了286时代，却又放弃了正确的选择，真是让人为之叹惋。<br>80386进入了32位元的世代<br>　　1985年，英特尔再度发力推出了80386处理器。386集成了27万5千只晶体管，超过了4004芯片的一百倍。并且386还是英特尔第一种32位处理器，同时也是第一种具有&#8220;多任务&#8221;功能的处理器——这对微软的操作系统发展有着重要的影响，所谓&#8220;多任务&#8221;就是说处理器可以在同时处理几个程序的指令。<br>80386图片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/239687349.jpg" border=0><br>80386的核心照片<br><img onmousewheel="return imgzoom(this);" alt="Click here to open new windowCTRL+Mouse wheel to zoom in/out" src="http://velox.stanford.edu/group/images/upro/intel_386.jpg" width=716 border=0 resized="true"><br>80286之前还有一个，80186，楼主给忘了吧， 我们单位现在存有三片，可惜在印刷机上呢，不能拆下来，80186刚推出没几周，80286就出现了，所以一般都没有听过80186的名字<br><br>不过就如过渡到286一样，英特尔遇到了很大压力。当时有一种流行的观点认为，286已经足够了，根本没有必要生产386电脑，在销售上开始并不如意。但是英特尔的领导人并不这样认为，在宣传上采纳很多新的手法，借鉴了很多消费类产品的办法，让人耳目一新；另一方面，也对386芯片区分出不同的规格，去适应不同的用户需求。尤其是后来推出的80386SX芯片，内部数据总线为32位，与80386相同，但是外部数据总线为16位，既有386的优点，又有286的成本优势，取得了很大的市场成功；同时原本的386芯片改称为386DX，以区别386SX。<br>　　386时代，Intel在技术有了很大的进步。80386内部内含27.5万个晶体管，时钟频率为12.5MHz，其后又提高到20MHz、25MHz、33MHz等。80386DX的内部和外部数据总线都是32位，地址总线也是32位，可寻址高达4GB内存。它除具有实模式和保护模式外，还增加了一种叫虚拟模式的工作方式，可同时模拟多个8086处理器来提供多任务能力。<br>80386DX的照片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/629042070.jpg" border=0><br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/607353606.jpg" border=0><br>80186的核心照片<br><img onmousewheel="return imgzoom(this);" alt="" src="http://img.pcpop.com/upimg2/2004/4/2/477898316.jpg" border=0><br>虽然有80186，可是从来没有在PC机上出现过，因此，这是一个容易让人遗忘的芯片^_^</font> 
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-16 17:47 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/16/55468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BIOS和DOS中断大全</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55134.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 11:18:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55134.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55134.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55134.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55134.html</trackback:ping><description><![CDATA[<p><font color=#3366ff size=5><strong>BIOS和DOS中断大全</strong></font></p>
<p><br>中断INT 21H :<br>1、字符功能调用类(Character-Oriented Function)<br>01H、07H和08H —从标准输入设备输入字符<br>02H —字符输出<br>03H —辅助设备的输入<br>04H —辅助设备的输出<br>05H —打印输出<br>06H —控制台输入/输出<br>09H —显示字符串<br>0AH — 键盘缓冲输入<br>0BH —检测输入状态<br>0CH —清输入缓冲区的输入功能<br><br>(1)、功能01H、07H和08H&nbsp;<br>功能描述：从标准输入设备(如：键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向，如果这样做，则无法判断文件是否已到文件尾<br>入口参数：AH＝01H，过滤掉控制字符，并回显<br>　＝07H，不过滤掉控制字符，不回显<br>　＝08H，过滤掉控制字符，不回显<br>出口参数：AL＝输入字符的ASCII码<br><br>(2)、功能02H<br>功能描述：向标准输出设备(如：屏幕)输出一个字符。该输出还可被重定向，如果这样做，则将无法判断磁盘是否满<br>入口参数：AH＝02H<br>DL＝待输出字符的ASCII码<br>出口参数：无<br><br>(3)、功能03H<br>功能描述：从辅助设备读入一个字符，该辅助设备的缺省值为COM1<br>入口参数：AH＝03H<br>出口参数：AL＝读入字符的ASCII码<br><br>(4)、功能04H<br>功能描述：向辅助设备输出一个字符，该辅助设备的缺省值为COM1<br>入口参数：AH＝04H<br>DL＝待输出字符的ASCII码<br>出口参数：无<br><br>(5)、功能05H<br>功能描述：向标准的输出设备输出一个字符。该缺省的输出设备为LPT1端口的打印机，除非用MODE命令来改变<br>入口参数：AH＝05H<br>DL＝待输出字符的ASCII码<br>出口参数：无<br><br>(6)、功能06H<br>功能描述：控制台(如：键盘、屏幕)输入/输出。如果输入/输出操作被重定向，那么，将无法判断文件是否已到文件尾，或磁盘已满<br>入口参数：AH＝06H，DL＝输入/输出功能选择<br>出口参数：若DL＝00H-FEH，则此功能为输出，DL为待输出字符的ASCII码；<br>若DL＝0FFH，则此功能为输入，此时：若ZF＝1，则无字符可读，否则，AL＝读入字符的ASCII码<br><br>(7)、功能09H<br>功能描述：输出一个字符串到标准输出设备上。如果输出操作被重定向，那么，将无法判断磁盘已满<br>入口参数：AH＝09H<br>DS:DX＝待输出字符的地址<br>说明：待显示的字符串以&#8217;$&#8217;作为其结束标志<br>出口参数：无<br><br>(8)、功能0AH<br>功能描述：从标准输入设备上读入一个字节字符串，遇到&#8220;回车键&#8221;结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向，那么，将无法判断文件是否已到文件尾<br>入口参数：AH＝0AH<br>DS:DX＝存放输入字符的起始地址<br>接受输入字符串缓冲区的定义说明：<br>　　1、第一个字节为缓冲区的最大容量，可认为是入口参数；<br>　　2、第二个字节为实际输入的字符数(不包括回车键)，可看作出口参数；<br>　　3、从第三个字节开始存放实际输入的字符串；<br>　　4、字符串以回车键结束，回车符是接受的最后一个字符；<br>　　5、若输入的字符数超过缓冲区的最大容量，则多出的部分被丢弃，系统并发出响铃，直到输入&#8220;回车&#8221;键才结束输入。&nbsp;<br>例如：<br>　　BUFF　80, ?, 80 DUP(?)　　　;最多接受80个字符<br>出口参数：无<br><br>(9)、功能0BH<br>功能描述：检查标准输入设备上是否有字符可读。该输入操作可被重定向<br>入口参数：AH＝0BH<br>出口参数：AL＝00H——无字符可读；FFH——有字符可读<br><br>(10)、功能0CH<br>功能描述：清空当前的标准输入缓冲区，再读入字符。其输入操作可被重定向<br>入口参数：AH＝0CH<br>AL＝01H、06H、07H、08H或0AH<br>出口参数：若入口参数AL为0AH，则DS:DX＝存放输入字符的起始地址，否则，出口参数AL＝输入字符的ASCII码<br>2、目录控制功能(Directory-Control Function)<br>39H —创建目录<br>3AH —删除目录<br>3BH —设置当前目录<br>47H —读取当前目录<br><br><br>(1)、功能39H<br>功能描述：用指定的驱动器和路径创建一个新目录<br>入口参数：AH＝39H<br>DS:DX＝指定路径的字符串地址(以0为字符串的结束标志)<br>出口参数：CF＝0——创建成功，否则，AX＝错误号(03H或05H)，其含义见错误代码表<br><br>(2)、功能3AH<br>功能描述：删除指定的驱动器和路径的目录<br>入口参数：AH＝3AH<br>DS:DX＝指定路径的字符串地址(以0为字符串的结束标志)<br>出口参数：CF＝0——删除成功，否则，AX＝错误号(03H或05H)，其含义见错误代码表<br><br>(3)、功能3BH<br>功能描述：用指定的驱动器和路径设置为当前目录<br>入口参数：AH＝3BH<br>DS:DX＝指定路径的字符串地址(以0为字符串的结束标志)<br>出口参数：CF＝0——设置成功，否则，AX＝错误号(03H)，其含义见错误代码表<br><br>(4)、功能47H<br>功能描述：取当前目录的完全路径字符串<br>入口参数：AH＝47H<br>DL＝驱动器号(0=缺省，1＝A，&#8230;)<br>DS:SI＝存放当前目录字符串的地址<br>出口参数：CF＝0——读取成功，否则，AX＝错误号(0FH)，其含义见错误代码表<br><br>3、磁盘管理功能(Disk-Management Function)<br>0DH —磁盘复位 2EH —设置校验标志&nbsp;<br>0EH —选择磁盘36H —读取驱动器分配信息<br>19H —读取当前驱动器54H —读取校验标志<br>1BH, 1CH —读取驱动器数据<br><br>(1)、功能0DH<br>功能描述：清空当前的文件缓冲区，但在MS-DOS内，暂时写入缓冲区的数据将写入磁盘<br>入口参数：AH＝0DH<br>出口参数：无<br><br>(2)、功能0EH<br>功能描述：指定当前驱动器<br>入口参数：AH＝0EH<br>DL＝驱动器号(0＝A，1＝B，...)<br>出口参数：AL＝系统中当前的驱动器号<br><br>(3)、功能19H<br>功能描述：取当前缺省驱动器号<br>入口参数：AH＝19H<br>出口参数：AL＝驱动器号(0＝A，1＝B，...)<br><br>(4)、功能1BH和1CH<br>功能描述：获得驱动器的分配信息<br>入口参数：AH＝1BH——为缺省驱动器<br>AH＝1CH——为任意驱动器，DL＝驱动器号(0＝缺省，1＝A，...)<br>出口参数：AL＝0FFH——失败，否则，<br>　　AL＝每簇的扇区数<br>　　DS:BX＝ID字节的地址<br>　　CX＝物理扇区的大小(字节数)<br>　　DX＝驱动器的簇数<br><br>(5)、功能2EH<br>功能描述：设置／清除操作系统自动读取检验标志<br>入口参数：AH＝2EH<br>DL＝00H<br>AL＝00H——清除该标志，01H——设置该标志<br>出口参数：无<br><br>(6)、功能36H<br>功能描述：取选定驱动器的信息<br>入口参数：AH＝36H<br>DL＝驱动器号(0-缺省，1=A，2=B，&#8230;)<br>出口参数：若功能调用失败，AX=0FFFFH，否则，<br>　　AX＝每簇的扇区数<br>　　BX＝可用的簇数<br>　　CX＝物理扇区的大小(字节数)<br>　　DX＝驱动器中的簇数<br><br>(7)、功能54H<br>功能描述：读取校验标志<br>入口参数：AH＝54H<br>出口参数：AL＝当前检验标志值：00H—关检验，01H—开检验<br><br>4、文件操作功能(File Operation Function)<br>3CH —创建文件<br>3DH —打开文件<br>3EH —关闭文件<br>41H —删除文件<br>43H —读取/设置文件属性<br>45H —复制文件句柄<br>46H —重定义文件句柄<br>4EH —查找到第一个文件<br>4FH —查找下一个文件<br>56H — 文件换名<br>57H —读取/设置文件的日期和时间<br>5AH —创建临时文件<br>5BH —创建新文件<br>67H —设置文件句柄数(最多文件数)<br>6CH —扩展的打开文件功能(打开、创建或替换文件)<br><br>(1)、功能3CH<br>功能描述：用指定的文件名创建一个新文件。如果指定的文件已存在，则设置其长度为0。创建后，该文件是打开的，并返回其句柄<br>入口参数：AH＝3CH<br>DS:DX＝指定文件名字符串的地址(以0为字符串的结束标志)<br>CX＝文件属性(这些标志位可以组合) 位0=1——只读<br>位2=1——系统<br>位5=1——归档位1=1——隐含<br>位3=1——卷标号<br>其它位保留不用，并置为0<br><br>出口参数：CF＝0——创建成功，AX＝文件句柄，否则，AX＝错误号(03H、04H或05H)，其含义见错误代码表<br><br>(2)、功能3DH<br>功能描述：打开指定的驱动器、路径和文件名，并返回其文件句柄<br>入口参数：AH＝3DH<br>DS:DX＝表明文件的字符串(以0为字符串的结束标志)<br>AL为打开方式： 位0~2000—只读方式　　001—写方式　　010—读/写方式<br>位3保留，其值为0<br>位4~6共享模式 000—兼容模式001—不共享010—拒绝写<br>011—拒绝读100—不拒绝任何操作<br><br>位7继承标志——0/1：子进程继承或不继承句柄<br><br>出口参数：CF＝0——打开成功，AX＝文件句柄，否则，AX＝错误号(02H、03H、04H、05H或0CH)，其含义见错误代码表<br><br>(3)、功能3EH<br>功能描述：关闭指定句柄的文件<br>入口参数：AH＝3EH<br>BX＝文件句柄<br>出口参数：CF＝0——关闭成功，否则，AX＝错误号(06H)，其含义见错误代码表<br><br>(4)、功能41H<br>功能描述：删除指定的文件<br>入口参数：AH＝41H<br>DS:DX＝文件名字符串的地址<br>出口参数：CF＝0——删除成功，否则，AX＝错误号(02H、03H或05H)，其含义见错误代码表<br><br>(5)、功能43H<br>功能描述：读取或设置指定文件的属性<br>入口参数：AH＝43H<br>BX＝文件句柄<br>DS:DX＝文件名字符串的地址<br>AL＝00H/01H——读取/设置文件属性<br>CX＝文件属性： 位0=1——只读位1=1——隐含<br>位2=1——系统位3=1——卷标号<br>位5=1——归档其它位保留不用，并置为0<br><br>出口参数：CF＝0——关闭成功，CX＝文件属性，否则，AX＝错误号(01H、02H、03H或05H)，其含义见错误代码表<br><br>(6)、功能45H<br>功能描述：复制当前打开设备或文件的句柄，该句柄对应同样设备或文件的相同位置<br>入口参数：AH＝45H<br>BX＝待复制的文件句柄<br>出口参数：CF＝0——复制成功，AX＝新句柄，否则，AX＝错误号(04H或06H)，其含义见错误代码表<br><br>(7)、功能46H<br>功能描述：指定二个句柄，把第二句柄指向第一个句柄，即第二个句柄被重定向<br>入口参数：AH＝46H<br>BX＝文件或设备的句柄<br>CX＝待重定向的文件句柄<br>出口参数：CF＝0——重定向成功，否则，AX＝错误号(04H或06H)，其含义见错误代码表<br><br>(8)、功能4EH<br>功能描述：获取第一个与给定的文件名相匹配的文件<br>入口参数：AH＝4EH<br>DS:DX＝给定文件名的字符串<br>CX＝搜索时使用的文件属性： 位0=1——只读　　位1=1——隐含<br>位2=1——系统　　位3=1——卷标号<br>位4=1——目录　　位5=1——归档<br>其它位保留不用，并置为0<br><br>出口参数：CF＝1——操作失败，AX＝错误号(02H、03H或12H)，其含义见错误代码表，否则，操作成功，DTA(Disk Transfer&nbsp;<br>Area)按下列方式填入数据： 字节00~14H保留<br>字节15H匹配的文件属性<br>字节16~17H压缩的文件名<br>字节18~19H压缩的文件日期<br>字节1A~1DH文件大小<br>字节1E~2AH文件名字符串<br><br><br>(9)、功能4FH<br>功能描述：在中断21H的功能4EH成功使用之后，再搜索下一个文件名<br>入口参数：AH＝4FH<br>AL＝返回的代码<br>出口参数：CF＝1——操作失败，AX＝错误号(12H)，其含义见错误代码表，否则，操作成功，DTA中的数据如前面功能4EH所示<br><br>(10)、功能56H<br>功能描述：文件换名<br>入口参数：AH＝56H<br>DS:DX＝当前文件名字符串地址<br>ES:DI＝新文件名字符串地址<br>出口参数：CF＝0——操作成功，否则，AX＝错误号(02H、03H、05H、11H)，其含义见错误代码表<br><br>(11)、功能57H<br>功能描述：读取/设置文件的日期和时间<br>入口参数：AH＝57H<br>BX＝文件句柄 读取日期和时间AL＝00H<br>设置日期和时间AL＝01H<br>CX＝时间(0F~0BH：小时，0AH~05H：分钟，04H~00H：2秒的个数)<br>DX＝日期(0F~09H：年(相对1980年)，08H~05H：月，04H~00H：日)<br><br>出口参数：CF＝1——操作失败，AX＝错误号(01H、06H)，其含义见错误代码表，否则，若是读文件信息，则，CX＝时间，DX＝日期<br><br>(12)、功能5AH<br>功能描述：创建临时文件<br>入口参数：AH＝5AH<br>DS:DX＝路径名的地址<br>CX＝文件属性(位可组合)，其定义如下： 位0＝1　只读位3-4＝0　　保留<br>位1＝1　隐含位5＝1　 　归档<br>位2＝1　系统位6-15＝0　保留<br><br>出口参数：CF＝0——操作成功，AX＝文件句柄，DS:DX＝完整的路径文件地址，否则，AX＝错误号(03H、04H或05H)，其含义见错误代码表<br><br>(13)、功能5BH<br>功能描述：创建新文件<br>入口参数：AH＝5BH<br>DS:DX＝路径名的地址<br>CX＝文件属性(位可组合)，其定义如下： 位0＝1只读位4＝0保留<br>位1＝1隐含位5＝1归档<br>位2＝1系统位6-15＝0保留<br>位3＝1卷标号<br><br>出口参数：CF＝0——操作成功，AX＝文件句柄，否则，AX＝错误号(03H、04H、05H或50H)，其含义见错误代码表<br><br>(14)、功能67H<br>功能描述：设置文件句柄数(最多文件数)<br>入口参数：AH＝67H<br>BX＝句柄的数量<br>出口参数：CF＝0——操作成功，否则，AX＝错误号，其含义见错误代码表<br><br>(15)、功能6CH<br>功能描述：扩展的打开文件功能(打开、创建或替换文件)<br>入口参数：AH＝6CH<br>AL＝00H<br>DS:SI＝路径名的地址<br>BX＝打开方式 位2~0000—只读　　001—只写　　010—可读、写<br>位3保留(0)<br>位6~4000—兼容　　　001—拒绝读写　　010——拒绝写<br>011—拒绝读　　100——不拒绝任何操作<br>位70—子进程继承句柄，1—子进程不继承句柄<br>位12~8保留(0)<br>位13致命错误处理程序，0—执行INT 24H，否则，返回错误代码给进程<br>位14写入方式：0—写入缓冲区，1—直接写入文件<br>位15保留(0)<br>CX＝文件属性<br>位0＝1　只读位4＝0　　　保留<br>位1＝1　隐含位5＝1　　　归档<br>位2＝1　系统位6-15＝0　 保留<br>位3＝1　卷标签<br><br>DX＝打开标志 位3~0　　0—打开失败，1—打开文件，2—替换文件<br>位7~4　　0—打开失败，1—创建文件<br>位15~8　 0—保留<br><br><br>出口参数：CF＝1——操作失败，AX＝错误号，其含义见错误代码表，否则，<br>AX＝文件句柄<br>CX＝1——文件存在，打开之<br>　＝2——文件不存在，创建之<br><br>5、文件操作功能(FCB)(File Operation Function)<br>0FH —打开文件16H —创建文件<br>10H —关闭文件17H —文件换名<br>11H、12H —查找第一个或下一个文件23H —读取文件的大小<br>13H —删除文件29H —分析文件名<br><br>(1)、功能0FH<br>功能描述：打开文件，并使之为顺序读/写作好准备<br>入口参数：AH＝0FH<br>DS:DX＝文件控制块的地址<br>出口参数：AL＝00H——打开成功，否则，AL＝FFH(如文件找不到)<br>在MS-DOS操作系统中，文件控制块的字段如下表所示。 字段名偏移量字段含义<br>驱动器字00H1 for drive A, 2 for drive B,...<br>当前块字段0CH00H<br>记录大小字段0EH0080H<br>文件长度字段10H文件字节数<br>日期字段14H日期<br>时间字段16H时间<br><br><br>(2)、功能10H<br>功能描述：关闭文件<br>入口参数：AH＝10H<br>DS:DX＝文件控制块的地址<br>出口参数：AL＝00H——关闭成功，否则，AL＝FFH<br><br>(3)、功能11H和12H<br>功能描述：查找第一个或下一个相匹配的文件<br>入口参数：AH＝11H——第一个相匹配的文件<br>　 ＝12H——下一个相匹配的文件<br>DS:DX＝文件控制块的地址<br>出口参数：AL＝00H——查找到，否则，AL＝FFH<br><br>(4)、功能13H<br>功能描述：在指定(或缺省)的驱动器中，删除所有相匹配的文件<br>入口参数：AH＝13H<br>DS:DX＝文件控制块的地址<br>出口参数：AL＝00H——删除成功，否则，AL＝FFH<br><br>(5)、功能16H<br>功能描述：在当前目录中创建一个文件，其文件长度为0，并打开该文件，为随后的读/写操作作好必要的准备<br>入口参数：AH＝16H<br>DS:DX＝未打开的文件控制块的地址<br>出口参数：AL＝00H——创建成功，否则，AL＝FFH(如：磁盘满)<br><br>(6)、功能17H<br>功能描述：在指定的驱动器的当前目录中，把所有相匹配的文件换名<br>入口参数：AH＝17H<br>DS:DX＝指定文件控制块的地址<br>出口参数：AL＝00H——换名成功，否则，AL＝FFH<br><br>(7)、功能23H<br>功能描述：在当前目录中查找一个相匹配的文件。如果发现，则用其记录数来更新其文件大小<br>入口参数：AH＝23H<br>DS:DX＝未打开的文件控制块的地址<br>出口参数：AL＝00H——匹配成功，FCB中偏移量为21H的字段被设置为其记录数，否则，AL＝0FFH<br><br>(8)、功能29H<br>功能描述：分析一个字符串(文件名)置入FCB表中的不同字段<br>入口参数：AH＝29H<br>CX＝要写入的记录数<br>DS:SI＝字符串段的地址<br>ES:DI＝FCB的地址<br>AL＝分析的控制标志位 位3＝1——若字符串中有文件后缀，则FCB中的文件后缀将改变<br>＝0——若后缀忽略修改，或若分析后无后缀，则FCB中后缀字段被置为&#8220;空&#8221;<br>位2＝1——若字符串中有文件名，则FCB中的文件名将改变<br>＝0——若文件名忽略修改，或若分析后无文件名，则FCB中文件名字段被置为&#8220;空&#8221;<br>位1＝1——若字符串中指定了驱动器号，则FCB中的ID字节被修改<br>＝0——若ID字节忽略修改，或若分析后没有指定驱动器号，则FCB中驱动器字段被置为0(缺省值)<br>位0＝1——<br>＝0——忽略前导分割符<br>不忽略前导分割符<br><br>出口参数：AL＝00H—没有通配字符 01H—有通配字符 FFH—驱动器号非法<br>DS:SI＝分析后文件名第一个字符的地址<br>ES:DI＝格式化后的、未打开的FCB地址<br><br>6、记录操作功能(Record Function)<br>1AH —设置数据传输区地址42H —设置文件指针<br>2FH —读取数据传输区地址5CH —文件区域加锁或解锁<br>3FH —读文件或设备68H —提交文件缓冲区数据<br>40H —写文件或设备<br><br>(2)、功能2FH<br>功能描述：为FCB读／写操作而获取DTA的当前地址<br>入口参数：AH＝2FH<br>出口参数：ES:BX＝DTA的段地址和偏移量<br><br>(3)、功能3FH<br>功能描述：从先前打开的文件中读出指定数目的字节，并移动文件指针<br>入口参数：AH＝3FH<br>BX＝文件句柄<br>CX＝将要读出的字节数<br>DS:DX＝存放字符的缓冲区地址<br>出口参数：CF＝0——读取成功，AX＝读取的字符数，否则，AX＝错误号(05H或06H)，其含义见错误代码表<br><br>(4)、功能40H<br>功能描述：向先前打开的文件写入指定数量的字节，并相应修改文件指针<br>入口参数：AH＝40H<br>BX＝文件句柄<br>CX＝写入的字节数<br>DS:DX＝存放数据的缓冲区地址<br>出口参数：CF＝0——关闭成功，AX＝写入的字节数，否则，AX＝错误号(05H或06H)，其含义见错误代码表<br><br>(5)、功能42H<br>功能描述：设置文件指针的相对位置(相对与文件头、文件尾和当前位置)<br>入口参数：AH＝42H<br>BX＝文件句柄<br>CX＝偏移量的高位<br>DX＝偏移量的低位<br>AL＝00H——从文件头开始的绝对偏移量<br>　＝01H——从当前文件指针开始的偏移量(可带符号)<br>　＝02H——从文件尾开始的偏移量(可带符号)<br>出口参数：CF＝0——设置成功，DX是指针的高位，AX是其低位，否则，AX＝错误号(01H和06H)，其含义见错误代码表。<br><br>(6)、功能5CH<br>功能描述：文件区域加锁或解锁<br>入口参数：AH＝5CH<br>AL＝00H——区域加锁　　01H——区域解锁<br>BX＝文件句柄<br>CX:DX＝区域偏移量<br>SI:DI＝区域长度<br>DS:DX＝路径名的地址<br>出口参数：CF＝0——操作成功，否则，AX＝错误号(01H、06H、21H或24H)，其含义见错误代码表<br><br>(7)、功能68H<br>功能描述：提交文件缓冲区数据<br>入口参数：AH＝68H<br>BX＝文件句柄<br>出口参数：CF＝0——操作成功，否则，AX＝错误号，其含义见错误代码表<br><br>7、记录操作功能(FCB)(Record Function)<br>14H —顺序读24H —设置相对记录数<br>15H —顺序写27H —随机读块<br>21H —随机读28H —随机写块<br>22H —随机写<br><br>(1)、功能14H<br>功能描述：从文件中读出下一个顺序块，并相应增加文件的指针<br>入口参数：AH＝14H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H——读取成功　　01H——文件尾<br>　　02H——段缠绕　　　03H——部分记录在文件尾<br><br>(2)、功能15H<br>功能描述：向文件写入下一个顺序数据块，并相应增加文件的指针<br>入口参数：AH＝15H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H——写入成功　　01H——磁盘满　　02H——段缠绕<br><br>(3)、功能21H<br>功能描述：从文件中读出当前选定的记录<br>入口参数：AH＝21H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H——读取成功　　　01H——文件尾<br>　　02H——取消读操作　　03H——部分记录在文件尾<br><br>(4)、功能22H<br>功能描述：把内存中的数据写入在文件中当前选定的记录<br>入口参数：AH＝22H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H—写入成功　　01H—磁盘满　　02H—取消写操作<br><br>(5)、功能24H<br>功能描述：设置FCB中相对记录数作为被打开FCB中的记录数<br>入口参数：AH＝24H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL的值被破坏，其它寄存器不受影响，FCB中偏移量21H单元被修改<br><br>(6)、功能27H<br>功能描述：从文件中读出若干个记录到内存中<br>入口参数：AH＝27H<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H——读取成功　　　01H——文件尾<br>　　02H——取消读操作　　03H——部分记录在文件尾<br>CX＝实际读出的记录数<br><br>(7)、功能28H<br>功能描述：从内存向文件中写入若干个记录<br>入口参数：AH＝28H<br>CX＝要写入的记录数<br>DS:DX＝先前打开文件控制块的地址<br>出口参数：AL＝00H——写入成功　　01H——磁盘满　　02H——段缠绕<br>CX＝实际写入的记录数<br><br>8、内存分配功能(Memory-Allocation Function)<br>48H —分配内存块<br>49H —释放内存块<br>4AH —重定义内存块的大小<br>58H —读取/设置内存分配策略<br><br>(1)、功能48H<br>功能描述：分配一块内存单元，并返回该块内存单元的首地址<br>入口参数：AH＝48H<br>BX＝需要申请的内存单元字节数<br>出口参数：CF＝0——分配成功，AX＝存储单元的首地址，否则，AX＝错误号(07H或08H)，其含义见错误代码表，BX＝还可用的最大块数<br><br>(2)、功能49H<br>功能描述：释放内存单元块以便为其它程序使用<br>入口参数：AH＝49H<br>ES＝被申请块的段地址<br>出口参数：CF＝0——释放成功，否则，AX＝错误号(07H或09H)，其含义见错误代码表<br><br>(3)、功能4AH<br>功能描述：根据程序的需要，动态地改变一个内存块<br>入口参数：AH＝4AH<br>BX＝需要一个新存储块的大小<br>ES＝被修改块的段地址<br>出口参数：CF＝0——修改成功，否则，AX＝错误号(07H、08H或09H)，其含义见错误代码表，BX＝可用最大块的大小<br><br>(4)、功能58H<br>功能描述：读取/设置内存分配策略<br>入口参数：AH＝58H 读取内存分配策略AL＝00H<br>设置内存分配策略AL＝01H<br>BX＝内存分配策略代码：<br>　　　00H—第一满足<br>　　　01H—最好满足<br>　　　02H—最后满足<br><br>出口参数：CF＝0——操作成功，AX＝已选用的内存分配策略代码(含义如上说明)，否则，AX＝错误号(01H)，其含义见错误代码表<br><br>9、系统功能(System Function)<br>25H —设置中断向量<br>30H —读取MS-DOS版本号<br>33H —读取/设置Break标志<br>34H —读取InDOS标志的地址<br>35H —读取中断向量<br>38H —读取/设置国家信息<br>44H —IOCTL(I/O控制)<br>50H —设置程序段前缀(PSP)地址<br>51H —读取程序段前缀(PSP)地址<br>59H —读取扩展的错误信息<br>5EH —读取机器名，读取/设置打印机配置<br>5FH —设备重定向<br>63H —读取前导字节表<br>65H —读取扩展的国家信息<br>66H —读取/设置代码页<br>5D0AH —设置扩展的错误信息<br><br>(1)、功能25H<br>功能描述：设置中断向量表<br>入口参数：AH＝中断号<br>DS:DX＝中断处理程序的入口地址<br>出口参数：无<br><br>(2)、功能30H<br>功能描述：取MS-DOS操作系统的版本号<br>入口参数：AH＝30H<br>出口参数：AL＝0——V 1.0；对其它高版本有：AL＝主要版本号<br>AH＝次版本号(MS-DOS 3.1＝0AH，...)<br>BH＝OEM的序列号(Original Equipment Manufacturer)<br>BL:CX＝24位用户序列号<br><br>(3)、功能33H<br>功能描述：获得或改变操作系统中断的状态。在功能调用期间，将影响^C的检测<br>入口参数：AH＝33H<br>AL＝00H——取状态<br>　＝01H——设置状态，DL＝00/01表示置该状态OFF/ON<br>出口参数：取状态时，DL＝00/01——分别表示OFF/ON<br>说明：<br>　1、若AL中存入其它的功能号，则返回时，AL的值为0FFH；<br>　2、若置AL为5，则启动驱动器号返回在DL中(1-A，2-B，&#8230;)&nbsp;<br><br>(4)、功能34H<br>功能描述：获得InDos标志的远地址，它由DOS维护表示DOS时活跃的<br>入口参数：AH＝34H<br>出口参数：ES:BX＝InDos标志的远地址<br>若该单元值为1，表示DOS功能在执行，否则，则不是。<br><br>(5)、功能35H<br>功能描述：取指定中断号的入口地址<br>入口参数：AH＝35H<br>AL＝中断号<br>出口参数：ES:BX＝中断处理程序的入口地址<br><br>(6)、功能38H<br>功能描述：读取或设置国家信息<br>入口参数：AH＝38H 当读取国家信息时<br>DS:DX＝存放返回信息的地址<br>AL＝0——取当前国家信息<br>AL＝1~0FEH——取国家代码小于255的国家信息<br>AL＝0FFH——取代码大于等于255的国家信息，BX＝国家代码<br>设置国家信息时<br>DX＝0FFFFH<br>AL＝0~0FEH——设置国家代码小于255的国家信息<br>AL＝0FFH——置代码大于等于255的国家信息，BX＝国家代码<br><br>出口参数：CF＝0——调用成功，BX＝国家代码，否则。AX＝错误代码(02H)，其含义见错误代码表 说明国家信息如下所示：<br>字节0-1H：日期格式：0—mdy、1—dmy、2—ymd<br>字节2-6H：货币字符<br>字节7-8H：数值千位分割符<br>字节9-0AH：数值精度分割符<br>字节0B-0CH：日期间隔符<br>字节0D-0EH：时间间隔符<br>字节0FH：货币格式<br>位0=0——货币符号在前，否则，货币符号在后<br>位1=0——货币符号和数据之间无空格，否则，二者之间有一个空格<br>位2=0——货币符号和小数点分开，否则，货币符号代替小数点<br>字节10H：货币的小数位数<br>字节11H：时间格式。位0=0—12小时制，否则，24小时制<br>字节12~15H：Case-Map调用地址<br>字节16~17H：字符串分割符<br>字节18~21H：保留<br><br><br>(7)、功能44H<br>功能描述：输入/输出控制，其子功能描述：<br>　00H—取设备信息01H—取设备信息<br>　02H—从字符设备驱动器接受控制数据03H—发送控制数据到字符设备驱动器<br>　04H—从块设备驱动器接受控制数据 05H—发送控制数据到块设备驱动器<br>　06H—检查输入状态07H—检查输出状态<br>　08H—检查块设备是否为可拆卸设备09H—检查设备是否为远程设备<br>　0AH—检查句柄是否为远程对象0BH—改变共享访问入口数<br>　0CH—字符设备的一般I/O控制信息0DH—块设备的一般I/O控制信息<br>　0EH—读取逻辑驱动器映射关系0FH—设置逻辑驱动器映射关系<br>说明：输入/输出子功能中的00H、06H和07H仅针对文件句柄，子功能00H~ 08H不支持网络设备。<br><br><br>(8)、功能50H<br>功能描述：设置程序段前缀(PSP)地址<br>入口参数：AH＝50H<br>BX＝新的PSP地址<br>出口参数：无<br><br>(9)、功能51H<br>功能描述：读取程序段前缀(PSP)地址<br>入口参数：AH＝51H<br>出口参数：BX＝PSP地址<br><br>(10)、功能59H<br>功能描述：读取扩展的错误信息<br>入口参数：AH＝59H<br>BX＝00H<br>出口参数：AX＝扩展的错误代码，其含义见错误代码表<br>BH＝错误类型，其定义如下： 01h—资源短缺02h—处于临时状态而非错误<br>03h—权限问题04h—系统软件内部错误<br>05h—硬件失败06h—系统软件失败，但不是活跃进程失败<br>07h—应用程序错08h—文件或数据项未发现<br>09h—文件或数据项类型或格式错0Ah—文件或数据项相互加锁<br>0Bh—驱动器中坏磁盘，磁盘中坏区域或存储问题<br>0Ch—其它错误<br><br>BL＝建议采用的措施，其定义如下：<br>　01h — 重试若干次后，再选"终止"或"忽略"<br>　02h — 重试若干次(二次之间要等待)后，再选"终止"或"忽略"<br>　03h — 从用户获取正确的信息<br>　04h — 终止应用程序，并清除其所使用资源<br>　05h — 立即终止程序，但没有清除其资源<br>　06h — 忽略错误<br>　07h — 消除错误原因，再重试<br>CH＝错误地点，其定义如下：<br>　01h — 不知道<br>　02h — 块设备(磁盘或磁盘模拟器)<br>　03h — 网络<br>　04h — 串行设备<br>　05h — 内存<br>ES:DI＝插入磁盘标签的字符串，若AX＝0022h(非法改变磁盘)<br><br>(11)、功能5EH<br>功能描述：读取机器名，读取/设置打印机配置 子功能号功能描述<br>00h读取机器名<br>02h设置打印机安装字符串<br>03h读取打印机安装字符串<br><br>①、子功能1<br>入口参数：AH＝5EH<br>AL＝00H<br>DS:DX＝接受字符串缓冲区的地址<br>出口参数：CF＝1——操作失败，AX＝错误号(01H)，其含义见错误代码表，否则，<br>CH＝00H——机器名未定义，否则，机器名已定义<br>CL＝NetBIOS名称号(当CH&#8800;00H时)<br>DS:DX＝标识符地址(当CH&#8800;00H时)<br>②、子功能2<br>入口参数：AH＝5EH<br>AL＝02H<br>BX＝重定向列表索引<br>CX＝安装字符串的长度<br>DS:SI＝安装字符串的地址<br>出口参数：CF＝0——操作成功，否则，AX＝错误号(01H)，其含义见错误代码表<br>③、子功能3<br>入口参数：AH＝5EH<br>AL＝03H<br>BX＝重定向列表索引<br>ES:DI＝接受字符串缓冲区的地址<br>出口参数：CF＝0——操作成功，CX＝接受字符串的长度，否则，AX＝错误号(01H)，其含义见错误代码表<br><br>(12)、功能5FH<br>功能描述：设备重定向 子功能号功能描述<br>02h读取重定向列表索引<br>03h重定向设备<br><br>①、子功能1<br>入口参数：AH＝5FH<br>AL＝02H<br>BX＝重定向列表索引<br>DS:SI＝接受本地设备名的16字节存储区地址<br>ES:DI＝接受网络名的128字节存储区地址<br>出口参数：CF＝1——操作失败，AX＝错误号(01H或12H)，其含义见错误代码表，否则，BH位0＝0H——设备合法，否则，设备非法<br>BL＝设备类型——03H：打印机，04H：驱动器<br>CX＝存储参数值<br>DX＝被破坏<br>BP＝被破坏<br>DS:SI＝存放本地设备名的地址<br>ES:DI＝存放网络名的地址<br>②、子功能2<br>入口参数：AH＝5FH<br>AL＝03H<br>BL＝设备类型——03H：打印机，04H：驱动器<br>CX＝调用者保存的参数<br>DS:SI＝本地设备名的16字节存储区地址<br>ES:DI＝网络名的128字节存储区地址，紧跟其后是密码<br>出口参数：CF＝0——操作成功，否则，AX＝错误号(01H、03H、05H、08H、0FH或12H)，其含义见错误代码表<br><br>(13)、功能63H<br>功能描述：读取前导字节表<br>入口参数：AH＝63H AL＝子功能<br>＝00H—读取系统前导字节表地址<br>＝01H—设置/清除临时控制台标志(DL＝00H/01H—清除/设置标志)<br>＝02H—读取临时控制台标志值<br><br>出口参数：BX＝1——操作失败，AX＝错误号(01H)，其含义见错误代码表，否则，调用时，<br>　　　若AL＝00H，则，DS:SI＝系统前导字节表地址；<br>　　　若AL＝02H，则，DL＝临时控制台标志值&nbsp;<br><br>(14)、功能65H<br>功能描述：读取扩展的国家信息<br>入口参数：AH＝65H<br>BX＝代码页(-1＝活跃的CON设备)<br>CX＝接受信息的缓冲区大小<br>DX＝国家标识(-1＝缺省)<br>ES:DI＝接受信息的缓冲区地址 AL＝子功能<br>＝01H——读取一般的国家信息<br>＝02H——读取指向大写字母表的指针<br>＝04H——读取指向文件名大写字母表的指针<br>＝06H——读取指向校对表的指针<br>＝07H——读取指向DBCS向量的指针<br><br>出口参数：CF＝0——操作成功，需要的数据存入调用的缓冲区，否则，AX＝错误号(02H)，其含义见错误代码表<br><br>(15)、功能66H<br>功能描述：读取/设置代码页<br>入口参数：AH＝66H<br>AL＝子功能号：01H——读取代码页，02H——选择代码页<br>BX＝选择的代码页(当AL＝02H)<br>出口参数：CF＝0——操作成功，当调用子功能01H时，BX＝活跃的代码页，DX＝缺省的代码页，否则，AX＝错误号(02H或65H)，其含义见错误代码表<br><br>(16)、功能5D0AH<br>功能描述：设置扩展的错误信息<br>入口参数：AX＝5D0AH<br>DS:DX＝扩展错误结构的地址，该结构的说明如下： EXTEND_ERR STRUCT<br>RAx　WORD　?　;AX<br>RBx　WORD　?　;BX<br>RCx　WORD　?　; CX<br>RDx　WORD　?　; DX<br>RSi　WORD　?　; SI<br>RDi　WORD　?　; DI<br>RDs　WORD　?　; DS<br>REs　WORD　?　; ES<br>Pad　WORD　3 DUP(0)<br>EXTEND_ERRENDS<br><br>出口参数：无<br><br>10、进程控制功能(Process-Control Function)<br>00H —终止进程<br>26H —创建新的程序段前缀(PSP)<br>31H —终止并驻留<br>4BH —执行程序(EXEC)<br>4CH —带返回码方式的终止进程<br>4DH —读取返回代码<br>62H —读取PSP地址<br><br>(1)、功能00H<br>功能描述：终止进程。这是程序可以使用的终止进程的方法之一<br>入口参数：AH＝00H<br>CS＝代码段地址<br>出口参数：无<br><br>(2)、功能26H<br>功能描述：把当前正在执行程序的程序段前缀(PSP)拷贝到内存中的指定地址中，并可改变其为其它程序所使用<br>入口参数：AH＝26H<br>DX＝新程序段前缀的段地址<br>出口参数：无<br><br>(3)、功能31H<br>功能描述：终止程序的运行，传递一个返回代码给其父进程，但该程序部分或全部驻留在内存中<br>入口参数：AH＝31H<br>AL＝返回代码号<br>DX＝驻留在内存中的字节数<br>出口参数：无<br><br>(4)、功能4BH<br>功能描述：执行程序(EXEC)<br>入口参数：AH＝4BH<br>ES:BX＝参数块的地址<br>DS:DX＝程序的入口地址<br>AL＝00H——装入并执行程序，03H——以覆盖的形式装入<br>出口参数：CF＝0——操作成功，除CS和IP之外，其它寄存器的值都被破坏，否则，AX＝错误号(01H、02H、03H、05H、08H、0AH或0BH)，其含义见错误代码表<br><br>(5)、功能4CH<br>功能描述：终止程序的执行，并可返回一个代码<br>入口参数：AH＝4CH<br>AL＝返回的代码<br>出口参数：无<br><br>(6)、功能4DH<br>功能描述：父进程获取子进程的返回代码<br>入口参数：AH＝4DH<br>出口参数：AH＝00H——用中断20H、中断21H的功能0或4C正常终止<br>　 ＝01H——用户按^C终止<br>　 ＝02H——因致命错误而终止<br>　 ＝03H——用中断21H的功能31H，或中断27H终止<br>AL＝子进程的返回码：00H——子进程由中断20H、中断21H的功能0或4C终止<br><br>(7)、功能62H<br>功能描述：读取PSP地址<br>入口参数：AH＝62H<br>出口参数：BX＝PSP的偏移量<br><br>11、时间和日期功能(Time and Date Function)<br>2AH —读取日期<br>2BH —设置日期<br>2CH —读取时间<br>2DH —设置时间<br><br>(1)、功能2AH<br>功能描述：取系统日期<br>入口参数：AH＝2AH<br>出口参数：CX＝年(1980~2099)，DH＝月(1~12)，DL＝日(1~31)<br>AL＝星期几(0＝Sunday，1＝Monday，...)<br><br>(2)、功能2BH<br>功能描述：置系统日期<br>入口参数：AH＝2BH<br>CX＝年(1980~2099)，DH＝月(1~12)，DL＝日(1~31)<br>出口参数：AL＝00H——设置成功，0FFH——设置失败<br><br>(3)、功能2CH<br>功能描述：取系统时间<br>入口参数：AH＝2CH<br>出口参数：CH＝时(0~23)，CL＝分(0~59)，DL＝秒(0~59)，AL＝百分秒(0~99)<br><br>(4)、功能2DH<br>功能描述：置系统时间<br>入口参数：AH＝2DH<br>CH＝时(0~23)，CL＝分(0~59)，DL＝秒(0~59)，AL＝百分秒(0~99)<br>出口参数：出口参数：AL＝00H——设置成功，0FFH——设置失败<br><br>2、鼠标功能中断INT 33H<br>00H —初始化鼠标<br>01H —显示鼠标指针<br>02H —隐藏鼠标指针<br>03H —读取鼠标位置及其按钮状态<br>04H —设置鼠标指针位置<br>05H —读取鼠标按键信息<br>06H —读取鼠标按钮释放信息<br>07H —设置鼠标水平边界<br>08H —设置鼠标垂直边界<br>09H —设置图形鼠标形状<br>0AH —设置本文鼠标形状<br>0BH —读取鼠标移动计数<br>0CH —为鼠标事件设置处理程序<br>0DH —允许光笔仿真<br>0EH —关闭光笔仿真<br>0FH —设置鼠标计数与象素比<br>10H —设置鼠标指针隐藏区域<br>13H —设置倍速的阈值&nbsp;<br>14H —替换鼠标事件中断<br>15H —读取鼠标驱动器状态的缓冲区大小<br>16H —存储鼠标驱动器状态<br>17H —重装鼠标驱动器状态<br>18H —为鼠标事件设置替换处理程序<br>19H —读取替换处理程序的地址<br>1AH —设置鼠标的灵敏度<br>1BH —读取鼠标的灵敏度<br>1CH —设置鼠标中断速率<br>1DH —为鼠标指针选择显示页<br>1EH —读取鼠标指针的显示页<br>1FH —禁止鼠标驱动程序<br>20H —启动鼠标驱动程序<br>21H —鼠标驱动程序复位<br>22H —设置鼠标驱动程序信息语言<br>23H —读取语种<br>24H —读取鼠标信息<br>25H —读取鼠标驱动程序信息<br>26H —读取最大有效坐标<br><br>(1)、功能00H<br>功能描述：初始化鼠标，该操作只需要执行一次<br>入口参数：AX＝00H<br>出口参数：AX＝0000H——不支持鼠标功能，FFFFH——支持鼠标功能<br>BX＝鼠标按钮个数(在支持鼠标功能时)<br>在支持鼠标功能的情况下，鼠标还被设置如下参数： 1、鼠标指针放在屏幕中央<br>2、如果当前鼠标指针是显示的，则操作后，鼠标指针被隐藏<br>3、鼠标指针的显示页为0<br>4、根据屏幕的显示模式显示鼠标指针：文本—反向显示矩形块，图形—尖头形状<br>5、水平象素比＝8:8，垂直象素比＝16:8<br>6、设置水平和垂直的显示边界为当前显示模式的最大边界<br>7、允许光笔仿真<br>8、双速门槛值＝64<br><br><br>(2)、功能01H<br>功能描述：显示鼠标指针，通常在鼠标初始化后，用此功能显示其指针<br>入口参数：AX＝01H<br>出口参数：无<br><br>(3)、功能02H<br>功能描述：隐藏鼠标指针，一般在程序结束时，调用此功能<br>入口参数：AX＝02H<br>出口参数：无<br><br>(4)、功能03H<br>功能描述：读取鼠标位置及其按钮状态<br>入口参数：AX＝03H<br>出口参数：BX＝按键状态：位0=1——按下左键<br>位1=1——按下右键<br>位2=1——按下中键<br>其它位——保留，内部使用<br>CX＝水平位置<br>DX＝垂直位置<br><br><br>(5)、功能04H<br>功能描述：设置鼠标指针位置<br>入口参数：AX＝04H，CX＝水平位置，DX＝垂直位置<br>出口参数：无<br><br>(6)、功能05H<br>功能描述：读取鼠标按键信息<br>入口参数：AX＝05H，BX＝指定的按键：0—左键，1—右键，2—中键<br>出口参数：AX＝按键状态，参见功能3H中BX的说明<br>BX＝按键次数<br>CX＝水平位置(最后按键时)<br>DX＝垂直位置(最后按键时)<br><br>(7)、功能06H<br>功能描述：读取鼠标按钮释放信息<br>入口参数：AX＝06H，BX＝指定的按键：0—左键，1—右键，2—中键<br>出口参数：AX＝按键状态，参见功能3H中BX的说明<br>BX＝释放的次数<br>CX＝水平位置(最后释放时)<br>DX＝垂直位置(最后释放时)<br><br>(8)、功能07H<br>功能描述：设置鼠标水平边界<br>入口参数：AX＝07H<br>CX＝最小水平位置<br>DX＝最大水平位置<br>出口参数：无，鼠标有可能因新区域变小而自动移进新区域内<br><br>(9)、功能08H<br>功能描述：设置鼠标垂直边界<br>入口参数：AX＝08H<br>CX＝最小垂直位置<br>DX＝最大垂直位置<br>出口参数：无，鼠标有可能因新区域变小而自动移进新区域内<br><br>(10)、功能09H<br>功能描述：设置图形鼠标形状<br>入口参数：AX＝09H<br>BX＝指针的水平位置<br>CX＝指针的垂直位置<br>ES:DX＝16&#215;16位光标的映象地址 参数说明：(BX，CX)是鼠标的指针在16&#215;16点阵中的位置，(0,0)是左上角；<br>ES:DX指向的存储单元内存放16&#215;16点阵的位映象隐码，紧跟其后的是16&#215;16点阵的光标掩码。<br>鼠标指针的显示方法：位映象隐码&#8220;逻辑与&#8221;上屏幕显示区的内容，然后再用光标掩码内容&#8220;异或&#8221;前面运算的结果。<br><br>出口参数：无<br><br>(11)、功能0AH<br>功能描述：设置本文鼠标形状<br>入口参数：AX＝0AH<br>BX＝光标类型： 0 —CX和DX的各位含义如下： 位7~0鼠标指针符号<br>位10~8字符前景色<br>位11亮度<br>位14~12字符背景色<br>位15闪烁<br><br>1 —CX＝光标的起始扫描线<br>DX＝光标的结束扫描线<br><br>出口参数：无<br><br>(12)、功能0BH<br>功能描述：读取鼠标移动计数<br>入口参数：AX＝0BH<br>出口参数：CX＝水平移动距离：正数——向右移，负数——向左移<br>DX＝垂直移动距离：正数——向下移，负数——向上移<br><br>(13)、功能0CH<br>功能描述：为鼠标事件设置处理程序<br>入口参数：AX＝0CH<br>CX＝中断掩码 位0＝1——鼠标指针位置发送变化<br>位1＝1——按下左按钮<br>位2＝1——释放左按钮<br>位3＝1——按下右按钮<br>位4＝1——释放右按钮<br>位5＝1——按下中间按钮<br>位6＝1——释放中间按钮<br>位7~15＝0——保留<br><br>ES:DX＝中断处理程序的地址<br>在进入中断处理程序时，有关寄存器的值含义：<br>　　AX＝中断掩码<br>　　BX＝按键状态<br>　　CX＝鼠标指针的水平位置<br>　　DX＝鼠标指针的垂直位置<br>　　SI＝水平位置的变化量<br>　　DI＝垂直位置的变化量<br>出口参数：无<br><br>(14)、功能0DH<br>功能描述：允许光笔仿真<br>入口参数：AX＝0DH<br>出口参数：无<br><br>(15)、功能0EH<br>功能描述：关闭光笔仿真<br>入口参数：AX＝0EH<br>出口参数：无<br><br>(16)、功能0FH<br>功能描述：设置鼠标计数与象素比<br>入口参数：AX＝0FH<br>CX＝水平比例<br>DX＝垂直比例<br>出口参数：无<br><br>(17)、功能10H<br>功能描述：设置鼠标指针隐藏区域<br>入口参数：AX＝10H<br>CX＝左上角X坐标<br>DX＝左上角Y坐标<br>SI＝右下角X坐标<br>DI＝右下角Y坐标<br>出口参数：无<br><br>(18)、功能13H<br>功能描述：设置倍速的阈值，其缺省值为64<br>入口参数：AX＝13H<br>DX＝阀值<br>出口参数：无<br><br>(19)、功能14H<br>功能描述：替换鼠标事件中断<br>入口参数：AX＝14H<br>CX＝中断掩码<br>ES:DX＝中断处理程序的地址<br>出口参数：CX＝旧的中断掩码<br>ES:DX＝旧的中断处理程序地址<br><br>(20)、功能15H<br>功能描述：读取鼠标驱动器状态的缓冲区大小<br>入口参数：AX＝15H<br>出口参数：BX＝存放鼠标驱动器状态所需缓冲区的大小<br><br>(21)、功能16H<br>功能描述：存储鼠标驱动器状态<br>入口参数：AX＝16H<br>ES:DX＝存储鼠标驱动器状态的地址<br>出口参数：无<br><br>(22)、功能17H<br>功能描述：重装鼠标驱动器状态<br>入口参数：AX＝17H<br>ES:DX＝鼠标驱动器状态的地址<br>出口参数：无<br><br>(23)、功能18H<br>功能描述：为鼠标事件设置可选的处理程序<br>入口参数：AX＝18H<br>CX＝替换中断掩码<br>ES:DX＝替换中断处理程序的地址<br>CF＝0<br>出口参数：无<br><br>(24)、功能19H<br>功能描述：读取替换处理程序的地址<br>入口参数：AX＝19H<br>CX＝替换中断掩码<br>出口参数：若AX＝-1——不成功，否则，ES:DX＝中断处理程序的地址<br><br>(25)、功能1AH<br>功能描述：设置鼠标的灵敏度，其取值1~100<br>入口参数：AX＝1AH<br>BX＝水平灵敏度(每8个象素鼠标需要移动的数量，一般为8)<br>CX＝垂直灵敏度(每8个象素鼠标需要移动的数量，一般为16)<br>DX＝倍速阀值<br>出口参数：无<br><br>(26)、功能1BH<br>功能描述：读取鼠标的灵敏度<br>入口参数：AX＝1BH<br>出口参数：BX＝水平灵敏度<br>CX＝垂直灵敏度<br>DX＝倍速阀值<br><br>(27)、功能1CH<br>功能描述：设置鼠标中断速率<br>入口参数：AX＝1CH<br>BX＝每秒钟中断的次数：0—关中断，1—30/S，2—50/S，3—100/S，4—200/S<br>出口参数：无<br><br>(28)、功能1DH<br>功能描述：为鼠标指针选择显示页<br>入口参数：AX＝1DH<br>BX＝显示页<br>出口参数：无<br><br>(29)、功能1EH<br>功能描述：读取鼠标指针的显示页<br>入口参数：AX＝1EH<br>出口参数：BX＝显示页<br><br>(30)、功能1FH<br>功能描述：禁止鼠标驱动程序<br>入口参数：AX＝1FH<br>出口参数：若AX＝-1——不成功，否则，ES:BX＝鼠标驱动程序的地址<br><br>(31)、功能20H<br>功能描述：启动鼠标驱动程序<br>入口参数：AX＝20H<br>出口参数：无<br><br>(32)、功能21H<br>功能描述：鼠标驱动程序复位<br>入口参数：AX＝21H<br>出口参数：若AX＝-1——不成功，否则，BX＝2<br><br>(33)、功能22H<br>功能描述：设置鼠标驱动程序信息语言<br>入口参数：AX＝22H<br>BX＝语言代码：0—英语，1—法语，2—荷兰语，3—德语，4—瑞典语，5—芬兰语，6—西班牙语，7—葡萄牙语，8—意大利语<br>出口参数：无<br><br>(34)、功能23H<br>功能描述：读取语种<br>入口参数：AX＝23H<br>出口参数：BX＝语言代码<br><br>(35)、功能24H<br>功能描述：读取鼠标信息<br>入口参数：AX＝24H<br>出口参数：BH＝主版本号，BL＝辅版本号<br>CL＝中断请求号<br>CH＝鼠标类型：1－Bus Mouse，2－Serial Mouse，3－InPort Mouse，4－PS/2 Mouse，5－HP Mouse<br><br>(36)、功能25H<br>功能描述：读取鼠标驱动程序信息<br>入口参数：AX＝25H<br>出口参数： AX＝鼠标驱动程序信息： 位15 ——0：驱动程序是.SYS文件，否则，为.COM文件<br>位14——0：不完全鼠标显示驱动程序，否则，为完全的<br>位13-12——00：软件文本光标<br>01：硬件文本光标<br>1X：图形光标<br><br><br>(37)、功能26H<br>功能描述：读取最大有效坐标<br>入口参数：AX＝26H<br>出口参数：BX＝鼠标驱动程序状态<br>CX＝最大水平坐标<br>DX＝最大垂直坐标<br><br>3、其它DOS中断<br>INT 20H —终止程序运行<br>INT 22H —终止处理程序的地址<br>INT 23H —Ctrl+C处理程序<br>INT 24H —致命错误处理程序<br>INT 25H —读磁盘扇区(忽略逻辑结构)<br>INT 26H —写磁盘扇区(忽略逻辑结构)<br>INT 27H —终止，并驻留在内存<br>INT 28H —DOS空闲<br>INT 2FH —多重中断服务<br><br>(1)、中断INT 20H<br>功能描述：终止当前正在运行的程序，它是几种终止程序运行方法之一<br>入口参数：CS＝PSP的段地址<br>出口参数：无<br><br>(2)、中断INT 22H<br>功能描述：终止处理程序的地址，该地址在程序装入内存运行前被放入PSP的0AH~0DH的单元内。该中断指令从不直接书写在程序之中<br><br>(3)、中断INT 23H<br>功能描述：Ctrl+C处理程序。该中断指令从不直接书写在程序之中<br><br>(4)、中断INT 24H<br>功能描述：致命错误处理程序。该中断指令从不直接书写在程序之中<br><br>(5)、中断INT 25H<br>功能描述：绝对读磁盘，直接从逻辑设备中读出数据到内存单元中<br>入口参数：AL＝驱动器号(0=A、1=B、&#8230;&#8230;) 分区容量&#8804;32M，有：CX＝读出的扇区数<br>DX＝起始扇区数<br>DS:BX＝存放数据缓冲区的地址<br>否则，有：CX＝-1<br>DS:BX＝参数块缓冲区的地址，该参数块的结构如下： 字节描述<br>00~03H32位扇区数<br>04~05H 将被读出的扇区数<br>06~07H存放数据的缓冲区的偏移量<br>08~09H存放数据的缓冲区的段地址<br><br><br>出口参数：CF＝0——操作成功，否则，AX＝错误号，其含义见下错误代码表 错误代码错误含义<br>80H附件响应失败<br>40H定位操作失败<br>20H设备控制器失败<br>10H数据错(错误的CRC)<br>08H DMA失败<br>04H需要的扇区未发现<br>02H错误的地址标志<br>01H错误命令<br><br><br>(6)、INT 26H<br>功能描述：绝对写磁盘，直接把内存单元中的内容写入逻辑设备<br>入口参数：与前面的INT 25H相一致<br>出口参数：与前面的INT 25H相一致<br><br>(7)、INT 27H<br>功能描述：终止，并驻留在内存<br>入口参数：CS＝PSP的段值<br>DX＝被保护程序最后一个字节的偏移量再加1<br>出口参数：无<br><br>(8)、INT 28H<br>功能描述：DOS空闲中断<br>入口参数：无<br>出口参数：无<br><br>(9)、INT 2FH<br>功能描述：多重中断服务，允许多个驻留程序通过单个中断与其它进程通信。<br>入口参数：AH＝标识号，AL＝功能号，功能号及其含义如下： 功能号功能描述<br>01H假脱机打印<br>06H驻留ASSIGN命令<br>10H驻留SHARE命令<br>B7H驻留APPEND命令<br><br>出口参数：若入口AL为0，则出口AL＝0FFH，否则，其值取决于处理程序<br><br>BIOS中断:<br>1、显示服务(Video Service——INT 10H)&nbsp;<br>00H —设置显示器模式0CH —写图形象素<br>01H —设置光标形状0DH —读图形象素<br>02H —设置光标位置0EH —在Teletype模式下显示字符<br>03H —读取光标信息0FH —读取显示器模式<br>04H —读取光笔位置10H —颜色<br>05H —设置显示页11H —字体<br>06H、07H —初始化或滚屏12H —显示器的配置<br>08H —读光标处的字符及其属性13H —在Teletype模式下显示字符串<br>09H —在光标处按指定属性显示字符1AH —读取/设置显示组合编码<br>0AH —在当前光标处显示字符1BH —读取功能/状态信息<br>0BH —设置调色板、背景色或边框1CH —保存/恢复显示器状态<br>(1)、功能00H<br>功能描述：设置显示器模式<br>入口参数：AH＝00H<br>AL＝显示器模式，见下表所示<br>出口参数：无<br><br>可用的显示模式如下所列：&nbsp;<br>显示模式显示模式属性显示模式显示模式属性<br>00H40&#215;2516色 文本01H40&#215;2516色 文本<br>02H80&#215;2516色 文本03H80&#215;2516色 文本<br>04H320&#215;2004色05H320&#215;2004色<br>06H640&#215;2002色07H80&#215;252色 文本<br>08H160&#215;20016色09H320&#215;20016色<br>0AH640&#215;2004色0BH保留　<br>0CH保留0DH320&#215;20016色<br>0EH640&#215;20016色0FH640&#215;3502(单色)<br>10H640&#215;3504色10H640&#215;35016色<br>11H640&#215;4802色12H640&#215;48016色<br>13H640&#215;480256色<br><br>对于超级VGA显示卡，我们可用AX＝4F02H和下列BX的值来设置其显示模式。&nbsp;<br>BX显示模式属性BX显示模式属性<br>100H640&#215;400256色101H640&#215;480256色<br>102H800&#215;60016色103H800&#215;600256色<br>104H1024&#215;76816色105H1024&#215;768256色<br>106H1280&#215;102416色107H1280&#215;1024256色<br>108H80&#215;60文本模式109H132&#215;25文本模式<br>10AH132&#215;43文本模式10BH132&#215;50文本模式<br>10CH132&#215;60文本模式<br><br>(2)、功能01H&nbsp;<br>功能描述：设置光标形状<br>入口参数：AH＝01H<br>CH低四位＝光标的起始行<br>CL低四位＝光标的终止行<br>出口参数：无<br><br>(3)、功能02H&nbsp;<br>功能描述：用文本坐标下设置光标位置<br>入口参数：AH＝02H<br>BH＝显示页码<br>DH＝行(Y坐标)<br>DL＝列(X坐标)<br>出口参数：无<br><br>(4)、功能03H&nbsp;<br>功能描述：在文本坐标下，读取光标各种信息<br>入口参数：AH＝03H<br>BH＝显示页码<br>出口参数：CH＝光标的起始行<br>CL＝光标的终止行<br>DH＝行(Y坐标)<br>DL＝列(X坐标)<br><br>(5)、功能04H&nbsp;<br>功能描述：获取当前状态和光笔位置<br>入口参数：AH＝04H<br>出口参数：AH＝00h——光笔未按下/未触发，01h——光笔已按下/已触发<br>BX＝象素列(图形X坐标)<br>CH＝象素行(图形Y坐标，显示模式：04H~06H)<br>CX＝象素行(图形Y坐标，显示模式：0DH~10H)<br>DH＝字符行(文本Y坐标)<br>DL＝字符列(文本X坐标)<br><br>(6)、功能05H&nbsp;<br>功能描述：设置显示页，即选择活动的显示页<br>入口参数：AH＝05H<br>AL＝显示页<br>对于CGA、EGA、MCGA和VGA，其显示页如下表所列： 模式页数显示器类型<br>00H、01H0~7CGA、EGA、MCGA、VGA<br>02H、03H0~3CGA<br>02H、03H0~7EGA、MCGA、VGA<br>07H0~7EGA、VGA<br>0DH0~7EGA、VGA<br>0EH0~3EGA、VGA<br>0FH0~1EGA、VGA<br>10H0~1EGA、VGA<br>对于PCjr：<br>AL＝80H——读取CRT/CPU页寄存器<br>81H——设置CPU页寄存器<br>82H——设置CRT页寄存器<br>83H——设置CRT/CPU页寄存器<br>BH＝CRT页(子功能号82H和83H)<br>BL＝CPU页(子功能号81H和83H)<br><br>出口参数：对于前者，无出口参数，但对PCjr在子功能80H~83H调用下，有：BH＝CRT页寄存器，BL＝CPU页寄存器<br><br>(7)、功能06H和07H&nbsp;<br>功能描述：初始化屏幕或滚屏<br>入口参数：AH＝06H——向上滚屏，07H——向下滚屏<br>AL＝滚动行数(0——清窗口)<br>BH＝空白区域的缺省属性<br>(CH、CL)＝窗口的左上角位置(Y坐标，X坐标)<br>(DH、DL)＝窗口的右下角位置(Y坐标，X坐标)<br>出口参数：无<br><br>(8)、功能08H&nbsp;<br>功能描述：读光标处的字符及其属性<br>入口参数：AH＝08H<br>BH＝显示页码<br>出口参数：AH＝属性<br>AL＝字符<br><br>(9)、功能09H&nbsp;<br>功能描述：在当前光标处按指定属性显示字符<br>入口参数：AH＝09H<br>AL＝字符<br>BH＝显示页码<br>BL＝属性(文本模式)或颜色(图形模式)<br>CX＝重复输出字符的次数<br>出口参数：无<br><br>(10)、功能0AH&nbsp;<br>功能描述：在当前光标处按原有属性显示字符<br>入口参数：AH＝0AH<br>AL＝字符<br>BH＝显示页码<br>BL＝颜色(图形模式，仅适用于PCjr)<br>CX＝重复输出字符的次数<br>出口参数：无<br><br>(11)、功能0BH&nbsp;<br>功能描述：设置调色板、背景色或边框<br>入口参数：AH＝0BH<br>设置颜色：BH＝00H，BL＝颜色<br>选择调色板：BH＝01H，BL＝调色板(320&#215;200、4种颜色的图形模式)<br>出口参数：无<br><br>(12)、功能0CH&nbsp;<br>功能描述：写图形象素<br>入口参数：AH＝0CH<br>AL＝象素值<br>BH＝页码<br>(CX、DX)＝图形坐标列(X)、行(Y)<br>出口参数：无<br><br>(13)、功能0DH&nbsp;<br>功能描述：读图形象素<br>入口参数：AH＝0DH<br>BH＝页码<br>(CX、DX)＝图形坐标列(X)、行(Y)<br>出口参数：AL＝象素值<br><br>(14)、功能0EH&nbsp;<br>功能描述：在Teletype模式下显示字符<br>入口参数：AH＝0EH<br>AL＝字符<br>BH＝页码<br>BL＝前景色(图形模式)<br>出口参数：无<br><br>(15)、功能0FH&nbsp;<br>功能描述：读取显示器模式<br>入口参数：AH＝0FH<br>出口参数：AH＝屏幕字符的列数<br>AL＝显示模式(参见功能00H中的说明)<br>BH＝页码<br><br>(16)、功能10H&nbsp;<br>功能描述：颜色中断。其子功能说明如下： 功能号　子功能名称功能号　子功能名称<br>00H — 设置调色板寄存器01H — 设置边框颜色<br>02H — 设置调色板和边框03H — 触发闪烁/亮显位<br>07H — 读取调色板寄存器08H — 读取边框颜色<br>09H — 读取调色板和边框10H — 设置颜色寄存器<br>12H — 设置颜色寄存器块13H — 设置颜色页状态<br>15H — 读取颜色寄存器17H — 读取颜色寄存器块<br>1AH — 读取颜色页状态1BH — 设置灰度值<br><br><br>(17)、功能11H&nbsp;<br>功能描述：字体中断。其子功能说明如下： 子功能号子功能名称<br>00H装入用户字体和可编程控制器<br>10H装入用户字体和可编程控制器<br>01H装入8&#215;14 ROM字体和可编程控制器<br>11H装入8&#215;14 ROM字体和可编程控制器<br>02H装入8&#215;8 ROM字体和可编程控制器<br>12H装入8&#215;8 ROM字体和可编程控制器<br>03H设置块指示器<br>04H装入8&#215;16 ROM字体和可编程控制器<br>14H装入8&#215;16 ROM字体和可编程控制器<br>20H设置INT 1Fh字体指针<br>21H为用户字体设置INT 43h<br>22H为8&#215;14 ROM字体设置INT 43H<br>23H为8&#215;8 ROM字体设置INT 43H<br>24H为8&#215;16 ROM字体设置INT 43H<br>30H读取字体信息<br><br><br>(18)、功能12H&nbsp;<br>功能描述：显示器的配置中断。其子功能说明如下： 功能号 功能名称 功能号 功能名称<br>10H — 读取配置信息20H — 选择屏幕打印<br>30H — 设置扫描行31H — 允许/禁止装入缺省调色板<br>32H — 允许/禁止显示33H — 允许/禁止灰度求和<br>34H — 允许/禁止光标模拟35H — 切换活动显示<br>36H — 允许/禁止屏幕刷新<br><br><br>(19)、功能13H&nbsp;<br>功能描述：在Teletype模式下显示字符串<br>入口参数：AH＝13H<br>BH＝页码<br>BL＝属性(若AL=00H或01H)<br>CX＝显示字符串长度<br>(DH、DL)＝坐标(行、列)<br>ES:BP＝显示字符串的地址 AL＝显示输出方式<br>0——字符串中只含显示字符，其显示属性在BL中。显示后，光标位置不变<br>1——字符串中只含显示字符，其显示属性在BL中。显示后，光标位置改变<br>2——字符串中含显示字符和显示属性。显示后，光标位置不变<br>3——字符串中含显示字符和显示属性。显示后，光标位置改变<br><br>出口参数：无<br><br>(20)、功能1AH&nbsp;<br>功能描述：读取/设置显示组合编码，仅PS/2有效，在此从略<br><br>(21)、功能1BH&nbsp;<br>功能描述：读取功能/状态信息，仅PS/2有效，在此从略<br><br>(22)、功能1CH&nbsp;<br>功能描述：保存/恢复显示器状态，仅PS/2有效，在此从略<br><br>2、直接磁盘服务(Direct Disk Service——INT 13H)&nbsp;<br>00H —磁盘系统复位0EH —读扇区缓冲区<br>01H —读取磁盘系统状态0FH —写扇区缓冲区<br>02H —读扇区10H —读取驱动器状态<br>03H —写扇区11H —校准驱动器<br>04H —检验扇区12H —控制器RAM诊断<br>05H —格式化磁道13H —控制器驱动诊断<br>06H —格式化坏磁道14H —控制器内部诊断<br>07H —格式化驱动器15H —读取磁盘类型<br>08H —读取驱动器参数16H —读取磁盘变化状态<br>09H —初始化硬盘参数17H —设置磁盘类型<br>0AH —读长扇区18H —设置格式化媒体类型<br>0BH —写长扇区19H —磁头保护<br>0CH —查寻1AH —格式化ESDI驱动器<br>0DH —硬盘系统复位<br><br>(1)、功能00H<br>功能描述：磁盘系统复位<br>入口参数：AH＝00H<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(2)、功能01H&nbsp;<br>功能描述：读取磁盘系统状态<br>入口参数：AH＝01H<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>出口参数：AH＝00H，AL＝状态代码，其定义如下：<br>00H — 无错 01H — 非法命令<br>02H — 地址目标未发现03H — 磁盘写保护(软盘)<br>04H — 扇区未发现05H — 复位失败(硬盘)<br>06H — 软盘取出(软盘)07H — 错误的参数表(硬盘)<br>08H — DMA越界(软盘)09H — DMA超过64K界限<br>0AH — 错误的扇区标志(硬盘)0BH — 错误的磁道标志(硬盘)<br>0CH — 介质类型未发现(软盘)0DH — 格式化时非法扇区号(硬盘)<br>0EH — 控制数据地址目标被发现(硬盘)0FH — DMA仲裁越界(硬盘)<br>10H — 不正确的CRC或ECC编码11H — ECC校正数据错(硬盘)<br>　CRC:Cyclic Redundancy Check code<br>　ECC:Error Checking &amp; Correcting code<br>20H — 控制器失败40H — 查找失败<br>80H — 磁盘超时(未响应)AAH — 驱动器未准备好(硬盘)<br>BBH — 未定义的错误(硬盘)CCH — 写错误(硬盘)<br>E0H — 状态寄存器错(硬盘)FFH — 检测操作失败(硬盘)<br><br>(3)、功能02H&nbsp;<br>功能描述：读扇区<br>入口参数：AH＝02H<br>AL＝扇区数<br>CH＝柱面<br>CL＝扇区<br>DH＝磁头<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，AH＝00H，AL＝传输的扇区数，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(4)、功能03H&nbsp;<br>功能描述：写扇区<br>入口参数：AH＝03H<br>AL＝扇区数<br>CH＝柱面<br>CL＝扇区<br>DH＝磁头<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，AH＝00H，AL＝传输的扇区数，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(5)、功能04H&nbsp;<br>功能描述：检验扇区<br>入口参数：AH＝04H<br>AL＝扇区数<br>CH＝柱面<br>CL＝扇区<br>DH＝磁头<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，AH＝00H，AL＝被检验的扇区数，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(6)、功能05H&nbsp;<br>功能描述：格式化磁道<br>入口参数：AH＝05H<br>AL＝交替(Interleave)<br>CH＝柱面<br>DH＝磁头<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>ES:BX＝地址域列表的地址<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(7)、功能06H&nbsp;<br>功能描述：格式化坏磁道<br>入口参数：AH＝06H<br>AL＝交替<br>CH＝柱面<br>DH＝磁头<br>DL＝80H~0FFH：硬盘<br>ES:BX＝地址域列表的地址<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(8)、功能07H&nbsp;<br>功能描述：格式化驱动器<br>入口参数：AH＝07H<br>AL＝交替<br>CH＝柱面<br>DL＝80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(9)、功能08H&nbsp;<br>功能描述：读取驱动器参数<br>入口参数：AH＝08H<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>出口参数：CF＝1——操作失败，AH＝状态代码，参见功能号01H中的说明，否则， BL＝01H — 360K<br>＝02H — 1.2M<br>＝03H — 720K<br>＝04H — 1.44M<br><br>CH＝柱面数的低8位<br>CL的位7-6＝柱面数的该2位<br>CL的位5-0＝扇区数<br>DH＝磁头数<br>DL＝驱动器数<br>ES:DI＝磁盘驱动器参数表地址<br><br>(10)、功能09H&nbsp;<br>功能描述：初始化硬盘参数<br>入口参数：AH＝09H<br>DL＝80H~0FFH：硬盘(还有有关参数表问题，在此从略)<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(11)、功能0AH&nbsp;<br>功能描述：读长扇区，每个扇区随带四个字节的ECC编码<br>入口参数：AH＝0AH<br>AL＝扇区数<br>CH＝柱面<br>CL＝扇区<br>DH＝磁头<br>DL＝80H~0FFH：硬盘<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，AH＝00H，AL＝传输的扇区数，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(12)、功能0BH&nbsp;<br>功能描述：写长扇区，每个扇区随带四个字节的ECC编码<br>入口参数：AH＝0BH<br>AL＝扇区数<br>CH＝柱面<br>CL＝扇区<br>DH＝磁头<br>DL＝80H~0FFH：硬盘<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，AH＝00H，AL＝传输的扇区数，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(13)、功能0CH&nbsp;<br>功能描述：查寻<br>入口参数：AH＝0CH<br>CH＝柱面的低8位<br>CL(7-6位)＝柱面的高2位<br>DH＝磁头<br>DL＝80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(14)、功能0DH&nbsp;<br>功能描述：硬盘系统复位<br>入口参数：AH＝0DH<br>DL＝80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(15)、功能0EH&nbsp;<br>功能描述：读扇区缓冲区<br>入口参数：AH＝0EH<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(16)、功能0FH&nbsp;<br>功能描述：写扇区缓冲区<br>入口参数：AH＝0FH<br>ES:BX＝缓冲区的地址<br>出口参数：CF＝0——操作成功，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(17)、功能10H&nbsp;<br>功能描述：读取驱动器状态<br>入口参数：AH＝10H<br>DL＝80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(18)、功能11H&nbsp;<br>功能描述：校准驱动器<br>入口参数：AH＝11H<br>DL＝80H~0FFH：硬盘<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(19)、功能12H&nbsp;<br>功能描述：控制器RAM诊断<br>入口参数：AH＝12H<br>出口参数：CF＝0——操作成功，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(20)、功能13H&nbsp;<br>功能描述：控制器驱动诊断<br>入口参数：AH＝13H<br>出口参数：CF＝0——操作成功，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(21)、功能14H&nbsp;<br>功能描述：控制器内部诊断<br>入口参数：AH＝14H<br>出口参数：CF＝0——操作成功，否则，AH＝状态代码，参见功能号01H中的说明<br><br>(22)、功能15H&nbsp;<br>功能描述：读取磁盘类型<br>入口参数：AH＝15H<br>DL＝驱动器，00H~7FH：软盘；80H~0FFH：硬盘<br>出口参数：CF＝1——操作失败，AH＝状态代码，参见功能号01H中的说明， 否则，AH＝00H — 未安装驱动器<br>＝01H — 无改变线支持的软盘驱动器<br>＝02H — 带有改变线支持的软盘驱动器<br>＝03H — 硬盘，CX:DX＝512字节的扇区数<br><br><br>(23)、功能16H&nbsp;<br>功能描述：读取磁盘变化状态<br>入口参数：AH＝16H<br>DL＝00H~7FH：软盘<br>出口参数：CF＝0——磁盘未改变，AH＝00H，否则，AH＝06H，参见功能号01H中的说明<br><br>(24)、功能17H&nbsp;<br>功能描述：设置磁盘类型<br>入口参数：AH＝17H<br>DL＝00H~7FH：软盘 AL＝00H — 未用<br>＝01H — 360K在360K驱动器中<br>＝02H — 360K在1.2M驱动器中<br>＝03H — 1.2M在1.2M驱动器中<br>＝04H — 720K在720K驱动器中<br><br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态编码，参见功能号01H中的说明<br><br>(25)、功能18H&nbsp;<br>功能描述：设置格式化媒体类型<br>入口参数：AH＝18H<br>CH＝柱面数<br>CL＝每磁道的扇区数<br>DL＝00H~7FH：软盘<br>出口参数：CF＝0——操作成功，AH＝00H，ES:DI＝介质类型参数表地址，否则，AH＝状态编码，参见功能号01H中的说明<br><br>(26)、功能19H&nbsp;<br>功能描述：磁头保护，仅在PS/2中有效，在此从略<br><br>(27)、功能1AH&nbsp;<br>功能描述：格式化ESDI驱动器，仅在PS/2中有效，在此从略<br><br>3、串行口服务(Serial Port Service——INT 14H)&nbsp;<br>00H —初始化通信口03H —读取通信口状态<br>01H —向通信口输出字符04H —扩充初始化通信口<br>02H —从通信口读入字符<br><br>(1)、功能00H<br>功能描述：初始化通信口<br>入口参数：AH＝00H<br>DX＝初始化通信口号(0＝COM1，1＝COM2，&#8230;&#8230;)<br>AL＝初始化参数，参数的说明如下： 波特率奇偶位停止位字的位数<br>76543210<br>000 = 110X0 = None0 = 1 bit10 = 7 bits<br>001 = 15001 = Odd1 = 2 bits11 = 8 bits<br>010 = 30011 = Even<br>011 = 600<br>100 = 1200<br>101 = 2400<br>110 = 4800<br>111 = 9600<br><br>对于PS/2，可用INT 14H之功能04H和05H来初始化其通信速率大于9600。<br>出口参数：AH＝通信口状态，各状态位为1时的含义如下： 位7—超时<br>位6—传递移位寄存器为空<br>位5—传递保持寄存器为空<br>位4—发现终止位3—发现帧错误<br>位2—发现奇偶错<br>位1—发现越界错<br>位0—接受数据准备好<br><br>AL＝Modem状态<br>位7—接受单线信号诊断<br>位6—环指示器<br>位5—数据发送准备好<br>位4—清除数据，再发送位3—改变在接受线上的信号诊断<br>位2—后边界环指示器<br>位1—改变&#8220;数据准备好&#8221;状态<br>位0—改变&#8220;清除—发送&#8221;状态<br><br><br>(2)、功能01H&nbsp;<br>功能描述：向通信口输出字符<br>入口参数：AH＝01H<br>AL＝字符<br>DX＝初始化通信口号(0＝COM1，1＝COM2，&#8230;&#8230;)<br>出口参数：AL的值不变<br>AH的位7＝0——操作成功，通信口状态，AH的位6~0是其状态位<br><br>(3)、功能02H&nbsp;<br>功能描述：从通信口读入字符<br>入口参数：AH＝02H<br>DX＝初始化通信口号(0＝COM1，1＝COM2，&#8230;&#8230;)<br>出口参数：AL＝接受的字符<br>AH的位7＝0——操作成功，通信口状态，AH的位6~0是其状态位<br><br>(4)、功能03H&nbsp;<br>功能描述：读取通信口状态<br>入口参数：AH＝03H<br>DX＝初始化通信口号(0＝COM1，1＝COM2，&#8230;&#8230;)<br>出口参数：AH＝通信口状态，AL＝Modem状态，参见功能号00H中的说明<br><br>(5)、功能04H&nbsp;<br>功能描述：扩充初始化通信口，仅在PS/2中有效，在此从略<br><br>4、杂项系统服务(Miscellaneous System Service——INT 15H)&nbsp;<br>00H —开盒式磁带机马达85H —系统请求(SysReq)键<br>01H —关盒式磁带机马达86H —延迟<br>02H —读盒式磁带机87H —移动扩展内存块<br>03H —写盒式磁带机88H —读取扩展内存大小<br>0FH —格式化ESDI驱动器定期中断89H —进入保护模式<br>21H —读/写自检(POST)错误记录90H —设备等待<br>4FH —键盘截听91H —设备加电自检<br>80H —设备打开C0H —读取系统环境<br>81H —设备关闭C1H —读取扩展BIOS数据区地址<br>82H —进程终止C2H —鼠标图形<br>83H —事件等待C3H —设置WatcHdog超时<br>84H —读游戏杆C4H —可编程选项选择<br><br>(1)、功能00H<br>功能描述：开盒式磁带机马达<br>入口参数：AH＝00H<br>出口参数：CF＝0——操作成功，否则，AH＝状态(86H，若未安装盒式磁带机)<br><br>(2)、功能01H<br>功能描述：关盒式磁带机马达<br>入口参数：AH＝01H<br>出口参数：CF＝0——操作成功，否则，AH＝状态(86H，若未安装盒式磁带机)<br><br>(3)、功能02H<br>功能描述：读盒式磁带机<br>入口参数：AH＝02H<br>CX＝读入的字节数<br>ES:BX＝存放数据的缓冲区地址<br>出口参数：CF＝0——操作成功，DX＝实际读入的字节数，ES:BX指向最后一个字节的后面地址，否则，AH＝状态码，其值含义如下： 01H&nbsp;<br>—— CRC校验码错80H —— 非法命令<br>02H —— 位信号混乱86H —— 未安装盒式磁带机<br>04H —— 无发现数据<br><br><br>(4)、功能03H<br>功能描述：写盒式磁带机<br>入口参数：AH＝03H<br>CX＝要写入的字节数<br>ES:BX＝已存数据的缓冲区地址<br>出口参数：CF＝0——操作成功，CX＝00H，ES:BX指向最后一个字节的后面地址，否则，AH＝状态码，其值含义如下： 80H ——&nbsp;<br>非法命令86H —— 未安装盒式磁带机<br><br><br>(5)、功能0FH<br>功能描述：格式化ESDI驱动器定期中断，仅在PS/2中有效，在此从略<br><br>(6)、功能21H<br>功能描述：读/写自检(POST)错误记录，仅在PS/2中有效，在此从略<br><br>(7)、功能4FH<br>功能描述：键盘截听，仅在PS/2中有效，在此从略<br><br>(8)、功能80H<br>功能描述：打开设备<br>入口参数：AH＝80H<br>BX＝设备号<br>CX＝进程号<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态码<br><br>(9)、功能81H<br>功能描述：关闭设备<br>入口参数：AH＝81H<br>BX＝设备号<br>CX＝进程号<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态码<br><br>(10)、功能82H<br>功能描述：进程终止<br>入口参数：AH＝81H<br>BX＝进程号<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态码<br><br>(11)、功能83H<br>功能描述：事件等待<br>入口参数：AH＝83H 若需要事件等待，则：AL＝00H<br>CX:DX＝千分秒<br>ES:BX＝信号量字节的地址<br>否则，调用参数为AL＝01H<br><br>出口参数：若调用时，AL＝00H，操作成功——CF＝0，否则，CF＝1<br><br>(12)、功能84H<br>功能描述：读游戏杆<br>入口参数：AH＝84H<br>DX＝00H——读取开关设置<br>　＝01H——读取阻力输入<br>出口参数：CF＝1H——操作失败，否则，<br>　DX＝00H时，AL＝开关设置(位7～4)<br>　DX＝01H时，AX、BX、CX和DX分别为A(x)、A(y)、B(x)和B(y)的值<br><br>(13)、功能85H&nbsp;<br>功能描述：系统请求(SysReq)键<br>入口参数：AH＝85H<br>AL＝00H——键按下<br>　＝01H——键放开<br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态码<br><br>(14)、功能86H&nbsp;<br>功能描述：延迟<br>入口参数：AH＝86H<br>CX:DX＝千分秒<br>出口参数：CF＝0——操作成功，AH＝00H<br><br>(15)、功能87H&nbsp;<br>功能描述：从常规内存和扩展内存之间移动扩展内存块<br>入口参数：AH＝87H<br>CX＝移动的字数<br>ES:SI＝GDT(Global Descriptor Table)的地址，其结构定义如下： 偏移量存储的信息<br>00h-0Fh保留，但现全为0<br>10h-11h段的长度(2CX-1或更大)<br>12h-14h24位源地址<br>15h访问权限字节(其值为93h)<br>16h-17h保留，但现全为0<br>18h-19h段的长度(2CX-1或更大)<br>1Ah-1Ch 24位目标源地址<br>1Dh访问权限字节(其值为93h)<br>1Eh-2Fh保留，但现全为0<br><br>出口参数：CF＝0——操作成功，AH＝00H，否则，AH＝状态码，其含义如下：<br>　　01H —— RAM奇偶错<br>　　02H —— 异常中断错<br>　　03H —— 20号线门地址失败<br><br>(16)、功能88H&nbsp;<br>功能描述：读取扩展内存大小<br>入口参数：AH＝88H<br>出口参数：AX＝扩展内存字节数(以K为单位)<br><br>(17)、功能89H&nbsp;<br>功能描述：进入保护模式，CPU从实模式进入保护模式<br>入口参数：AH＝89H<br>BH＝IRQ0的中断号<br>BL＝IRQ8的中断号<br>ES:SI＝GDT的地址(参见功能号87H)<br>出口参数：CF＝1——操作失败，AH＝0FFH，否则，AH＝00H，CS、DS、ES和SS都是用户定义的选择器<br><br>(18)、功能90H&nbsp;<br>功能描述：设备等待<br>入口参数：AH＝90H AL＝驱动器类型，具体的驱动器类型定义如下：<br>＝00H~7FH——串行再重用设备<br>＝80H~0BFH——可重入式设备<br>＝0C0H~0FFH——等待访问设备，没有自检功能<br>00h — 磁盘<br>02h — 键盘<br>80h — 网络<br>FDh — 软盘马达启动01h — 软盘<br>03h — 点设备(Pointing Device)<br>FCh — 硬盘复位<br>FEh — 打印机<br><br><br>ES:BX＝对驱动器类型80H~0FFH的请求块地址<br>出口参数：CF＝1——操作失败，否则，AH＝00H<br><br>(19)、功能91H&nbsp;<br>功能描述：设备加电自检<br>入口参数：AH＝91H<br>AL＝00H~7FH——串行再重用设备<br>　＝80H~0BFH——可重入式设备<br>出口参数：AH＝00H<br><br>(20)、功能0C0H&nbsp;<br>功能描述：读取系统环境<br>入口参数：AH＝0C0H<br>出口参数：ES:BX＝配置表地址，配置表的定义如下： 偏移量含义说明<br>00h-01h表的大小(字节数)<br>02h系统模型<br>03h系统子模型<br>04hBIOS版本号<br>05h配置标志，其各位为1时的说明如下：<br>　　位7—DMA通道3使用<br>　　位6—存在从属8259<br>　　位5—实时时钟有效<br>　　位4—键盘截听有效<br>　　位3—等待外部事件有效<br>　　位2—扩展BIOS数据区<br>　　位1—微通道设施<br>　　位0—保留<br>06h-09h保留<br><br><br>(21)、功能C1H&nbsp;<br>功能描述：读取扩展BIOS数据区地址，仅在PS/2中有效，在此从略<br><br>(22)、功能C2H&nbsp;<br>功能描述：鼠标图形，仅在PS/2中有效，在此从略<br><br>(23)、功能C3H&nbsp;<br>功能描述：设置WatcHdog超时，仅在PS/2中有效，在此从略<br><br>(24)、功能C4H<br>功能描述：可编程选项选择，仅在PS/2中有效，在此从略<br><br>5、键盘服务(Keyboard Service——INT 16H)&nbsp;<br>00H、10H —从键盘读入字符03H —设置重复率<br>01H、11H —读取键盘状态04H —设置键盘点击<br>02H, 12H —读取键盘标志05H —字符及其扫描码进栈<br><br>(1)、功能00H和10H<br>功能描述：从键盘读入字符<br>入口参数：AH＝00H——读键盘<br>＝10H——读扩展键盘，可根据0000:0496H单元的内容判断：扩展键盘是否有效<br><br>出口参数：AH＝键盘的扫描码<br>AL＝字符的ASCII码<br><br>(2)、功能01H和11H<br>功能描述：读取键盘状态<br>入口参数：AH＝01H——检查普通键盘<br>＝11H——检查扩展键盘<br><br>出口参数：ZF＝1——无字符输入，否则，AH＝键盘的扫描码，AL＝ASCII码。<br><br>(3)、功能02H和12H<br>功能描述：读取键盘标志<br>入口参数：AH＝02H——普通键盘的移位标志<br>＝12H——扩展键盘的移位标志<br><br>出口参数：AL＝键盘标志(02H和12H都有效)，其各位之值为1时的含义如下： 位7—INS开状态位3—ALT键按下<br>位6—CAPS LOCK开状态位2—CTRL键按下<br>位5—NUM LOCK开状态位1—左SHIFT键按下<br>位4—SCROLL LOCK开状态位0—右SHIFT键按下<br><br>AH＝扩展键盘的标志(12H有效)，其各位之值为1时的含义如下：<br>位7—SysReq键按下位3—右ALT键按下<br>位6—CAPS LOCK键按下位2—右CTRL键按下<br>位5—NUM LOCK键按下位1—左ALT键按下<br>位4—SCROLL键按下位0—左CTRL键按下<br><br><br>(4)、功能03H<br>功能描述：设置重复率<br>入口参数：AH＝03H 对于PC/AT和PS/2：AL＝05H<br>BH＝重复延迟<br>BL＝重复率<br>对于PCjr：AL＝00H——装入缺省的速率和延迟<br>＝01H——增加初始延迟<br>＝02H——重复频率降低一半<br>＝03H——增加延迟和降低一半重复频率<br>＝04H——关闭键盘重复功能<br><br><br>出口参数：无<br><br>(5)、功能04H<br>功能描述：设置键盘点击<br>入口参数：AH＝04H AL＝00H——关闭键盘点击功能<br>＝01H——打开键盘点击功能<br><br>出口参数：无<br><br>(6)、功能05H<br>功能描述：字符及其扫描码进栈<br>入口参数：AH＝05H<br>CH＝字符的描述码<br>CL＝字符的ASCII码<br>出口参数：CF＝1——操作成功，AL＝00H，否则，AL＝01H<br><br>6、并行口服务(Parallel Port Service——INT 17H)&nbsp;<br>00H —向打印机输出字符<br>01H —初始化打印机端口<br>02H —读取打印机状态<br><br>(1)、功能00H<br>功能描述：向打印机输出字符<br>入口参数：AH＝00H<br>AL＝输出的字符<br>DX＝打印机号(0—LPT1，1—LPT2，2—LPT3，&#8230;&#8230;)<br>出口参数：AH＝打印机状态。其各位为1时的含义如下： 位7—打印机空闲 位3—I/O错误<br>位6—打印机响应位2—保留<br>位5—无纸位1—保留<br>位4—打印机被选位0—打印机超时<br><br><br>(2)、功能01H<br>功能描述：初始化打印机端口<br>入口参数：AH＝01H<br>DX＝打印机号(0—LPT1，1—LPT2，2—LPT3，&#8230;&#8230;)<br>出口参数：AH＝打印机状态。各位定义如下功能00H所示<br><br>(3)、功能02H<br>功能描述：读取打印机状态<br>入口参数：AH＝02H<br>DX＝打印机号(0—LPT1，1—LPT2，2—LPT3，&#8230;&#8230;)<br>出口参数：AH＝打印机状态。各位定义如下功能00H所示<br><br>7、时钟服务(Clock Service——INT 1AH)&nbsp;<br>00H —读取时钟&#8220;滴答&#8221;计数06H —设置闹钟<br>01H —设置时钟&#8220;滴答&#8221;计数07H —闹钟复位<br>02H —读取时间0AH —读取天数计数<br>03H —设置时间0BH —设置天数计数<br>04H —读取日期 80H —设置声音源信息&nbsp;<br>05H —设置日期<br><br>(1)、功能00H<br>功能描述：读取时钟&#8220;滴答&#8221;计数<br>入口参数：AH＝00H<br>出口参数：AL＝00H——未过午夜，否则，表示已过午夜<br>CX:DX＝时钟&#8220;滴答&#8221;计数<br><br>(2)、功能01H<br>功能描述：设置时钟&#8220;滴答&#8221;计数<br>入口参数：AH＝01H<br>CX:DX＝时钟&#8220;滴答&#8221;计数<br>出口参数：无<br><br>(3)、功能02H<br>功能描述：读取时间<br>入口参数：AH＝02H<br>出口参数：CH＝BCD码格式的小时<br>CL＝BCD码格式的分钟<br>DH＝BCD码格式的秒<br>DL＝00H——标准时间，否则，夏令时<br>CF＝0——时钟在走，否则，时钟停止<br><br>(4)、功能03H<br>功能描述：设置时间<br>入口参数：AH＝03H<br>CH＝BCD码格式的小时<br>CL＝BCD码格式的分钟<br>DH＝BCD码格式的秒<br>DL＝00H——标准时间，否则，夏令时<br>出口参数：无<br><br>(5)、功能04H<br>功能描述：读取日期<br>入口参数：AH＝04H<br>出口参数：CH＝BCD码格式的世纪<br>CL＝BCD码格式的年<br>DH＝BCD码格式的月<br>DL＝BCD码格式的日<br>CF＝0——时钟在走，否则，时钟停止<br><br>(6)、功能05H<br>功能描述：设置日期<br>入口参数：AH＝05H<br>CH＝BCD码格式的世纪<br>CL＝BCD码格式的年<br>DH＝BCD码格式的月<br>DL＝BCD码格式的日<br>出口参数：无<br><br>(7)、功能06H<br>功能描述：设置闹钟<br>入口参数：AH＝06H<br>CH＝BCD码格式的小时<br>CL＝BCD码格式的分钟<br>DH＝BCD码格式的秒<br>出口参数：CF＝０——操作成功，否则，闹钟已设置或时钟已停止<br><br>(8)、功能07H<br>功能描述：闹钟复位<br>入口参数：AH＝07H<br>出口参数：无<br><br>(9)、功能0AH<br>功能描述：读取天数计数，仅在PS/2有效，在此从略<br><br>(10)、功能0BH<br>功能描述：设置天数计数，仅在PS/2有效，在此从略<br><br>(11)、功能80H<br>功能描述：设置声音源信息<br>入口参数：AH＝80H<br>AL＝声音源<br>＝00H——8253可编程计时器，通道2<br>＝01H——盒式磁带输入<br>＝02H——I/O通道上的"Audio In"<br>＝03H——声音产生芯片<br><br>出口参数：无<br><br>8、直接系统服务(Direct System Service)&nbsp;<br>INT 00H —&#8220;0&#8221;作除数<br>INT 01H —单步中断<br>INT 02H —非屏蔽中断(NMI)<br>INT 03H —断点中断<br>INT 04H —算术溢出错误<br>INT 05H —打印屏幕和BOUND越界<br>INT 06H —非法指令错误<br>INT 07H —处理器扩展无效<br>INT 08H —时钟中断<br>INT 09H —键盘输入<br>INT 0BH —通信口(COM2:)<br>INT 0CH —通信口(COM1:)<br>INT 0EH —磁盘驱动器输入/输出<br>INT 11H —读取设备配置<br>INT 12H —读取常规内存大小(返回值AX为内存容量，以K为单位)<br>INT 18H —ROM BASIC<br>INT 19H —重启动系统<br>INT 1BH —CTRL+BREAK处理程序<br>INT 1CH —用户时钟服务<br>INT 1DH —指向显示器参数表指针<br>INT 1EH —指向磁盘驱动器参数表指针<br>INT 1FH —指向图形字符模式表指针&nbsp;<br><br><br>注：资料来自"小温的专栏"</p>
<center><strong><a href="file:///C:/Documents%20and%20Settings/Administrator/桌面/汇编代码/index.htm"><font face=华文行楷 color=#3333ff size=5><u></u></font></a></strong>&nbsp;</center>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 19:18 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>80868088汇编语言指令集</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55133.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 11:16:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55133.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55133.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55133.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55133.html</trackback:ping><description><![CDATA[<p>一、数据传输指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. <br>&nbsp; &nbsp; 1. 通用数据传送指令. <br>&nbsp; &nbsp; &nbsp; &nbsp; MOV&nbsp; &nbsp; 传送字或字节. <br>&nbsp; &nbsp; &nbsp; &nbsp; MOVSX&nbsp; 先符号扩展,再传送. <br>&nbsp; &nbsp; &nbsp; &nbsp; MOVZX&nbsp; 先零扩展,再传送. <br>&nbsp; &nbsp; &nbsp; &nbsp; PUSH&nbsp; &nbsp; 把字压入堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; POP&nbsp; &nbsp; 把字弹出堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; PUSHA&nbsp; 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; POPA&nbsp; &nbsp; 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; PUSHAD&nbsp; 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; POPAD&nbsp; 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; BSWAP&nbsp; 交换32位寄存器里字节的顺序 <br>&nbsp; &nbsp; &nbsp; &nbsp; XCHG&nbsp; &nbsp; 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) <br>&nbsp; &nbsp; &nbsp; &nbsp; CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) <br>&nbsp; &nbsp; &nbsp; &nbsp; XADD&nbsp; &nbsp; 先交换再累加.( 结果在第一个操作数里 ) <br>&nbsp; &nbsp; &nbsp; &nbsp; XLAT&nbsp; &nbsp; 字节查表转换. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0-FFH); 返回 AL 为查表结果. ( [BX+AL]-&gt;AL ) <br>&nbsp; &nbsp; 2. 输入输出端口传送指令. <br>&nbsp; &nbsp; &nbsp; &nbsp; IN&nbsp; &nbsp; &nbsp; I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) <br>&nbsp; &nbsp; &nbsp; &nbsp; OUT&nbsp; &nbsp; I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 其范围是 0-65535. <br>&nbsp; &nbsp; 3. 目的地址传送指令. <br>&nbsp; &nbsp; &nbsp; &nbsp; LEA&nbsp; &nbsp; 装入有效地址. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LEA DX,string&nbsp; ;把偏移地址存到DX. <br>&nbsp; &nbsp; &nbsp; &nbsp; LDS&nbsp; &nbsp; 传送目标指针,把指针内容装入DS. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LDS SI,string&nbsp; ;把段地址:偏移地址存到DS:SI. <br>&nbsp; &nbsp; &nbsp; &nbsp; LES&nbsp; &nbsp; 传送目标指针,把指针内容装入ES. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LES DI,string&nbsp; ;把段地址:偏移地址存到ES:DI. <br>&nbsp; &nbsp; &nbsp; &nbsp; LFS&nbsp; &nbsp; 传送目标指针,把指针内容装入FS. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LFS DI,string&nbsp; ;把段地址:偏移地址存到FS:DI. <br>&nbsp; &nbsp; &nbsp; &nbsp; LGS&nbsp; &nbsp; 传送目标指针,把指针内容装入GS. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LGS DI,string&nbsp; ;把段地址:偏移地址存到GS:DI. <br>&nbsp; &nbsp; &nbsp; &nbsp; LSS&nbsp; &nbsp; 传送目标指针,把指针内容装入SS. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 例: LSS DI,string&nbsp; ;把段地址:偏移地址存到SS:DI. <br>&nbsp; &nbsp; 4. 标志传送指令. <br>&nbsp; &nbsp; &nbsp; &nbsp; LAHF&nbsp; &nbsp; 标志寄存器传送,把标志装入AH. <br>&nbsp; &nbsp; &nbsp; &nbsp; SAHF&nbsp; &nbsp; 标志寄存器传送,把AH内容装入标志寄存器. <br>&nbsp; &nbsp; &nbsp; &nbsp; PUSHF&nbsp; 标志入栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; POPF&nbsp; &nbsp; 标志出栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; PUSHD&nbsp; 32位标志入栈. <br>&nbsp; &nbsp; &nbsp; &nbsp; POPD&nbsp; &nbsp; 32位标志出栈. <br><br>二、算术运算指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; &nbsp; &nbsp; 　　ADD&nbsp; &nbsp; 加法. <br>&nbsp; &nbsp; &nbsp; &nbsp; ADC&nbsp; &nbsp; 带进位加法. <br>&nbsp; &nbsp; &nbsp; &nbsp; INC&nbsp; &nbsp; 加 1. <br>&nbsp; &nbsp; &nbsp; &nbsp; AAA&nbsp; &nbsp; 加法的ASCII码调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; DAA&nbsp; &nbsp; 加法的十进制调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; SUB&nbsp; &nbsp; 减法. <br>&nbsp; &nbsp; &nbsp; &nbsp; SBB&nbsp; &nbsp; 带借位减法. <br>&nbsp; &nbsp; &nbsp; &nbsp; DEC&nbsp; &nbsp; 减 1. <br>&nbsp; &nbsp; &nbsp; &nbsp; NEC&nbsp; &nbsp; 求反(以 0 减之). <br>&nbsp; &nbsp; &nbsp; &nbsp; CMP&nbsp; &nbsp; 比较.(两操作数作减法,仅修改标志位,不回送结果). <br>&nbsp; &nbsp; &nbsp; &nbsp; AAS&nbsp; &nbsp; 减法的ASCII码调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; DAS&nbsp; &nbsp; 减法的十进制调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; MUL&nbsp; &nbsp; 无符号乘法. <br>&nbsp; &nbsp; &nbsp; &nbsp; IMUL&nbsp; &nbsp; 整数乘法. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), <br>&nbsp; &nbsp; &nbsp; &nbsp; AAM&nbsp; &nbsp; 乘法的ASCII码调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; DIV&nbsp; &nbsp; 无符号除法. <br>&nbsp; &nbsp; &nbsp; &nbsp; IDIV&nbsp; &nbsp; 整数除法. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 以上两条,结果回送: <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 商回送AL,余数回送AH, (字节运算); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 或&nbsp; 商回送AX,余数回送DX, (字运算). <br>&nbsp; &nbsp; &nbsp; &nbsp; AAD&nbsp; &nbsp; 除法的ASCII码调整. <br>&nbsp; &nbsp; &nbsp; &nbsp; CBW&nbsp; &nbsp; 字节转换为字. (把AL中字节的符号扩展到AH中去) <br>&nbsp; &nbsp; &nbsp; &nbsp; CWD&nbsp; &nbsp; 字转换为双字. (把AX中的字的符号扩展到DX中去) <br>&nbsp; &nbsp; &nbsp; &nbsp; CWDE&nbsp; &nbsp; 字转换为双字. (把AX中的字符号扩展到EAX中去) <br>&nbsp; &nbsp; &nbsp; &nbsp; CDQ&nbsp; &nbsp; 双字扩展.&nbsp; &nbsp; (把EAX中的字的符号扩展到EDX中去) <br><br>三、逻辑运算指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; &nbsp; &nbsp; 　　AND&nbsp; &nbsp; 与运算. <br>&nbsp; &nbsp; &nbsp; &nbsp; OR&nbsp; &nbsp; &nbsp; 或运算. <br>&nbsp; &nbsp; &nbsp; &nbsp; XOR&nbsp; &nbsp; 异或运算. <br>&nbsp; &nbsp; &nbsp; &nbsp; NOT&nbsp; &nbsp; 取反. <br>&nbsp; &nbsp; &nbsp; &nbsp; TEST&nbsp; &nbsp; 测试.(两操作数作与运算,仅修改标志位,不回送结果). <br>&nbsp; &nbsp; &nbsp; &nbsp; SHL&nbsp; &nbsp; 逻辑左移. <br>&nbsp; &nbsp; &nbsp; &nbsp; SAL&nbsp; &nbsp; 算术左移.(=SHL) <br>&nbsp; &nbsp; &nbsp; &nbsp; SHR&nbsp; &nbsp; 逻辑右移. <br>&nbsp; &nbsp; &nbsp; &nbsp; SAR&nbsp; &nbsp; 算术右移.(=SHR) <br>&nbsp; &nbsp; &nbsp; &nbsp; ROL&nbsp; &nbsp; 循环左移. <br>&nbsp; &nbsp; &nbsp; &nbsp; ROR&nbsp; &nbsp; 循环右移. <br>&nbsp; &nbsp; &nbsp; &nbsp; RCL&nbsp; &nbsp; 通过进位的循环左移. <br>&nbsp; &nbsp; &nbsp; &nbsp; RCR&nbsp; &nbsp; 通过进位的循环右移. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 以上八种移位指令,其移位次数可达255次. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 移位一次时, 可直接用操作码.&nbsp; 如 SHL AX,1. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 移位&gt;1次时, 则由寄存器CL给出移位次数. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 如&nbsp; MOV CL,04 <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SHL AX,CL <br><br>四、串指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 　DS:SI&nbsp; 源串段寄存器&nbsp; :源串变址. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ES:DI&nbsp; 目标串段寄存器:目标串变址. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CX&nbsp; &nbsp; &nbsp; 重复次数计数器. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AL/AX&nbsp; 扫描值. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; D标志&nbsp; 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Z标志&nbsp; 用来控制扫描或比较操作的结束. <br>&nbsp; &nbsp; &nbsp; &nbsp; MOVS&nbsp; &nbsp; 串传送. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( MOVSB&nbsp; 传送字符.&nbsp; &nbsp; MOVSW&nbsp; 传送字.&nbsp; &nbsp; MOVSD&nbsp; 传送双字. ) <br>&nbsp; &nbsp; &nbsp; &nbsp; CMPS&nbsp; &nbsp; 串比较. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( CMPSB&nbsp; 比较字符.&nbsp; &nbsp; CMPSW&nbsp; 比较字. ) <br>&nbsp; &nbsp; &nbsp; &nbsp; SCAS&nbsp; &nbsp; 串扫描. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 把AL或AX的内容与目标串作比较,比较结果反映在标志位. <br>&nbsp; &nbsp; &nbsp; &nbsp; LODS&nbsp; &nbsp; 装入串. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 把源串中的元素(字或字节)逐一装入AL或AX中. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( LODSB&nbsp; 传送字符.&nbsp; &nbsp; LODSW&nbsp; 传送字.&nbsp; &nbsp; LODSD&nbsp; 传送双字. ) <br>&nbsp; &nbsp; &nbsp; &nbsp; STOS&nbsp; &nbsp; 保存串. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 是LODS的逆过程. <br>&nbsp; &nbsp; &nbsp; &nbsp; REP&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当CX/ECX&lt;&gt;0时重复. <br>&nbsp; &nbsp; &nbsp; &nbsp; REPE/REPZ&nbsp; &nbsp; &nbsp; 当ZF=1或比较结果相等,且CX/ECX&lt;&gt;0时重复. <br>&nbsp; &nbsp; &nbsp; &nbsp; REPNE/REPNZ&nbsp; &nbsp; 当ZF=0或比较结果不相等,且CX/ECX&lt;&gt;0时重复. <br>&nbsp; &nbsp; &nbsp; &nbsp; REPC&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当CF=1且CX/ECX&lt;&gt;0时重复. <br>&nbsp; &nbsp; &nbsp; &nbsp; REPNC&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 当CF=0且CX/ECX&lt;&gt;0时重复. <br><br>五、程序转移指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; 　1&gt;无条件转移指令 (长转移) <br>&nbsp; &nbsp; &nbsp; &nbsp; JMP&nbsp; &nbsp; 无条件转移指令 <br>&nbsp; &nbsp; &nbsp; &nbsp; CALL&nbsp; &nbsp; 过程调用 <br>&nbsp; &nbsp; &nbsp; &nbsp; RET/RETF过程返回. <br>&nbsp; &nbsp; 2&gt;条件转移指令 (短转移,-128到+127的距离内) <br>&nbsp; &nbsp; &nbsp; &nbsp; ( 当且仅当(SF XOR OF)=1时,OP1&lt;OP2 ) <br>&nbsp; &nbsp; &nbsp; &nbsp; JA/JNBE 不小于或不等于时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JAE/JNB 大于或等于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JB/JNAE 小于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JBE/JNA 小于或等于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 以上四条,测试无符号整数运算的结果(标志C和Z). <br>&nbsp; &nbsp; &nbsp; &nbsp; JG/JNLE 大于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JGE/JNL 大于或等于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JL/JNGE 小于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JLE/JNG 小于或等于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 以上四条,测试带符号整数运算的结果(标志S,O和Z). <br>&nbsp; &nbsp; &nbsp; &nbsp; JE/JZ&nbsp; 等于转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JNE/JNZ 不等于时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JC&nbsp; &nbsp; &nbsp; 有进位时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JNC&nbsp; &nbsp; 无进位时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JNO&nbsp; &nbsp; 不溢出时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JNP/JPO 奇偶性为奇数时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JNS&nbsp; &nbsp; 符号位为 "0" 时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JO&nbsp; &nbsp; &nbsp; 溢出转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JP/JPE&nbsp; 奇偶性为偶数时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JS&nbsp; &nbsp; &nbsp; 符号位为 "1" 时转移. <br>&nbsp; &nbsp; 3&gt;循环控制指令(短转移) <br>&nbsp; &nbsp; &nbsp; &nbsp; LOOP&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CX不为零时循环. <br>&nbsp; &nbsp; &nbsp; &nbsp; LOOPE/LOOPZ&nbsp; &nbsp; CX不为零且标志Z=1时循环. <br>&nbsp; &nbsp; &nbsp; &nbsp; LOOPNE/LOOPNZ&nbsp; CX不为零且标志Z=0时循环. <br>&nbsp; &nbsp; &nbsp; &nbsp; JCXZ&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CX为零时转移. <br>&nbsp; &nbsp; &nbsp; &nbsp; JECXZ&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ECX为零时转移. <br>&nbsp; &nbsp; 4&gt;中断指令 <br>&nbsp; &nbsp; &nbsp; &nbsp; INT&nbsp; &nbsp; 中断指令 <br>&nbsp; &nbsp; &nbsp; &nbsp; INTO&nbsp; &nbsp; 溢出中断 <br>&nbsp; &nbsp; &nbsp; &nbsp; IRET&nbsp; &nbsp; 中断返回 <br>&nbsp; &nbsp; 5&gt;处理器控制指令 <br>&nbsp; &nbsp; &nbsp; &nbsp; HLT&nbsp; &nbsp; 处理器暂停, 直到出现中断或复位信号才继续. <br>&nbsp; &nbsp; &nbsp; &nbsp; WAIT&nbsp; &nbsp; 当芯片引线TEST为高电平时使CPU进入等待状态. <br>&nbsp; &nbsp; &nbsp; &nbsp; ESC&nbsp; &nbsp; 转换到外处理器. <br>&nbsp; &nbsp; &nbsp; &nbsp; LOCK&nbsp; &nbsp; 封锁总线. <br>&nbsp; &nbsp; &nbsp; &nbsp; NOP&nbsp; &nbsp; 空操作. <br>&nbsp; &nbsp; &nbsp; &nbsp; STC&nbsp; &nbsp; 置进位标志位. <br>&nbsp; &nbsp; &nbsp; &nbsp; CLC&nbsp; &nbsp; 清进位标志位. <br>&nbsp; &nbsp; &nbsp; &nbsp; CMC&nbsp; &nbsp; 进位标志取反. <br>&nbsp; &nbsp; &nbsp; &nbsp; STD&nbsp; &nbsp; 置方向标志位. <br>&nbsp; &nbsp; &nbsp; &nbsp; CLD&nbsp; &nbsp; 清方向标志位. <br>&nbsp; &nbsp; &nbsp; &nbsp; STI&nbsp; &nbsp; 置中断允许位. <br>&nbsp; &nbsp; &nbsp; &nbsp; CLI&nbsp; &nbsp; 清中断允许位. <br><br>六、伪指令 <br>─────────────────────────────────────── <br>&nbsp; &nbsp; &nbsp; &nbsp; 　　DW&nbsp; &nbsp; &nbsp; 定义字(2字节). <br>&nbsp; &nbsp; &nbsp; &nbsp; PROC&nbsp; &nbsp; 定义过程. <br>&nbsp; &nbsp; &nbsp; &nbsp; ENDP&nbsp; &nbsp; 过程结束. <br>&nbsp; &nbsp; &nbsp; &nbsp; SEGMENT 定义段. <br>&nbsp; &nbsp; &nbsp; &nbsp; ASSUME&nbsp; 建立段寄存器寻址. <br>&nbsp; &nbsp; &nbsp; &nbsp; ENDS&nbsp; &nbsp; 段结束. <br>&nbsp; &nbsp; &nbsp; &nbsp; END&nbsp; &nbsp; 程序结束. </p>
<p>　</p>
<p>注：信息来自&#8220;加密与解密-看雪学院&#8221;<br></p>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 19:16 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>寻址方式总结</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55132.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 11:15:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55132.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55132.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55132.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55132.html</trackback:ping><description><![CDATA[文章作者：东方[E.S.T]<br>信息来源：邪恶八进制<br><br>初学汇编的人往往搞不懂寻址方式，因此我参考《80X86汇编语言程序设计教程》<br>一书在加上个人的理解整理的如下内容供初学者参考。<br><br>表示指令中操作数所在的方法称为寻址方式。<br><br>8086/8088有7种基本的寻址方式：立即寻址，寄存器寻址，直接寻址，寄存器间接<br>寻址,寄存器相对寻址，基址加变址寻址方式，相对基址加变址寻址。<br><br>1 立即数寻址<br>操作数就在指令中，作为指令的一部分，跟在操作码后存放在代码段。<br>eg. mov ah,01h<br>mov ax,1204h&nbsp;<br>;如果立即数是16位的，则高地址放在高位，低地址放在低位<br><br>2 寄存器寻址<br>操作数在寄存器中，指令中指定寄存器号。对于8位操作数，寄存器可以是AL,AH,BL,BH,<br>CL,CH,DL,DH。 对于16位操作数，寄存器可以是AX,BX,CX,DX,BP,SP,SI,DI等<br>eg. mov ah,ch<br>mov bx,ax<br><br>3 直接寻址方式<br>操作数在存储器中，指令直接包含操作数的有效地址EA。<br>eg. mov ax,[1122h] ;将ds:1122的数据放在ax，默认段为DS<br>mov es:[1234],al ;采用了段前缀<br><br>4 寄存器间接寻址<br>操作数在存储器中，操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。在不采用段前<br>缀的情况下， 对于DI,SI,BX默认段为DS,而BP为SS。<br>eg. mov ah,[bx]<br>mov ah,cs:[bx] ;使用了段前缀<br><br>5 寄存器相对寻址<br>操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的<br>内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示，8位要被带<br>符号扩展为16位。<br>eg. mov ah,[bx+6]<br>;段址默认情况与寄存器间接寻址相同<br><br>6 基址加变址寻址<br>操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)加上变址寄存器(SI,DI)的<br>内容。如果有BP，则默认段址为SS,否则为DS.<br>eg. mov ah,[bx+si]<br><br>7 相对基址加变址寻址<br>操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的<br>内容加上8位或16位的位移之和。如果有BP，则默认段址为SS,否则为DS.<br>eg. mov ax,[bx+di-2]<br>mov ax,1234h[bx][di]<br><br>[注]：上面3~7为存储器寻址方式&nbsp;<br><br><br>80386支持8088/8086的各种寻址方式。在立即数和寄存器寻址中，操作数可以达32位宽。<br>在实模式下，80386和8088。8086没什么区别。在保护模式下，段的最大长度是4G。段寄存器内的<br>是段选择子，而不再是段基地址。<br>80386具有灵活的存储器寻址方式，他类似于8088/8086的存储器寻址，不过386的基址寄存器<br>可以是8个通用寄存器，变址寄存器可以是除ESP外的另7个通用寄存器。寻址方式如下<br>|无 | |无 |<br>|EAX| |EAX|<br>|EBX| |EBX| |1|<br>|ECX| |ECX| |2| | 无 |<br>|EDX| + |EDX| * |4| + |8 bit |&nbsp;<br>|ESP| |8| |32 bit|&nbsp;<br>|EBP| |EBP|<br>|ESI| |ESI|<br>|EDI| |EDI|<br>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 19:15 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2）经典的DOS小命令 </title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55131.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 11:12:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55131.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55131.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55131.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55131.html</trackback:ping><description><![CDATA[<p>1.最基本，最常用的，测试物理网络的 <br>ping 192.168.10.59 －t ，参数－t是等待用户去中断测试 </p>
<p>2.查看DNS（对猫用户），还是比较有用处的 <br>A.Win98：winipcfg <br>B.Win2000以上：Ipconfig/all <br>C.WinNt:CMD，然后NSLOOKUP </p>
<p>3.网络信使 <br>Net send 计算机名/IP 传送内容，注意不能跨网段 <br>net stop messenger 停止信使服务，也可以在面板－服务修改 <br>net start messenger 开始信使服务 </p>
<p>4.探测对方对方计算机名，所在的组、域及当前用户名 <br>ping －a IP地址 －t ，只显示NetBios名 <br>nbtstat -a 192.168.10.146 比较全的 </p>
<p>5.netstat -a 显示出你的计算机当前所开放的所有端口 <br>netstat -s -e 比较详细的显示你的网络资料，包括TCP、UDP、ICMP 和 IP的统计等 </p>
<p>6.探测谁连接了我的计算机 <br>arp -a <br>7.捆绑IP和MAC解决局域网内盗用IP的问题 <br>ARP －s 192.168.10.59 00－50－ff－6c－08－75 </p>
<p>8.在网络邻居上隐藏你的计算机 <br>net config server /hidden:yes <br>net config server /hidden:no 则为开 </p>
<p>9.几个net命令 <br>　　A.显示当前工作组服务器列表 net view，当不带选项使用本命令时，它就会显示当前域或网络上的计算机上的列表。 <br>　　比如：查看这个IP上的共享资源，就可以 <br>　　C:\&gt;net view 192.168.10.8 <br>　　在 192.168.10.8 的共享资源 <br>　　资源共享名 类型 用途 注释 <br>　　-------------------------------------- <br>　　网站服务 Disk <br>　　命令成功完成。 <br>　　B.查看计算机上的用户帐号列表 net user <br>　　C.查看网络链接 net use <br>　　例如：net use z: <a href="file://192.168.10.8/movie">\\192.168.10.8\movie</a> 将这个IP的movie共享目录映射为本地的Z盘 <br>　　D.记录链接 net session <br>　　例如： <br>　　C:\&gt;net session <br>　　计算机 用户名 客户类型 打开空闲时间 <br>　　------------------------------------------------------------------------------- <br>　　<a href="file://192.168.10.110/">\\192.168.10.110</a> ROME Windows 2000 2195 0 00:03:12 </p>
<p>　　<a href="file://192.168.10.51/">\\192.168.10.51</a> ROME Windows 2000 2195 0 00:00:39 <br>　　命令成功完成。 </p>
<p>10.路由跟踪命令 <br>　　A.tracert pop.pcpop.com <br>　　B.pathping pop.pcpop.com 除了显示路由外，还提供325S的分析，计算丢失包的％ </p>
<p>11.关于共享安全的几个命令 <br>　　A.查看你机器的共享资源 net share <br>　　B.手工删除共享 <br>　　net share c$ /d <br>　　net share d$ /d <br>　　net share ipc$ /d <br>　　net share admin$ /d <br>　　注意$后有空格。 <br>　　C.增加一个共享： <br>　　c:\net share mymovie=e:\downloads\movie /users:1 <br>　　mymovie 共享成功。 <br>　　同时限制链接用户数为1人。 </p>
<p>12.在DOS行下设置静态IP <br>　　A.设置静态IP <br>　　CMD <br>　　netsh <br>　　netsh&gt;int <br>　　interface&gt;ip <br>　　interface ip&gt;set add "本地链接" static IP地址 mask gateway <br>　　B.查看IP设置 <br>　　interface ip&gt;show address </p>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 19:12 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>1）DOS运行命令</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55130.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 11:09:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55130.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55130.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55130.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55130.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55130.html</trackback:ping><description><![CDATA[gpedit.msc-----组策略 <br>sndrec32-------录音机 <br>Nslookup-------IP地址侦测器 <br>explorer-------打开资源管理器 <br>logoff---------注销命令 <br>tsshutdn-------60秒倒计时关机命令 <br>lusrmgr.msc----本机用户和组 <br>services.msc---本地服务设置 <br>oobe/msoobe /a----检查XP是否激活 <br>notepad--------打开记事本 <br>cleanmgr-------垃圾整理 <br>net start messenger----开始信使服务 <br>compmgmt.msc---计算机管理 <br>net stop messenger-----停止信使服务 <br>conf-----------启动 netmeeting <br>dvdplay--------DVD播放器 <br>charmap--------启动字符映射表 <br>diskmgmt.msc---磁盘管理实用程序 <br>calc-----------启动计算器 <br>dfrg.msc-------磁盘碎片整理程序 <br>chkdsk.exe-----Chkdsk磁盘检查 <br>devmgmt.msc--- 设备管理器 <br>regsvr32 /u *.dll----停止dll文件运行 <br>drwtsn32------ 系统医生 <br>rononce -p ----15秒关机 <br>dxdiag---------检查DirectX信息 <br>regedt32-------注册表编辑器 <br>Msconfig.exe---系统配置实用程序 <br>rsop.msc-------组策略结果集 <br>mem.exe--------显示内存使用情况 <br>regedit.exe----注册表 <br>winchat--------XP自带局域网聊天 <br>progman--------程序管理器 <br>winmsd---------系统信息 <br>perfmon.msc----计算机性能监测程序 <br>winver---------检查Windows版本 <br>sfc /scannow-----扫描错误并复原 <br>taskmgr-----任务管理器（2000／xp／2003）<br>cmd----------DOS命令提示符winver---------检查Windows版本 <br>wmimgmt.msc----打开windows管理体系结构(WMI) <br>wupdmgr--------windows更新程序 <br>wscript--------windows脚本宿主设置 <br>write----------写字板 <br>winmsd---------系统信息 <br>wiaacmgr-------扫描仪和照相机向导 <br>winchat--------XP自带局域网聊天 <br>mem.exe--------显示内存使用情况 <br>Msconfig.exe---系统配置实用程序 <br>mplayer2-------简易widnows media player <br>mspaint--------画图板 <br>mstsc----------远程桌面连接 <br>mplayer2-------媒体播放机 <br>magnify--------放大镜实用程序 <br>mmc------------打开控制台 <br>mobsync--------同步命令 <br>dxdiag---------检查DirectX信息 <br>drwtsn32------ 系统医生 <br>devmgmt.msc--- 设备管理器 <br>dfrg.msc-------磁盘碎片整理程序 <br>diskmgmt.msc---磁盘管理实用程序 <br>dcomcnfg-------打开系统组件服务 <br>ddeshare-------打开DDE共享设置 <br>dvdplay--------DVD播放器 <br>net stop messenger-----停止信使服务 <br>net start messenger----开始信使服务 <br>notepad--------打开记事本 <br>nslookup-------网络管理的工具向导 <br>ntbackup-------系统备份和还原 <br>narrator-------屏幕&#8220;讲述人&#8221; <br>ntmsmgr.msc----移动存储管理器 <br>ntmsoprq.msc---移动存储管理员操作请求 <br>netstat -an----(TC)命令检查接口 <br>syncapp--------创建一个公文包 <br>sysedit--------系统配置编辑器 <br>sigverif-------文件签名验证程序 <br>sndrec32-------录音机 <br>shrpubw--------创建共享文件夹 <br>secpol.msc-----本地安全策略 <br>syskey---------系统加密，一旦加密就不能解开，保护windows xp系统的双重密码 <br>services.msc---本地服务设置 <br>Sndvol32-------音量控制程序 <br>sfc.exe--------系统文件检查器 <br>sfc /scannow---windows文件保护 <br>tsshutdn-------60秒倒计时关机命令 <br>tourstart------xp简介（安装完成后出现的漫游xp程序） <br>taskmgr--------任务管理器 <br>eventvwr-------事件查看器 <br>eudcedit-------造字程序 <br>explorer-------打开资源管理器 <br>packager-------对象包装程序 <br>perfmon.msc----计算机性能监测程序 <br>progman--------程序管理器 <br>regedit.exe----注册表 <br>rsop.msc-------组策略结果集 <br>regedt32-------注册表编辑器 <br>rononce -p ----15秒关机 <br>regsvr32 /u *.dll----停止dll文件运行 <br>regsvr32 /u zipfldr.dll------取消ZIP支持 <br>cmd.exe--------CMD命令提示符 <br>chkdsk.exe-----Chkdsk磁盘检查 <br>certmgr.msc----证书管理实用程序 <br>calc-----------启动计算器 <br>charmap--------启动字符映射表 <br>cliconfg-------SQL SERVER 客户端网络实用程序 <br>Clipbrd--------剪贴板查看器 <br>conf-----------启动netmeeting <br>compmgmt.msc---计算机管理 <br>cleanmgr-------垃圾整理 <br>ciadv.msc------索引服务程序 <br>osk------------打开屏幕键盘 <br>odbcad32-------ODBC数据源管理器 <br>oobe/msoobe /a----检查XP是否激活 lusrmgr.msc----本机用户和组 logoff---------注销命令 <br>iexpress-------木马捆绑工具，系统自带 <br>Nslookup-------IP地址侦测器 <br>fsmgmt.msc-----共享文件夹管理器 <br>utilman--------辅助工具管理器 <br>gpedit.msc-----组策略 
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 19:09 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(三)debug指令详解--DEBUG的有关说明</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55128.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 08:29:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55128.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55128.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55128.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55128.html</trackback:ping><description><![CDATA[1）在DEBUG状态下，所有输入的数值都不能带有后缀区分进制，输入的数值都为16进制数；<br>2）命令可大写或小写，DEBUG命令对大小不敏感；<br>3）可以用&lt;Ctrl&gt;+&lt;Break&gt;键来停止一个命令的执行返回DEBUG状态 <br>4）每个命令只有在回车后才有效；<br>5）按&lt;Ctrl&gt;+&lt;NumeLock&gt;键可暂停移动显示，按任一键继续； <br>6）在DEBUG状态下面，输入？可以得到所有DEBUG命令的使用说明； 
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 16:29 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(二)debug指令详解--DEBUG 命令详解</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55127.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 08:28:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55127.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55127.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55127.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55127.html</trackback:ping><description><![CDATA[★ A命令&nbsp;<br><br>格式：A[地址]&nbsp;<br>功能：将指令直接汇编成机器码输入到内存中。&nbsp;<br><br>参数说明：[地址]指定存放键入汇编语言指令的内存单元的位置。<br>★ C命令&nbsp;<br><br>格式：C[源地址范围][目的地址]&nbsp;<br>功能：比较两内存区域中的内容是否相同。若不同则按字节显示其地址和内容，若相同则不显示任何内容。&nbsp;<br><br>参数说明：[源地址范围]指定要比较的内存第一个区域的起始和结束地址，或起始地址和长度。[目的地址] 指定要比较的第二个内存区域的起始地址。<br>★ D命令&nbsp;<br><br>格式：D[地址] 或D[起始地址][目的地址]&nbsp;<br>功能：以内存映象方式显示内存中的数据。 参数说明：指定要显示内容的内存单元的起始地址和结束地址，或起始地址和长度。如果不指定 [地址]，Debug将从以前 d 命令中所指定的地址范围的末尾开始显示 128个字节的内容；第一次从DS:100处开始显示。<br>★ E命令&nbsp;<br><br>格式：E[地址] [字节串] 或E[地址]<br>功能：从指定的地址开始修改内存值。 参数说明：[地址]指定存放[字节串]第一个内存的位置，[字节串]是要放入内存单元中的数据。&nbsp;<br><br>★ F命令&nbsp;<br><br>格式：F[地址范围] [字节或字节串]&nbsp;<br>功能：将要填写的字节或字节串填入由地址范围指定的存储器中。&nbsp;<br><br>参数说明：[地址范围]指定要填充内存区域的起始和结束地址，或起始地址和长度。[字节或字节串] 指定要输入的数据，可以由十六进制数或引号包括起来的字符串组成。<br>★ G命令&nbsp;<br><br>格式：G[=起始地址] [[断点]&#8230;&#8230;]&nbsp;<br>功能：执行正在调试的程序，当达到断点时停止执行， 并且显示寄存器标志和下一条要执行的命令。 参数说明：[=起始地址]指定当前在内存中要开始执行的指令所在的内存单元的地址。如果不指定[=起始地址]，DEBUG将从 CS:IP 寄存器中的当前地址开始执行程序。[[断点]&#8230;&#8230;] 指定可以设置为 g 命令的部分的 1 到 10 个临时断点。<br>★ H命令&nbsp;<br><br>格式：H[数值][数值]&nbsp;<br>功能：分别显示两个十六进制数相加的和以及第一个数减去第二个数的差。&nbsp;<br><br>参数说明：[数值]表示从 0 到 FFFFh 范围内的任何十六进制数字。&nbsp;<br><br>★ I命令&nbsp;<br><br>格式：I[端口地址]<br>功能：从指定的端口输入并显示(用十六进制)指定端口中的数据（字节）。 参数说明：[端口地址]指定要读取数据的端口地址。<br>★ L命令&nbsp;<br><br>格式：L[地址][盘号:][逻辑扇区号][扇区数]<br>功能：将一个文件或盘的绝对扇区装入存储器。&nbsp;<br><br>参数说明：[地址] 指定要在其中加载文件或扇区内容的内存空间的起始位置。[盘号:] 指定包含读取指定扇区的磁盘的驱动器。该值是数值型，表示为：0 = A, 1 = B, 2 = C，&#8230;&#8230; 等。[逻辑扇区号] 指定要加载其内容的第一个扇区的十六进制数。 [扇区数] 指定要加载其内容的连续扇区的十六进制数。<br>★ M命令&nbsp;<br><br>格式：M[地址范围][起始地址]<br>功能：把地址范围内的存储器单元的内容移到起始地址的指定地址中&nbsp;<br><br>参数说明：[地址范围] 指定要复制内容的内存区域的起始和结束地址，或起始地址和长度。[起始地址] 指定要将 range 内容复制到该位置的起始地址。<br>★ N命令&nbsp;<br><br>格式：N[盘号: ] [路径] [文件名] [扩展名]<br>功能：定义DEBUG使用的文件。&nbsp;<br><br>参数说明：[盘号: ] [路径] [文件名] [扩展名]指定文件所在的盘符，路径，文件名和扩展名。<br>★ O命令&nbsp;<br><br>格式：O[端口地址] [数据]<br>功能：发送数据（字节）到指定的输出端口。&nbsp;<br><br>参数说明：[端口地址]指定要写入数据的端口地址，[数据] 指定要向[端口地址] 中写入的字节值。<br>★ P命令&nbsp;<br><br>格式：P[=地址] [数据]&nbsp;<br>功能：执行一个子程序调用指令，循环指令，中断指令或一个重复字符串指令，停止在下一条指令上。&nbsp;<br><br>参数说明：[=地址] 指定第一 条要执行指令的位置。如果不指定地址，则默认地址是在 CS:IP 寄存器中指定的当前地址，[数据] 指定在将控制返回给 Debug 之前要执行的指令数，默认值为 1。<br>★ Q命令&nbsp;<br><br>格式：Q&nbsp;<br><br>功能：退出DEBUG返回DOS。&nbsp;<br><br>参数说明：无参数。<br>★ R命令&nbsp;<br><br>格式：R[寄存器]&nbsp;<br>功能：1. 显示单个寄存器的内容，并提供修改功能。2. 显示所有寄存器内容， 再加上字母标志位状态以及要执行的下一条指令。3. 显示8个标志位状态， 并提供修改功能。&nbsp;<br><br>参数说明：[寄存器]指定要显示其内容的寄存器名。<br>★ S命令&nbsp;<br><br>格式：S[地址范围] [字符串]<br>功能：在指定的地址范围内查找给定的字符串。&nbsp;<br><br>参数说明：[地址范围] 指定要搜索范围的开始和结束地址。[字符串] 指定要搜索的字节值或字符串。字符串应包括在引号中。<br>★ T命令&nbsp;<br><br>格式：T[=地址] [指令条数]<br>功能: 逐条跟踪程序的执行，每条指令执行后都将显示各寄存器的内容。&nbsp;<br><br>参数说明：[=地址] 指定第一 条要执行指令的位置。如果不指定地址，则默认地址是在 CS:IP 寄存器中指定的当前地址，[指令条数] 指定在将控制返回给 Debug 之前要执行的指令数，默认值为 1。<br>★ U命令&nbsp;<br><br>格式：U[起始地址]或者[地址范围]<br>功能：将内存中的内容转换为汇编语句。&nbsp;<br><br>参数说明：[起始地址]或者[地址范围]指定要反汇编代码的起始地址和结束地址，或起始地址和长度。<br>★ W命令&nbsp;<br><br>格式：W[地址] [盘符:] [起始扇区] [扇区数]&nbsp;<br>功能：将内存中的数据写入磁盘中。&nbsp;<br><br>参数说明：[地址]指定要写到磁盘文件的文件或部分文件的起始内存地址。如果不指定 address，Debug 程序将从 CS:100 开始。[盘符:] 指定包含目标盘的驱动器。该值是数值型：0 = A, 1 = B, 2 = C,等等。[起始扇区] 指定要写入第一个扇区的十六进制数。[扇区数] 指定要写入的扇区数。<br>★ XA命令 格式：XA[页面数] 功能：分配扩展内存的指定页面数 参数说明：[页面数] 指定要分配的扩展内存的 16KB 页数。 ★ XD命令 格式：XD [释放的句柄] 功能：释放指向扩展内存的句柄。 参数说明：[释放的句柄] 指定要释放的句柄。 ★ XM命令 格式：XM [要映射扩展内存的逻辑页面号] [映射到的物理页面号] [句柄] 功能：将属于指定句柄的扩展内存逻辑页映射到扩展内存的物理页。 参数说明：[要映射扩展内存的逻辑页面号]指定要映射到物理页的扩展内存的逻辑页面号。[映射到的物理页面号]指定将映射到的物理页面号。 [句柄]指定句柄。 ★ XS命令 格式：XS 功能：显示有关扩展内存状态的信息。 参数说明：无参数&nbsp;<br><br><br><br><br>★ A命令使用&nbsp;<br><br>说明：用于小段程序的汇编及修改目标程序，所有输入的数字均默认为十六进制，并且不需要以&#8220;h&#8221;字符结尾。用户装入内存的汇编语句是连续存放的，若没有指定地址，并且前面没有使用汇编命令，该语句被汇编到 CS:0100区域，则在它上次停止处开始汇编。&nbsp;<br><br>注意： 1. 直接在A命令下输入跳转指令时，跳转指令后应跟跳转到的语句所在内存单元的地址，不能跟标号；使用跳转指令时，可以指定跳转指令的属性：near，far。near 前缀可以缩写为 ne。如下例所示： -a0100:0100&nbsp;<br><br><br>0100:0100 jmp 102&nbsp;<br><br>0100:0102 jmp near 105&nbsp;<br><br>0100:0105 jmp far 10a 2. 汇编语言指令所涉及到的操作数可以是字操作数也可以是字节操作数，在语句不能判别操作数的类型时，可以使用前缀 word ptr 或者前缀 byte ptr 指定操作数的类型。缩写分别是 ：wo 和 by。如下列所示： -a0100:0100&nbsp;<br><br>0100:0100 dec word ptr [100]&nbsp;<br><br>0100:0102 dec wo ptr [100]&nbsp;<br><br>0100:0105 dec byte ptr [100] 2. 在DEBUG下，应注意区分立即操作数和内存地址的操作数，使用包括在中括号 ([ ])中 的操作数表示内存地址。 3. 在DEBUG下，能够使用的伪指令仅有DB和DW两个，分别用于定义字节和字操作数，此时定义的操作数被存放在该定义指令所在的内存空间中。如下列所示（注意内存空间的变换，why?）： -a 0100:0100&nbsp;<br><br>0100:0100 DB &#8216;ABCDEFG&#8217;&nbsp;<br>0100:0107&nbsp;<br><br>★ C命令使用 说明：如果 [源地址范围]和[目的地址]中内存单元的数据相同，Debug 将不显示任何内容而直接返回到 Debug 提示符。如果有差异，Debug将按如下格式显示： [源地址] 源地址中内容 目的地址中内容[目的地址]&nbsp;<br>如下列所示：&nbsp;<br><br>-C CS:100 105 DS:300；（假定CS=0AF6；DS=1000） 0AF6:0100 88 00 1000:0300&nbsp;<br><br>0AF6:0101 C0 00 1000:0301&nbsp;<br><br>0AF6:0102 89 00 1000:0302&nbsp;<br><br>0AF6:0103 D8 00 1000:0303&nbsp;<br><br>0AF6:0104 65 00 1000:0304&nbsp;<br><br>0AF6:0105 66 00 1000:0305&nbsp;<br><br>★ D命令使用&nbsp;<br><br>说明：当使用 d 命令时，Debug分两个部分显示内存单元内容：左边显示内存单元中存放的十六进制数；右边显示左边的十六进制所表示的ASCII字符，所有不可打印字符用句号(.)表示。每行显示16个字节的内容，在第八和第九个字节之间有一个连字符&#8220;&#8211;&#8220; 。&nbsp;<br><br>从键盘键入下面命令： -d cs:100 10f Debug 按以下格式显示地址范围中的内容（假定CS=0AF6）：&nbsp;<br><br>0AF6:0100 77 61 6E 67 78 69 61 6F-69 6A 6B FF 0E 00 01 FF wangxiaoijk&#8230;.. 键入以下命令，Debug 将从 CS:100 开始显示 20h 个字节的内容： -d cs:100 l 20 键入以下命令，Debug 将显示范围从 DS 段的 100h 到 115h 中所有字节的内容： -d 100 115&nbsp;<br><br>注意：在D命令中若不指定段寄存器，默认规定为DS。<br>★ E命令使用 说明:当使用E命令时，有两种使用格式: 1、 用E命令中包含的字节串替换从指定的地址开始的多个字节的内容； 2、 E命令后不跟字节串，则允许按顺序方式显示和修改内存值，按下空格键显示下一字节内容，若想修改，直接输入相应值；按下减号键显示上一字节内容，若想修改，直接输入相应值。 3、 停止执行 e 命令。按 ENTER 键。在任何字节位置都可以按 ENTER。&nbsp;<br><br>注意：&nbsp;<br><br>1. 若地址部分只输入偏移量，则 E 命令认为段包括在DS寄存器中。&nbsp;<br><br>2. [字节串]的值可以是十六进制字节或字符串。使用空格、逗号或制表符来分隔值。必须将字符串包括在单或双引号中。&nbsp;<br><br>3. 使用E命令后，内存单元中原来的数据将丢失，或者说被新输入的数据覆盖。 从键盘键入下面命令： -E 100 Debug 按下面的格式显示第一个字节的内容(假定DS=0AF6)： 0AF6:0100 EB. 要将该值更改为 61，请在插入点键入(使用符号&#8221;_&#8221;表示) 61，如下所示： 0AF6:0100 AB.61_ 此时,若按下空格键,将显示下一个内存单元中的内容: 0AF6:0100 AB.61 EF._ 此时,又可以在插入点键入新的内容,改写当前显示的内存内容,若不需要改写当前内存单元的内容,可以直接按下空格键,将显示下一个内存单元的内容，如此，一直到按 ENTER 停止 e 命令并返回到 Debug 提示符下。 若使用减号键，操作和按下空格键一样，区别在于将显示上一个内存单元的内容。&nbsp;<br><br>注意：使用该种方法，只能键入16进制数，不能键入字符串。&nbsp;<br><br>从键盘键入下面命令：&nbsp;<br><br>－E DS:100 EF&#8217;ABC&#8217;41&nbsp;<br><br>则执行上面的命令后，从DS:100内存单元开始的5个连续的字节中的内容将被数据0EFH，字符&#8220;A&#8221;&#8220;B&#8221;&#8220;C&#8221;的ASCII码和数据41H替换。&nbsp;<br><br>★ F命令使用 说明：如果[地址范围]包含的字节数比[字节或字节串]中的数值大，Debug 将对[字节或字节串]中提供的值反复使用，直到[地址范围]中的所有字节全部填充。如果在[地址范围]中的任何内存单元损坏或不存在，Debug 将显示错误消息并停止f命令。 如果[字节或字节串] 包含的数值多于[地址范围]中的字节数，Debug 将忽略[字节或字节串]中额外的值。 从键盘键入下面的命令： -F 1000:100 105 &#8216;ABCDEFG&#8217; 指令执行后，DEBUG使用&#8217;ABCDEF&#8217;填充1000：100到1000：105内存单元。 从键盘键入下面的命令： 1000:100 150 40 45 51 52 44 指令执行后，DEBUG反复使用40，45，51，52，44填充从1000:100 到 1000:150的内存单元，直到 50h 个字节全部填满为止。<br>★ G命令使用&nbsp;<br><br>说明：G命令中的＝不能省略，可以只给出偏移地址，默认段地址为当前的CS；若省略＝，则该地址就成为G命令中的断点地址。程序将从指定的开始地址不停的执行程序，一直到遇到结束指令为止，并显示&#8220;Program terminated normally&#8221;。断点地址只对本次G命令有效；下一条G命令若需要断点地址，应重新进行指定。当使用G命令执行程序到断电地址后，显示断点地址处的指令和寄存器的内容。&nbsp;<br><br>注意：断点地址应为一条指令在内存单元中的首字节地址。<br>★ H命令使用&nbsp;<br><br>说明: Debug 首先将指定的两个参数相加，然后用第一个参数中减去第二个参数。并将计算的结果以4位16进制形式显示在下一行中：先显示计算和，然后显示计算差。&nbsp;<br><br>从键盘键入下面的命令：&nbsp;<br><br>H 12 34&nbsp;<br><br>执行后，将在下一行显示：&nbsp;<br><br>0046 FFDE<br>★ I命令使用&nbsp;<br><br>说明：[端口地址]的分为应在0～FFFFH的范围内。&nbsp;<br><br>从键盘键入下面的命令：&nbsp;<br><br>I FFFF&nbsp;<br><br>执行后，将在下一行显示（假定端口0FFFFH中的内容为FFH）：&nbsp;<br><br>FF<br>★ L命令使用 说明: 单个L命令能够装入的最大扇区数是 80H，其中盘号 0，1，2，3&#8230;&#8230;分别代表 A，B，C，&#8230;&#8230;；若出现读盘错，显示错误信息。只有加载特定扇区的内容而不是加载 debug 命令行或最近的 Debug n（名称）命令中指定的文件时，才能使用 drive、start 和 number 参数。 L命令使用情况，可以分为下列几种情况： 1、使用不带参数的L命令 当使用不带参数的L 命令时，在 debug 命令行上指定的文件将加载到从地址 CS:100 开始内存中。Debug 同时将 BX 和 CX 寄存器设置为加载的字节数（CX表示低位，BX表示高位）。如果不在 debug 命令行指定文件，所装入的文件将是最近使用 n 命令经常指定的文件。 2、使用带有 address 参数的L命令&nbsp;<br><br><br>使用带 address 参数的L命令，Debug 将从内存位置 address 开始加载文件或指定扇区的内容。？？？&nbsp;<br><br>3、使用带全部参数的L命令 使用带所有参数的L命令，Debug 将加载指定磁盘扇区的内容而不是加载文件。加载特定扇区的内容，指定范围内的每个扇区均从 drive 读取。Debug 从 start 开始加载，直到在 number 中指定的扇区数中的内容全部被加载。 从键盘键入如下命令(假定文件abc.exe存在当前目录之下)： N wangxiao.exe L<br>则把文件wangxiao.exe加载到CS:100开始的内存单元中。 若要将文件加载到1000：100开始内存单元中，键入： L 1000:100<br>★ M命令使用&nbsp;<br>说明：传送期间，源数据区和目标数据区可以部分重叠；传送后源区数据保持不变，目的区的数据将使用源区中的数据进行改写。<br>从键盘键入如下命令： －M CS:100 150 DS:500&nbsp;<br><br>执行该指令，Debug 首先将 CS:150 地址中的内容复制到地址 DS:550 中，然后将 CS:14F 地址中的内容复制到 CS:54F 中，如此操作直至将 CS:100 地址中的内容复制到地址 DS:500 中。<br>★ N命令使用&nbsp;<br><br>说明: 可同时定义两个操作文件，并将形成的文件控制块相应的设置在内存 CS:5C和CS:6C上，供以后的L和W命令操作之用。 N命令的两个用途：&nbsp;<br><br>1、 可以使用N为后面的L（加载）或W（写入）命令指定所使用的文件。&nbsp;<br><br>2、 可以使用N命令指定正在被调试文件的命令行参数和开关。&nbsp;<br><br>如下所示： 假定在Debug中正在调试的程序wangxiao.com。若想为wangxiao.com指定两个参数并运行此程序。可以键入如下的命令： －N param1,param2 －G 从键盘键入如下的命令序列： -N wang.exe -L -N xiao1.dat xiao2.dat -G 则第一个 N 命令将wang.exe 指定为后接的 L（加载）命令的文件，该命令将wang.exe 加载到内存。第二个N 命令指定wang.exe 将使用的参数。最后G命令将使用参数xiao1.dat和xiao2.dat运行wang.exe文件。此功能如同在 DOS命令行中键入了wang.exe xiao1.dat xiao2.dat。 注意：不要在N命令的第二种形式后再次使用L命令，否则N命令的第二种形式中指定的参数将不起作用。此外，如果在N命令的第二种形式后使用W（写入）命令，将使用名称 xiao2.dat保存正在调试的文件 wang.exe。 每次使用N命令，都将影响下面的四个内存区域： 内存位置 内容 CS:5C 文件 1 的文件控制数据块 (FCB) CS:6C 文件 2 的文件控制数据块 (FCB) CS:80 N命令行的长度（以字符表示） CS:81 N命令行字符的开头 N命令指定的第一个文件名被放在 CS:5C 的 FCB 中。如果指定第二个文件名，第二个文件文将放置到 CS:6C 的 FCB 中。N命令行上键入的字符数（除第一个字符N之外）存储在位置 CS:80。N命令行上的实际字符（再次，除了字母N之外）存储在以 CS:81 开头的位置。★ O 命令使用&nbsp;<br><br>说明：[端口地址]的分为应在0～FFFFH的范围内，[数据]应为字节数据。&nbsp;<br><br>从键盘键入下面的命令;&nbsp;<br><br>－O 73 FF&nbsp;<br><br>指令执行后，端口73H中的数据为0FFH。<br>★ P命令使用&nbsp;<br><br>说明: 使用P命令执行程序，该程序不间断运行，直到循环、重复字符串指令、软件中断或者完成了指定地址的子例程为止，或者直到执行了指定数量的机器指令为止。若被执行的指令不是循环、重复的字符串指令、软件中断或子程序，则P 命令与T（跟踪）命令的作用相同。 考虑程序在地址 CS:168F处有一个 call 指令。要运行完call目标位置的子程序然后将控制返回Debug，从键盘键入下面命令： P=168F 执行指令后，按如下格式显示结果： AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC&nbsp;<br><br>0AF6:1692 BA2601 MOV AX，0126<br>★ Q命令使用&nbsp;<br><br>－Q&nbsp;<br><br>执行该命令后，结束DEBUG，返回DOS。<br>★ R命令使用 说明：可以使用的寄存器名有：AX、BX、CX、DX、SP、BP、SI、DI、DS、ES、SS、CS、IP、PC 及F。键入R命令不跟任何可用的寄存器名，则将显示所有的寄存器的内容以及CS:IP指向的存储单元中的内容；若键入R命令指定了寄存器名称，将以十六进制数形式显示该寄存器中的内容，下一行显示冒号提示符，在冒号提示符后面可以为寄存器键入新的数据。若不需要修改寄存器的数据，直接按 ENTER 键返回 Debug 提示符。如果键入 f 字符代替寄存器名，Debug 将每个标记的当前设置显示为两字母代码，然后显示 Debug提示符。要更改标志的设置，请从下表中键入适当的两字母代码；若不需要修改，直接ENTER 键返回 Debug 提示符。可以修改全部或部分标志位，可以按任何顺序键入新的标志值。不需要在这些值之间留出空格。任何没有指定新值的标志保持不变。在DEBUG下，标志位表示如下： 标志名 标志为1 标志为0 OF OV NV DF DN UP IF EI DI SF NG PL ZF ZR NZ AF AC NA PF PE PO CF CY NC 注意：若输入的寄存器名不在上面的有效寄存器名之内，将显示： bf error R命令后只能跟一个有效的寄存器名。修改标志位如果指定没有在前面的表中列出的标志代码，将显示： bf error 若为一个标志位指定了多个值，Debug 将显示以下消息： df error 要只查看标志的状态，键入以下命令： -R F 将按如下格式显示： NV UP DI NG NZ AC PE NC - _ 此时可以按任意顺序键入一个或多个有效的标志值，其中可以有或没有空格，如下所示： NV UP DI NG NZ AC PE NC &#8211;PLEICY 执行指令后，将使用新的标志位数值代替旧值。 要查看当前所有寄存器的取值、所有标志位的内容和CS:IP指向的内存单元指令，键入以下命令： －R 如果当前位置是 CS:1692，显示外观将类似于以下内容： AX=0000 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=1692 NV UP EI PL NZ AC PO NC 0AF6:1692 BA2601 MOV AX，0126 从键盘上键入如下命令： －R CX 执行后，将显示： CX 0000 : 在冒号后可以位CX键入新值，若不需要改变，直接按ENTER。 ★ S命令使用&nbsp;<br><br>说明: 若在给定的分为内要搜索字节出现多次，将显示出所有地址。隐含地址为DS段值。 假定从范围DS:100 到 DS:110查找是否包含 61，键入下面命令： －S 100 110 61 执行程序后，显示： 0AF6:010A 0AF6:010F － 若要在范围CS:100 到 CS:200内搜索字符串&#8220;wangxiao&#8221;，键入下面的命令： －S CS:100 CS:200 &#8216;wangxiao&#8217;<br>★ T命令使用&nbsp;<br><br>说明: 通常采用跟踪一条指令，但用户也可以用指令条数设定一次跟踪多条指令，每执行一条指令之后，显示所有寄存器的内容和标志状态以及下一条指令在内存中的保存情况。T命令若不跟[=地址]参数，则从当前CS:IP处开始执行，第一次键入的T命令从CS:100处开始执行程序。T命令默认寄存器位CS。参考P命令。&nbsp;<br><br>键入下面得到命令：&nbsp;<br><br>－T&nbsp;<br><br>若是第一次执行，则显示： AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AF6 ES=0AF6 SS=0AF6 CS=0AF6 IP=0103 NV UP EI PL NZ AC PO NC&nbsp;<br><br>0AF6:0103 BA2601 MOV AX，0126<br>若要从CS:200处开始执行程序，则键入下面的命令：&nbsp;<br><br>T=CS:200&nbsp;<br><br><br>★ U命令使用&nbsp;<br><br>说明:U命令中如果没有使用参数，第一次使用，则U命令从CS:IP开始对20h个字节内容进行反汇编；若不是第一次使用，则从前面U命令所显示地址后的第一个地址开始开始对20h个字节内容进行反汇编。 若要从CS:100开始反汇编 8 (10h) 字节，键入下面命令： －U CS:100 108 程序执行后，显示下面的结果： OAF6:01OO 21725F AND [BP+SI+5F],SI OAF6:01O3 C606E3991A MOV BYTE PTR [99E3],1A OAF6:01O8 C3 RET -&nbsp;<br><br><br>★ W命令使用&nbsp;<br><br>说明: 在使用不带参数的W命令之前，BX和CX中应包含要写入文件的字节数，BX为高位，CX为低位，写入的文件为最近N命令命名的文件。不能用W命令写入 .exe 或 .hex 文件。&nbsp;<br><br>从键盘键入下面的命令：&nbsp;<br><br>－N ABC.DAT&nbsp;<br><br>－W&nbsp;<br><br>则执行上面的命令后，把当前CS:100指向的内存开始的数据写入到ABC.DAT文件中，写入字节大小有BX和CX中大小规定。 假定要将起始地址为 DS:200 的内存内容写入到驱动器A的磁盘中。需要将数据从磁盘的逻辑扇区号 10H 开始并持续10H个扇区。则键入下面命令： －W DS:200 0 10 10 ★ XA命令使用&nbsp;<br><br>说明：要使用扩展内存，必须安装符合 4.0 版的 Lotus/Intel/Microsoft 扩展内存规范 (LIM EMS) 的扩展内存设备驱动程序。如果指定的页面数可用，则将显示消息表明所创建的句柄的十六进制数；否则显示相关的错误消息。 要分配扩展内存的8个页面，键入下面命令： －XA 8 执行指令后，若执行成功，显示下面消息： Handle created=0003 若失败，则可能显示： EMS not installed － ★ XD命令使用 说明：见XA命令说明 若要释放句柄 0003，键入下面命令： －XD 0003 执行指令后，若执行成功，显示下面消息： Handle 0003 deallocated 若失败，则可能显示： EMS not installed － ★ XM命令使用 说明：见XA命令说明 若要将句柄 0003 的逻辑页3映射到物理页4，键入下面命令： －XM 3 4 0003 执行指令后，若执行成功，显示下面消息： Logical page 03 mapped to physical page 04 ★ XS命令使用&nbsp;<br><br>说明：见XA命令说明&nbsp;<br>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 16:28 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(一)debug指令详解--DEBUG概述</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55126.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Thu, 05 Mar 2009 08:26:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55126.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/55126.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55126.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/55126.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/55126.html</trackback:ping><description><![CDATA[DEBUG是在DOS状态下面供程序员使用的程序调试工具。它可以用来检查内存中任何地址中的内容以及修改特定地址中的内容。DEBUG还可以用于逐指令执行某个程序，追踪程序的执行过程，比较一条指令执行前后数值变化情况，读写文件与磁盘扇区。此外，DEBUG还可以用于读写端口中的数值。&nbsp;<br><br>在DEBUG状态下，所有数据都作为字节序列，可以用DEBUG把任何类型的文件读入内存中。DEBUG能够处理的数据为两种: 十六进制数和ASCⅡ码，使用两位数表示十六进制数据（0~9，A~F）。在DEBUG中涉及内存中的数据时，要指定数据所在的内存单元的地址，地址的输入格式是: [段地址]: [位移]。如果没有输入地址，DEBUG将假定为当前内存段，从位于地址100H的字节开始。前100H字节保留给程序段前缀使用（称PSP结构，包含程序执行的各种信息），该区域用于建立DOS与程序之间的联系。在DEBUG中，使用四位十六进制数表示地址（0~9，A~F）。<br>DEBUG输入数据时有两种方法: 提示方法和非提示方法。在提示方法下，输入要求输入数据的命令，后跟保存数据的地址。执行后可以看到该地址中已有的内容及一个冒号提示符。此时可以在提示符下输入一个新的值或者按下回车键或CTRL+C回到&#8220;—&#8221;提示符。在非提示方法下，输入保持数据的内存地址以及要输入的数据。 DEBUG的启动： 进入DOS状态下，键入DEBUG &#8207;，按ENTER键，如： C:\&gt;DEBUG &#8207;，则屏幕显示： －&nbsp;<br><br>符号&#8220;－&#8221;是进入DEBUG的提示符，在该提示符下可键入任意DEBUG命令。&nbsp;<br><br>DEBUG的退出：&nbsp;<br><br>在DEBUG的提示符后输入Q命令，按ENTER键，则退出DEBUG返回DOS。&nbsp;<br><br>DEBUG的使用：&nbsp;<br><br>在DEBUG的提示符后输入DEBUG命令，按ENTER键。 
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/55126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-03-05 16:26 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/03/05/55126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>汇编语言  (王爽)</title><link>http://www.cnitblog.com/shuyezi122/archive/2009/02/20/54767.html</link><dc:creator>小叶子</dc:creator><author>小叶子</author><pubDate>Fri, 20 Feb 2009 08:19:00 GMT</pubDate><guid>http://www.cnitblog.com/shuyezi122/archive/2009/02/20/54767.html</guid><wfw:comment>http://www.cnitblog.com/shuyezi122/comments/54767.html</wfw:comment><comments>http://www.cnitblog.com/shuyezi122/archive/2009/02/20/54767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/shuyezi122/comments/commentRss/54767.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/shuyezi122/services/trackbacks/54767.html</trackback:ping><description><![CDATA[今天下了一本王爽的汇编语言,PDF书<br>也许了解一下汇编对学DELPHI更有帮助<br><br>如你自己有兴趣,也下载一本吧<br><br>经过几天学习,发现这本书真的不错<br>所以么,我也给大家一个下载地址<br>由于这本书的PDF太大,博客里放不开,我就传到了网盘上让大家下载<br>书和答案全有,不过答案感觉有的一些错了,自己找错不是更好的提高么,呵呵.<br><br><a href="http://800.dodisk.cn/down.aspx?down=ok&amp;filepath=shuyezi122%2f%cd%f5%cb%ac%bb%e3%b1%e0%d3%ef%d1%d4.rar">王爽汇编语言下载<a href="http://800.dodisk.cn/down.aspx?down=ok&amp;filepath=shuyezi122%2f%cd%f5%cb%ac%bb%e3%b1%e0%d3%ef%d1%d4.rar"><br></a></a></a><br><a href="http://800.dodisk.cn/down.aspx?down=ok&amp;filepath=shuyezi122%2f%cd%f5%cb%ac%bb%e3%b1%e0%d3%ef%d1%d4%cf%b0%cc%e2%b4%f0%b0%b8.rar">答案下载</a><br><br>
<img src ="http://www.cnitblog.com/shuyezi122/aggbug/54767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/shuyezi122/" target="_blank">小叶子</a> 2009-02-20 16:19 <a href="http://www.cnitblog.com/shuyezi122/archive/2009/02/20/54767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>