﻿<?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博客-技术提高能力,沟通开拓视野</title><link>http://www.cnitblog.com/dotnetbbs/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 10:08:58 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 10:08:58 GMT</pubDate><ttl>60</ttl><item><title>(强帖转一下):我那不堪回首的2007年</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/12/01/37139.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Sat, 01 Dec 2007 13:41:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/12/01/37139.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/37139.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/12/01/37139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/37139.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/37139.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 此强帖，不转对不起作者&nbsp;&nbsp;<a href='http://www.cnitblog.com/dotnetbbs/archive/2007/12/01/37139.html'>阅读全文</a><img src ="http://www.cnitblog.com/dotnetbbs/aggbug/37139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-12-01 21:41 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/12/01/37139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)有母如此,子复何求</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37050.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Thu, 29 Nov 2007 12:01:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37050.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/37050.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37050.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/37050.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/37050.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网吧的趣事真是多&nbsp;&nbsp;<a href='http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37050.html'>阅读全文</a><img src ="http://www.cnitblog.com/dotnetbbs/aggbug/37050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-29 20:01 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)经典造句与经典评语</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37049.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Thu, 29 Nov 2007 11:55:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37049.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/37049.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/37049.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/37049.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 轻松一下,会笑的人活得才有趣&nbsp;&nbsp;<a href='http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37049.html'>阅读全文</a><img src ="http://www.cnitblog.com/dotnetbbs/aggbug/37049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-29 19:55 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/29/37049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写在考网工之前</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/22/36751.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Thu, 22 Nov 2007 11:38:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/22/36751.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36751.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/22/36751.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36751.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36751.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天去书店翻了一下网络工程师教程，<br>晕，不懂的知识点还真多，看来剩下的这五个月要努力了! <br>衷心希望参加过网工考试的朋友分享相关的经验和建议! &nbsp;&nbsp;<a href='http://www.cnitblog.com/dotnetbbs/archive/2007/11/22/36751.html'>阅读全文</a><img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36751.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-22 19:38 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/22/36751.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分享一下Gmail的邀请函</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/18/36485.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Sun, 18 Nov 2007 15:30:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/18/36485.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36485.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/18/36485.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36485.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36485.html</trackback:ping><description><![CDATA[<p>今天看了一下自己的GMail,居然有99个剩余邀请函。<br>哪个朋友有需要,请留下自己的Email地址。<br>另：要搞一个菊花论坛的邀请码，哪位朋友可以给一个给我，谢谢</p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-18 23:30 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/18/36485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)理解原码，反码和补码</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36391.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Fri, 16 Nov 2007 14:50:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36391.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36391.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36391.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36391.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36391.html</trackback:ping><description><![CDATA[<p>相信大家看到这个标题都不屑一顾，因为在任何一本计算机基础知识书的第一章都有他们的解释，但是在书上我们只能找到一些简单的定义，没次看过之后不久就忘了。最近论坛里有人问起这些概念，看到很多人的回复是以前看过现在忘了去看看某某书之类，很少有给出一个合理的解释。于是本人就开始思考（虽然上帝会发笑，我还是要思考。），于是得出了以下的结论。<br>数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚.(摘自&lt;&lt;数学发展史&gt;&gt;有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.<br>数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为</p>
<p>(-127~-0 +0~127)共256个.</p>
<p>&nbsp; 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits</p>
<p>( 1 ) 10-&nbsp; ( 1 )10 =&nbsp; ( 1 )10 + ( -1 )10 =&nbsp; ( 0 )10</p>
<p>(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.</p>
<p>&nbsp; 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:</p>
<p>&nbsp;( 1 )10 -&nbsp; ( 1 ) 10=&nbsp; ( 1 ) 10+ ( -1 ) 10=&nbsp; ( 0 )10</p>
<p>&nbsp;(00000001) 反+ (11111110)反 =&nbsp; (11111111)反 =&nbsp; ( -0 )&nbsp; 有问题.</p>
<p>( 1 )10 -&nbsp; ( 2)10 =&nbsp; ( 1 )10 + ( -2 )10 =&nbsp; ( -1 )10</p>
<p>(00000001) 反+ (11111101)反 =&nbsp; (11111110)反 =&nbsp; ( -1 ) 正确</p>
<p>问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).</p>
<p>于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:</p>
<p>(-128~0~127)共256个.</p>
<p>注意:(-128)没有相对应的原码和反码, (-128) = (10000000)&nbsp; 补码的加减运算如下:</p>
<p>( 1 ) 10-&nbsp; ( 1 ) 10=&nbsp; ( 1 )10 + ( -1 )10 =&nbsp; ( 0 )10</p>
<p>(00000001)补 + (11111111)补 =&nbsp; (00000000)补 = ( 0 ) 正确</p>
<p>( 1 ) 10-&nbsp; ( 2) 10=&nbsp; ( 1 )10 + ( -2 )10 =&nbsp; ( -1 )10</p>
<p>(00000001) 补+ (11111110) 补=&nbsp; (11111111)补 = ( -1 )&nbsp; 正确</p>
<p>&nbsp;&nbsp; 所以补码的设计目的是:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.</p>
<p>⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计</p>
<p>&nbsp; 所有这些转换都是在计算机的最底层进行的，而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧！ <br></p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-16 22:50 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原码,反码,补码和移码的相关概念</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36389.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Fri, 16 Nov 2007 14:48:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36389.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36389.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36389.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36389.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36389.html</trackback:ping><description><![CDATA[<p>一：对于正数，原码和反码，补码都是一样的，都是正数本身。<br>　　对于负数，原码是符号位为1,数值部分取X绝对值的二进制。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 反码是符号位为1,其它位是原码取反。<br>　　　　　　　补码是符号位为1，其它位是原码取反，未位加1。<br>　　　　　　　也就是说，负数的补码是其反码未位加1。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移码就是将符号位取反的补码<br><br>二：在计算机中，实际上只有加法运算，减法运算也要转换为加法运算，<br>　　乘法转换为加法运算，除法转换为减法运算。<br><br>三：在计算机中，对任意一个带有符号的二进制，都是按其补码的形式进行运算和存储的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之所以是以补码方式进行处理，而不按原码和反码方式进行处理，是因为在对带有符号位的<br>　　原码和反码进行运算时，计算机处理起来有问题。(具体原因见<a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36391.html" target=_blank>理解原码,反码与补码</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而按补码方式，<br>　　一方面使符号位能与有效值部分一起参加运算,从而简化运算规则. <br>　　另一方面使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><br>四：补码加、减运算公式<br>　　<br>　　1)：补码加法公式<br>　　　[X+Y]补 ＝ [X]补 + [Y]补<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)：补码减法公式<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [X-Y]补 =&nbsp; [X]补-[Y]补 = [X]补 + [-Y]补<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中：[-Y]补称为负补,求负补的办法是：对补码的每一位(包括符合位)求反，且未位加1.<br><br>五：由补码求原码<br>&nbsp; <br>　　已知一个数的补码，求原码的操作分两种情况：<br>　　&nbsp;如果补码的符号位为&#8220;0&#8221;，表示是一个正数，所以补码就是该数的原码。<br>&nbsp;　　如果补码的符号位为&#8220;1&#8221;，表示是一个负数，求原码的操作可以是：符号位为1；其余各位取反，然后再整个数加1。<br></p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36389.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-16 22:48 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36389.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常见的进制转换</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36383.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Fri, 16 Nov 2007 12:31:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36383.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36383.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36383.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36383.html</trackback:ping><description><![CDATA[<p>简述：<br>进位计数制：是人们利用符号来计数的方法。一种进位计数制包含一组数码符号和两个基本因素。<br>（1）数码：用不同的数字符号来表示一种数制的数值，这些数字符号称为"数码"。<br>（2）基：数制所使用的数码个数称为"基"。<br>（3）权：某数制每一位所具有的值称为"权"。<br><br>进制转换的理论<br>1、二进制数、十六进制数转换为十进制数：用按权展开法<br>&nbsp;&nbsp;&nbsp;&nbsp; 把一个任意R进制数 an an-1 ...a1a0 . a-1 a-2...a-m 转换成十进制数，<br>&nbsp;&nbsp;&nbsp;&nbsp; 其十进制数值为每一位数字与其位权之积的和。<br>&nbsp;&nbsp;&nbsp;&nbsp; an&#215;R n + an-1&#215;R n-1 +&#8230;+ a1&#215;R 1 + a0&#215;R 0 + a-1 &#215;R-1+ a-2&#215;R-2+ &#8230;+ a-m&#215;R-m<br>2、十进制转化成 R 进制<br>&nbsp;&nbsp;&nbsp; &nbsp;整数部分：除以 R取余数，直到商为0，得到的余数即为二进数各位的数码，余数从右到左排列。<br>&nbsp;&nbsp;&nbsp; 小数部分：乘以 R取整数，得到的整数即为二进数各位的数码，整数从左到右排列。<br>3、十六进制转化成二进制<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每一位十六进制数对应二进制的四位，逐位展开。<br>4、二进制转化成十六进制<br>&nbsp;&nbsp;&nbsp;&nbsp; 将二进制数从小数点开始分别向左（对二进制整数）或向右（对二进制小数）每四位组成一组，不足四位补零。<br><br>具体实现<br>一：二进制转换成十进制</p>
<p>&nbsp;&nbsp;&nbsp; 任何一个二进制数的值都用它的按位权展开式表示。<br>&nbsp;&nbsp;&nbsp; 例如：将二进制数(10101.11)2转换成十进制数。&nbsp; <br>&nbsp; <span>（</span><span>10101.11)<strong>2</strong></span><span>＝</span><span>1*2<sup>4</sup></span><span>＋</span><span>0*2<sup>3</sup></span><span>＋</span><span>l*2<sup>2</sup></span><span>＋</span><span>0*2<sup>1</sup></span><span>＋</span><span>1*2<sup>0</sup></span><span>＋</span><span>l*2<sup>-1</sup></span><span>＋</span><span>l*2<sup>-2<br></sup></span><span>&nbsp;&nbsp; ＝</span><span>2<sup>4</sup></span><span>＋</span><span>2<sup>2</sup></span><span>＋</span><span>2<sup>0</sup></span><span>＋</span><span>2<sup>-1</sup>+2<sup>-2</sup></span><span>＝</span><span>(21.75)<strong>10</strong></span><br><br>二：十进制整理转换成二进制</p>
<p>&nbsp;&nbsp;&nbsp; 将十进制整数转换成二进制整数采用&#8220;除2取余法&#8221;。<br>&nbsp;&nbsp;&nbsp;&nbsp; 即将十进制整数除以2，得到一个商和一个余数；再将商除以2，又得到一个商和一个余数；<br>&nbsp;&nbsp;&nbsp;&nbsp; 以此类推，直到商等于零为止。</p>
<p>&nbsp;&nbsp;&nbsp; 每次得到的余数的倒排列，就是对应二进制数的各位数。</p>
&nbsp;&nbsp;&nbsp; <img height=212 src="http://www.gdou.edu.cn/te/BASE/S11.jpg" width=400 border=0><br>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 于是，结果是余数的倒排列，即为：<br>&nbsp;&nbsp;&nbsp;&nbsp; （37）10＝（a5a4a3a2a1a0)＝（100101）2<br><br>三：十进制小数转换成二进制小数<br>&nbsp;&nbsp;&nbsp; 十进制小数转换成二进制小数是用&#8220;乘2取整法&#8221;。即用2逐次去乘十进制小数，<br>&nbsp;&nbsp;&nbsp; 将每次得到的积的整数部分按各自出现的先后顺序依次排列，就得到相对应的二进制小数。<br>&nbsp;&nbsp;&nbsp; 将十进制小数0.375转换成二进制小数，其过程如下<br>&nbsp;&nbsp;&nbsp; <img height=195 src="http://www.gdou.edu.cn/te/BASE/S12.jpg" width=352 align=left border=0></p>
<p><br><br><br><br><br><br><br><br><br><br>最后结果:(0.375)10＝(0.a1a2a3)2＝(0.011)2<br><br><br>四：十六进制转为二进制</p>
<p>&nbsp;&nbsp;&nbsp; 由于2<sup>4</sup>＝16，所以每一位十六进制数要用四位二进制数来表示，也就是将每一位十六进制数表示成四位二进制数。<br>&nbsp;&nbsp;&nbsp; 例：将十六进制数(B6E.9)16转换成二进制数为：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp; E&nbsp;&nbsp; .&nbsp;&nbsp; 9<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1011 0110 1110 .&nbsp; 1001<br>&nbsp;&nbsp;&nbsp;&nbsp; 即（B6E.9)16＝(101101101110.1001)2</p>
<p>&nbsp; <br>五：二进制数转为十六进制<br>&nbsp;&nbsp;&nbsp; 将二进制数转换成十六进制数是将二进数的整数部分从右向左每四位一组，每一组为一位十六进制整数,不足四位时，在前面补0；<br>&nbsp;&nbsp;&nbsp; 而二进制小数转换成十六进制小数是将二进制小数部分从左向右每四位一组，每一组为一位十六进制小数。<br>&nbsp;&nbsp;&nbsp; 最后一组不足四位时，应在后面用0补足四位。</p>
<p>&nbsp;&nbsp; 例：二进制数(1010101011.0110)2，转换成十六进制数为：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0010 1010 1011 ．0110<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;B&nbsp;&nbsp;&nbsp; &nbsp;.&nbsp;&nbsp; &nbsp;6<br>&nbsp;&nbsp; 即：(10 1010 1011.0110)2=(2AB.6)16<br></p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-16 20:31 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/16/36383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>8086寄存器分类</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36289.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Wed, 14 Nov 2007 15:30:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36289.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36289.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36289.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36289.html</trackback:ping><description><![CDATA[<p>一:简述<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寄存器是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件，它们可用来暂存指令、数据和位址。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在中央处理器的控制部件中，包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 包含的寄存器有累加器(ACC)。</p>
<p>二:寄存器的作用<br>&nbsp;&nbsp;&nbsp; 1.可将寄存器内的数据执行算术及逻辑运算<br>&nbsp;&nbsp;&nbsp; 2.存于寄存器内的地址可用来指向内存的某个位置，即寻址<br>&nbsp;&nbsp;&nbsp; 3.可以用来读写数据到电脑的周边设备。</p>
<p>三:寄存器的分类以及相应用途</p>
<p>&nbsp;&nbsp; 1:数据寄存器,一般称之为通用寄存器组</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 8086 有8个8位数据寄存器，<br>&nbsp;&nbsp;&nbsp;&nbsp; 这些8位寄存器可分别组成16位寄存器：<br>&nbsp;&nbsp;&nbsp;&nbsp; AH&amp;AL＝AX：累加寄存器，常用于运算；<br>&nbsp;&nbsp;&nbsp;&nbsp; BH&amp;BL＝BX：基址寄存器，常用于地址索引；<br>&nbsp;&nbsp;&nbsp;&nbsp; CH&amp;CL＝CX：计数寄存器，常用于计数；<br>&nbsp;&nbsp;&nbsp;&nbsp; DH&amp;DL＝DX：数据寄存器，常用于数据传递。</p>
<p>&nbsp;&nbsp; 2:地址寄存器/段地址寄存器</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 为了运用所有的内存空间，8086设定了四个段寄存器，专门用来保存段地址：<br>&nbsp;&nbsp;&nbsp;&nbsp; CS（Code Segment）：代码段寄存器；<br>&nbsp;&nbsp;&nbsp;&nbsp; DS（Data Segment）：数据段寄存器；<br>&nbsp;&nbsp;&nbsp;&nbsp; SS（Stack Segment）：堆栈段寄存器；<br>&nbsp;&nbsp;&nbsp;&nbsp; ES（Extra Segment）：附加段寄存器。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置，通过设定段寄存器CS,DS,SS来指向这些起始位置。<br>&nbsp;&nbsp;&nbsp;&nbsp; 通常是将DS固定,而根据需要修改CS。所以，程序可以在可寻址空间小于64K的情况下被写成任意大小。 <br>&nbsp;&nbsp;&nbsp;&nbsp; 所以，程序和其数据组合起来的大小,限制在DS 所指的64K内，这就是COM文件不得大于64K的原因。</p>
<p>&nbsp;&nbsp; 3：特殊功能的寄存器</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; IP（Instruction Pointer）：指令指针寄存器，与CS配合使用，可跟踪程序的执行过程；<br>&nbsp;&nbsp;&nbsp;&nbsp; SP（Stack Pointer）：堆栈指针，与SS配合使用，可指向目前的堆栈位置。<br>&nbsp;&nbsp;&nbsp;&nbsp; BP（Base Pointer）：基址指针寄存器，可用作SS的一个相对基址位置；<br>&nbsp;&nbsp;&nbsp;&nbsp; SI（Source Index）：源变址寄存器可用来存放相对于DS段之源变址指针；<br>&nbsp;&nbsp;&nbsp;&nbsp; DI（Destination Index）：目的变址寄存器，可用来存放相对于 ES 段之目的变址指针。<br>&nbsp;&nbsp;&nbsp;&nbsp; 还有一个标志寄存器FR(Flag Register)有以下九个有意义的标志:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OF: 溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则称为溢出，OF的值被置为1，否则，OF的值被清为0. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DF: 方向标志DF位用来决定在串操作指令执行时有关指针寄存器发生调整的方向。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF: 中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求，以及CPU内部产生的中断请求。具体规定如下： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)、当IF=1时，CPU可以响应CPU外部的可屏蔽中断发出的中断请求； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)、当IF=0时，CPU不响应CPU外部的可屏蔽中断发出的中断请求。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TF: 状态控制标志位是用来控制CPU操作的，它们要通过专门的指令才能使之发生改变 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SF: 符号标志SF用来反映运算结果的符号位，它与运算结果的最高位相同。在微机系统中，有符号数采用补码表示法，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，SF也就反映运算结果的正负号。运算结果为正数时，SF的值为0，否则其值为1。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZF: 零标志ZF用来反映运算结果是否为0。如果运算结果为0，则其值为1，否则其值为0。在判断运算结果是否为0时，可使用此标志位。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AF: 下列情况下，辅助进位标志AF的值被置为1，否则其值为0： <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)、在字操作时，发生低字节向高字节进位或借位时； <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)、在字节操作时，发生低4位向高4位进位或借位时。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PF: 奇偶标志PF用于反映运算结果中&#8220;1&#8221;的个数的奇偶性。如果&#8220;1&#8221;的个数为偶数，则PF的值为1，否则其值为0。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CF: 进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位，那么，其值为1，否则其值为0。) <br>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-14 23:30 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转)汇编指令集合大全</title><link>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36281.html</link><dc:creator>Alligator</dc:creator><author>Alligator</author><pubDate>Wed, 14 Nov 2007 12:43:00 GMT</pubDate><guid>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36281.html</guid><wfw:comment>http://www.cnitblog.com/dotnetbbs/comments/36281.html</wfw:comment><comments>http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/dotnetbbs/comments/commentRss/36281.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/dotnetbbs/services/trackbacks/36281.html</trackback:ping><description><![CDATA[<p>一：数据传输指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp; 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. <br>&nbsp;&nbsp;&nbsp; 1. 通用数据传送指令. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOV&nbsp;&nbsp;&nbsp; 传送字或字节. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVSX&nbsp; 先符号扩展,再传送. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVZX&nbsp; 先零扩展,再传送. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSH&nbsp;&nbsp;&nbsp; 把字压入堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POP&nbsp;&nbsp;&nbsp; 把字弹出堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSHA&nbsp; 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POPA&nbsp;&nbsp;&nbsp; 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSHAD&nbsp; 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POPAD&nbsp; 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BSWAP&nbsp; 交换32位寄存器里字节的顺序 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XCHG&nbsp;&nbsp;&nbsp; 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XADD&nbsp;&nbsp;&nbsp; 先交换再累加.( 结果在第一个操作数里 ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XLAT&nbsp;&nbsp;&nbsp; 字节查表转换. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0-FFH); 返回 AL 为查表结果. ( [BX+AL]-&gt;AL ) <br>&nbsp;&nbsp;&nbsp; 2. 输入输出端口传送指令. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp;&nbsp; I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其范围是 0-65535. <br>&nbsp;&nbsp;&nbsp; 3. 目的地址传送指令. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LEA&nbsp;&nbsp;&nbsp; 装入有效地址. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LEA DX,string&nbsp; ;把偏移地址存到DX. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LDS&nbsp;&nbsp;&nbsp; 传送目标指针,把指针内容装入DS. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LDS SI,string&nbsp; ;把段地址:偏移地址存到DS:SI. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LES&nbsp;&nbsp;&nbsp; 传送目标指针,把指针内容装入ES. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LES DI,string&nbsp; ;把段地址:偏移地址存到ES:DI. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LFS&nbsp;&nbsp;&nbsp; 传送目标指针,把指针内容装入FS. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LFS DI,string&nbsp; ;把段地址:偏移地址存到FS:DI. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LGS&nbsp;&nbsp;&nbsp; 传送目标指针,把指针内容装入GS. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LGS DI,string&nbsp; ;把段地址:偏移地址存到GS:DI. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LSS&nbsp;&nbsp;&nbsp; 传送目标指针,把指针内容装入SS. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例: LSS DI,string&nbsp; ;把段地址:偏移地址存到SS:DI. <br>&nbsp;&nbsp;&nbsp; 4. 标志传送指令. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LAHF&nbsp;&nbsp;&nbsp; 标志寄存器传送,把标志装入AH. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAHF&nbsp;&nbsp;&nbsp; 标志寄存器传送,把AH内容装入标志寄存器. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSHF&nbsp; 标志入栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POPF&nbsp;&nbsp;&nbsp; 标志出栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PUSHD&nbsp; 32位标志入栈. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POPD&nbsp;&nbsp;&nbsp; 32位标志出栈. </p>
<p>二、算术运算指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; 加法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADC&nbsp;&nbsp;&nbsp; 带进位加法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INC&nbsp;&nbsp;&nbsp; 加 1. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAA&nbsp;&nbsp;&nbsp; 加法的ASCII码调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAA&nbsp;&nbsp;&nbsp; 加法的十进制调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SUB&nbsp;&nbsp;&nbsp; 减法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SBB&nbsp;&nbsp;&nbsp; 带借位减法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEC&nbsp;&nbsp;&nbsp; 减 1. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NEC&nbsp;&nbsp;&nbsp; 求反(以 0 减之). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMP&nbsp;&nbsp;&nbsp; 比较.(两操作数作减法,仅修改标志位,不回送结果). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAS&nbsp;&nbsp;&nbsp; 减法的ASCII码调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAS&nbsp;&nbsp;&nbsp; 减法的十进制调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MUL&nbsp;&nbsp;&nbsp; 无符号乘法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMUL&nbsp;&nbsp;&nbsp; 整数乘法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAM&nbsp;&nbsp;&nbsp; 乘法的ASCII码调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DIV&nbsp;&nbsp;&nbsp; 无符号除法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IDIV&nbsp;&nbsp;&nbsp; 整数除法. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上两条,结果回送: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 商回送AL,余数回送AH, (字节运算); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或&nbsp; 商回送AX,余数回送DX, (字运算). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AAD&nbsp;&nbsp;&nbsp; 除法的ASCII码调整. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CBW&nbsp;&nbsp;&nbsp; 字节转换为字. (把AL中字节的符号扩展到AH中去) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CWD&nbsp;&nbsp;&nbsp; 字转换为双字. (把AX中的字的符号扩展到DX中去) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CWDE&nbsp;&nbsp;&nbsp; 字转换为双字. (把AX中的字符号扩展到EAX中去) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CDQ&nbsp;&nbsp;&nbsp; 双字扩展.&nbsp;&nbsp;&nbsp; (把EAX中的字的符号扩展到EDX中去) </p>
<p>三、逻辑运算指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　AND&nbsp;&nbsp;&nbsp; 与运算. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或运算. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XOR&nbsp;&nbsp;&nbsp; 异或运算. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOT&nbsp;&nbsp;&nbsp; 取反. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEST&nbsp;&nbsp;&nbsp; 测试.(两操作数作与运算,仅修改标志位,不回送结果). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHL&nbsp;&nbsp;&nbsp; 逻辑左移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAL&nbsp;&nbsp;&nbsp; 算术左移.(=SHL) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHR&nbsp;&nbsp;&nbsp; 逻辑右移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAR&nbsp;&nbsp;&nbsp; 算术右移.(=SHR) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROL&nbsp;&nbsp;&nbsp; 循环左移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROR&nbsp;&nbsp;&nbsp; 循环右移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RCL&nbsp;&nbsp;&nbsp; 通过进位的循环左移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RCR&nbsp;&nbsp;&nbsp; 通过进位的循环右移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上八种移位指令,其移位次数可达255次. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移位一次时, 可直接用操作码.&nbsp; 如 SHL AX,1. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移位&gt;1次时, 则由寄存器CL给出移位次数. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如&nbsp; MOV CL,04 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SHL AX,CL </p>
<p>四、串指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　DS:SI&nbsp; 源串段寄存器&nbsp; :源串变址. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ES:DI&nbsp; 目标串段寄存器:目标串变址. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重复次数计数器. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AL/AX&nbsp; 扫描值. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D标志&nbsp; 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Z标志&nbsp; 用来控制扫描或比较操作的结束. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVS&nbsp;&nbsp;&nbsp; 串传送. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( MOVSB&nbsp; 传送字符.&nbsp;&nbsp;&nbsp; MOVSW&nbsp; 传送字.&nbsp;&nbsp;&nbsp; MOVSD&nbsp; 传送双字. ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMPS&nbsp;&nbsp;&nbsp; 串比较. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( CMPSB&nbsp; 比较字符.&nbsp;&nbsp;&nbsp; CMPSW&nbsp; 比较字. ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCAS&nbsp;&nbsp;&nbsp; 串扫描. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把AL或AX的内容与目标串作比较,比较结果反映在标志位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LODS&nbsp;&nbsp;&nbsp; 装入串. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把源串中的元素(字或字节)逐一装入AL或AX中. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( LODSB&nbsp; 传送字符.&nbsp;&nbsp;&nbsp; LODSW&nbsp; 传送字.&nbsp;&nbsp;&nbsp; LODSD&nbsp; 传送双字. ) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STOS&nbsp;&nbsp;&nbsp; 保存串. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是LODS的逆过程. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当CX/ECX&lt;&gt;0时重复. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPE/REPZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当ZF=1或比较结果相等,且CX/ECX&lt;&gt;0时重复. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPNE/REPNZ&nbsp;&nbsp;&nbsp; 当ZF=0或比较结果不相等,且CX/ECX&lt;&gt;0时重复. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当CF=1且CX/ECX&lt;&gt;0时重复. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPNC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当CF=0且CX/ECX&lt;&gt;0时重复. </p>
<p>五、程序转移指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp; 　1&gt;无条件转移指令 (长转移) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JMP&nbsp;&nbsp;&nbsp; 无条件转移指令 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL&nbsp;&nbsp;&nbsp; 过程调用 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RET/RETF过程返回. <br>&nbsp;&nbsp;&nbsp; 2&gt;条件转移指令 (短转移,-128到+127的距离内) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( 当且仅当(SF XOR OF)=1时,OP1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JA/JNBE 不小于或不等于时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAE/JNB 大于或等于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JB/JNAE 小于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JBE/JNA 小于或等于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上四条,测试无符号整数运算的结果(标志C和Z). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JG/JNLE 大于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JGE/JNL 大于或等于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JL/JNGE 小于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JLE/JNG 小于或等于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上四条,测试带符号整数运算的结果(标志S,O和Z). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JE/JZ&nbsp; 等于转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNE/JNZ 不等于时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有进位时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNC&nbsp;&nbsp;&nbsp; 无进位时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNO&nbsp;&nbsp;&nbsp; 不溢出时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNP/JPO 奇偶性为奇数时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JNS&nbsp;&nbsp;&nbsp; 符号位为 "0" 时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 溢出转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JP/JPE&nbsp; 奇偶性为偶数时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 符号位为 "1" 时转移. <br>&nbsp;&nbsp;&nbsp; 3&gt;循环控制指令(短转移) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CX不为零时循环. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOOPE/LOOPZ&nbsp;&nbsp;&nbsp; CX不为零且标志Z=1时循环. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOOPNE/LOOPNZ&nbsp; CX不为零且标志Z=0时循环. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JCXZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CX为零时转移. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JECXZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ECX为零时转移. <br>&nbsp;&nbsp;&nbsp; 4&gt;中断指令 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT&nbsp;&nbsp;&nbsp; 中断指令 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO&nbsp;&nbsp;&nbsp; 溢出中断 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IRET&nbsp;&nbsp;&nbsp; 中断返回 <br>&nbsp;&nbsp;&nbsp; 5&gt;处理器控制指令 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HLT&nbsp;&nbsp;&nbsp; 处理器暂停, 直到出现中断或复位信号才继续. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WAIT&nbsp;&nbsp;&nbsp; 当芯片引线TEST为高电平时使CPU进入等待状态. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESC&nbsp;&nbsp;&nbsp; 转换到外处理器. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOCK&nbsp;&nbsp;&nbsp; 封锁总线. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NOP&nbsp;&nbsp;&nbsp; 空操作. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STC&nbsp;&nbsp;&nbsp; 置进位标志位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLC&nbsp;&nbsp;&nbsp; 清进位标志位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMC&nbsp;&nbsp;&nbsp; 进位标志取反. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STD&nbsp;&nbsp;&nbsp; 置方向标志位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLD&nbsp;&nbsp;&nbsp; 清方向标志位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STI&nbsp;&nbsp;&nbsp; 置中断允许位. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLI&nbsp;&nbsp;&nbsp; 清中断允许位. </p>
<p>六、伪指令 <br>─────────────────────────────────────── <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　DW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义字(2字节). <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PROC&nbsp;&nbsp;&nbsp; 定义过程. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDP&nbsp;&nbsp;&nbsp; 过程结束. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SEGMENT 定义段. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASSUME&nbsp; 建立段寄存器寻址. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENDS&nbsp;&nbsp;&nbsp; 段结束. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END&nbsp;&nbsp;&nbsp; 程序结束. </p>
<p>七、寄存器</p>
<p>1. Register usage in 32 bit Windows<br>Function parameters are passed on the stack according to the calling conventions listed on<br>page 13. Parameters of 32 bits size or less use one DWORD of stack space. Parameters<br>bigger than 32 bits are stored in little-endian form, i.e. with the least significant DWORD at the<br>lowest address, and DWORD aligned.<br>Function return values are passed in registers in most cases. 8-bit integers are returned in<br>AL, 16-bit integers in AX, 32-bit integers, pointers, and Booleans in EAX, 64-bit integers in<br>EDX:EAX, and floating-point values in ST(0). Structures and class objects not exceeding<br>64 bits size are returned in the same way as integers, even if the structure contains floating<br>point values. Structures and class objects bigger than 64 bits are returned through a pointer<br>passed to the function as the first parameter and returned in EAX. Compilers that don\'t<br>support 64-bit integers may return structures bigger than 32 bits through a pointer. The<br>Borland compiler also returns structures through a pointer if the size is not a power of 2.<br>Registers EAX, ECX and EDX may be changed by a procedure. All other general-purpose<br>registers (EBX, ESI, EDI, EBP) must be saved and restored if they are used. The value of<br>ESP must be divisible by 4 at all times, so don\'t push 16-bit data on the stack. Segment<br>registers cannot be changed, not even temporarily. CS, DS, ES, and SS all point to the flat<br>segment group. FS is used for a thread environment block. GS is unused, but reserved.<br>Flags may be changed by a procedure with the following restrictions: The direction flag is 0<br>by default. The direction flag may be set temporarily, but must be cleared before any call or<br>return. The interrupt flag cannot be cleared. The floating-point register stack is empty at the<br>entry of a procedure and must be empty at return, except for ST(0) if it is used for return<br>value. MMX registers may be changed by the procedure and if so cleared by EMMS before<br>returning and before calling any other procedure that may use floating-point registers. All<br>XMM registers can be modified by procedures. Rules for passing parameters and return<br>values in XMM registers are described in Intel\'s application note AP 589 "Software<br>Conventions for Streaming SIMD Extensions". A procedure can rely on EBX, ESI, EDI, EBP<br>and all segment registers being unchanged across a call to another procedure.<br>2. Register usage in Linux<br>The rules for register usage in Linux appear to be almost the same as for 32-bit windows.<br>Registers EAX, ECX, and EDX may be changed by a procedure. All other general-purpose<br>registers must be saved. There appears to be no rule for the direction flag. Function return<br>values are transferred in the same way as under Windows. Calling conventions are the<br>same, except for the fact that no underscore is prefixed to public names. I have no<br>information about the use of FS and GS in Linux. It is not difficult to make an assembly<br>function that works under both Windows and Linux, if only you take these minor differences<br>into account.</p>
<p>&nbsp;</p>
<p>八、位操作指令，处理器控制指令<br>&nbsp;1.位操作指令，8086新增的一组指令，包括位测试，位扫描。BT,BTC,BTR,BTS,BSF,BSR<br>&nbsp;1.1 BT(Bit Test)，位测试指令，指令格式:<br>&nbsp;&nbsp; BT OPRD1,OPRD2,规则：操作作OPRD1可以是16位或32位的通用寄存器或者存储单元。操作数OPRD2必须是8位立即数或者是与OPRD1操作数长度相等的通用寄存器。如果用OPRD2除以OPRD1，假设商存放在Divd中，余数存放在Mod中，那么对OPRD1操作数要进行测试的位号就是Mod,它的主要功能就是把要测试位的值送往CF，看几个简单的例子：<br>&nbsp;1.2 BTC(Bit Test And Complement)，测试并取反用法和规则与BT是一样，但在功能有些不同，它不但将要测试位的值送往CF，并且还将该位取反。<br>&nbsp;1.3 BTR(Bit Test And Reset)，测试并复位，用法和规则与BT是一样，但在功能有些不同，它不但将要测试位的值送往CF，并且还将该位复位(即清0)。<br>&nbsp;1.4 BTS(Bit Test And Set)，测试并置位，用法和规则与BT是一样，但在功能有些不同，它不但将要测试位的值送往CF，并且还将该位置位(即置1)。<br>&nbsp;1.5 BSF(Bit Scan Forward)，顺向位扫描，指令格式:BSF OPRD1,OPRD2，功能：将从右向左(从最低位到最高位）对OPRD2操作数进行扫描，并将第一个为1的位号送给操作数OPRD1。操作数OPRD1，OPRD2可以是16位或32位通用寄存器或者存储单元，但OPRD1和OPRD2操作数的长度必须相等。<br>&nbsp;1.6 BSR(Bit Scan Reverse)，逆向位扫描，指令格式:BSR OPRD1,OPRD2，功能：将从左向右(从最高位到最低位）对OPRD2操作数进行扫描，并将第一个为1的位号送给操作数OPRD1。操作数OPRD1，OPRD2可以是16位或32位通用寄存器或存储单元，但OPRD1和OPRD2操作数的长度必须相等。<br>&nbsp;1.7 举个简单的例子来说明这6条指令:</p>
<p>&nbsp;AA DW 1234H,5678H<br>&nbsp;BB DW 9999H,7777H<br>&nbsp;MOV EAX,12345678H<br>&nbsp;MOV BX,9999H<br>&nbsp;BT EAX,8;CF=0,EAX保持不变<br>&nbsp;BTC EAX,8;CF=0,EAX=12345778H<br>&nbsp;BTR EAX,8;CF=0,EAX=12345678H<br>&nbsp;BTS EAX,8;CF=0,EAX=12345778H <br>&nbsp;BSF AX,BX;AX=0<br>&nbsp;BSR AX,BX;AX=15<br>&nbsp;<br>&nbsp;BT WORD PTR [AA],4;CF=1，[AA]的内容不变<br>&nbsp;BTC WORD PTR [AA],4;CF=1，[AA]=1223H<br>&nbsp;BTR WORD PTR [AA],4;CF=1，[AA]=1223H<br>&nbsp;BTS WORD PTR [AA],4;CF=1，[AA]=1234H<br>&nbsp;BSF WORD PTR [AA],BX;[AA]=0;<br>&nbsp;BSR WORD PTR [AA],BX;[AA]=15(十进制)&nbsp; <br>&nbsp;<br>&nbsp;BT DWORD PTR [BB],12;CF=1,[BB]的内容保持不变<br>&nbsp;BTC DWORD PTR [BB],12;CF=1,[BB]=76779999H<br>&nbsp;BTR DWORD PTR [BB],12;CF=1,[BB]=76779999H<br>&nbsp;BTS DWORD PTR [BB],12;CF=1,[BB]=77779999H<br>&nbsp;BSF DWORD PTR [BB],12;[BB]=0<br>&nbsp;BSR DWORD PTR [BB],12;[BB]=31(十进制)&nbsp; </p>
<p>&nbsp;2.处理器控制指令<br>&nbsp;处理器控制指令主要是用来设置/清除标志，空操作以及与外部事件同步等。<br>&nbsp;2.1 CLC，将CF标志位清0。<br>&nbsp;2.2 STC，将CF标志位置1。<br>&nbsp;2.3 CLI，关中断。<br>&nbsp;2.4 STI，开中断。<br>&nbsp;2.5 CLD，清DF=0。<br>&nbsp;2.6 STD，置DF=1。<br>&nbsp;2.7 NOP，空操作，填补程序中的空白区，空操作本身不执行任何操作，主要是为了保持程序的连续性。<br>&nbsp;2.8 WAIT，等待BUSY引脚为高。<br>&nbsp;2.9 LOCK，封锁前缀可以锁定其后指令的操作数的存储单元，该指令在指令执行期间一直有效。在多任务环境中，可以用它来保证独占其享内存，只有以下指令才可以用LOCK前缀:<br>&nbsp; XCHG,ADD,ADC,INC,SUB,SBB,DEC,NEG,OR,AND,XOR,NOT,BT,BTS,BTR,BTC<br>&nbsp;3.0 说明处理器类型的伪指令<br>&nbsp; .8086，只支持对8086指令的汇编<br>&nbsp; .186，只支持对80186指令的汇编<br>&nbsp; .286，支持对非特权的80286指令的汇编<br>&nbsp; .286C，支持对非特权的80286指令的汇编<br>&nbsp; .286P，支持对80286所有指令的汇编<br>&nbsp; .386，支持对80386非特权指令的汇编<br>&nbsp; .386C，支持对80386非特权指令的汇编<br>&nbsp; .386P，支持对80386所有指令的汇编<br>&nbsp; 只有用伪指令说明了处理器类型，汇编程序才知道如何更好去编译，连接程序，更好地去检错。</p>
<p>&nbsp;</p>
<img src ="http://www.cnitblog.com/dotnetbbs/aggbug/36281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/dotnetbbs/" target="_blank">Alligator</a> 2007-11-14 20:43 <a href="http://www.cnitblog.com/dotnetbbs/archive/2007/11/14/36281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>