<?xml version="1.0" encoding="UTF-8"?>
  <feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html"><![CDATA[21 工作室 - asm]]></title>
  <subtitle type="html"><![CDATA[本站承接网页制作、软件项目开发、代写代码等业务，我们将和您真诚合作，以最低的价格提供最优越的服务。13488846575   联系人:潘劲]]></subtitle>
  <id>http://www.is21.cn/</id> 
  <link rel="alternate" type="text/html" href="http://www.is21.cn/" /> 
  <link rel="self" type="application/atom+xml" href="http://www.is21.cn/atom.asp" /> 
  <generator uri="http://www.pjhome.net/" version="2.4.1022">PJBlog2</generator> 
  <updated>2008-05-08T15:40:18+08:00</updated> 

  <entry>
	  <title type="html"><![CDATA[汇编网]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.is21.cn/</uri>
		 <email>lianxiangpanjin@163.com</email>
	  </author>
	  <category term="" scheme="http://www.is21.cn/default.asp?cateID=29" label="asm" /> 
	  <updated>2008-05-08T15:40:18+08:00</updated>
	  <published>2008-05-08T15:40:18+08:00</published>
		  <summary type="html"><![CDATA[<a href="http://www.aogosoft.com/" target="_blank">http://www.aogosoft.com/</a><br/>]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.is21.cn/default.asp?id=302" /> 
	  <id>http://www.is21.cn/default.asp?id=302</id> 
  </entry>	
		
  <entry>
	  <title type="html"><![CDATA[汇编常用命令]]></title>
	  <author>
		 <name>admin</name>
		 <uri>http://www.is21.cn/</uri>
		 <email>lianxiangpanjin@163.com</email>
	  </author>
	  <category term="" scheme="http://www.is21.cn/default.asp?cateID=29" label="asm" /> 
	  <updated>2008-05-08T15:39:14+08:00</updated>
	  <published>2008-05-08T15:39:14+08:00</published>
		  <summary type="html"><![CDATA[汇编常用命令<br/><strong>MOV</strong>&nbsp;指令为双操作数指令,两个操作数中必须有一个是寄存器.<br/>MOV&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;Byte&nbsp;/&nbsp;Word<br/>执行操作:&nbsp;dst&nbsp;=&nbsp;src<br/>1.目的数可以是通用寄存器,&nbsp;存储单元和段寄存器(但不允许用CS段寄存器).<br/>2.立即数不能直接送段寄存器<br/>3.不允许在两个存储单元直接传送数据<br/>4.不允许在两个段寄存器间直接传送信息<br/><br/><strong>PUSH</strong>&nbsp;入栈指令及POP出栈指令:&nbsp;堆栈操作是以&#34;后进先出&#34;的方式进行数据操作.<br/>PUSH&nbsp;&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;//Word<br/>入栈的操作数除不允许用立即数外，可以为通用寄存器，段寄存器(全部)和存储器.<br/>入栈时高位字节先入栈，低位字节后入栈.<br/>POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;&nbsp;&nbsp;&nbsp;//Word<br/>出栈操作数除不允许用立即数和CS段寄存器外,&nbsp;可以为通用寄存器,段寄存器和存储器.<br/>执行POP&nbsp;&nbsp;&nbsp;SS指令后,堆栈区在存储区的位置要改变.<br/>执行POP&nbsp;&nbsp;SP&nbsp;指令后,栈顶的位置要改变.<br/><br/><strong>XCHG</strong>(eXCHanG)交换指令:&nbsp;将两操作数值交换.<br/>XCHG&nbsp;&nbsp;&nbsp;OPR1,&nbsp;OPR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作:&nbsp;Tmp=OPR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPR1=OPR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPR2=Tmp<br/>1.必须有一个操作数是在寄存器中<br/>2.不能与段寄存器交换数据<br/>3.存储器与存储器之间不能交换数据.<br/><br/><strong>XLAT</strong>(TRANSLATE)换码指令:&nbsp;把一种代码转换为另一种代码.<br/>XLAT&nbsp;&nbsp;&nbsp;(OPR&nbsp;可选)&nbsp;&nbsp;&nbsp;//Byte<br/>执行操作:&nbsp;AL=(BX+AL)<br/>指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.<br/><br/><strong>LEA</strong>(Load&nbsp;Effective&nbsp;Address)&nbsp;有效地址传送寄存器指令<br/>LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//指令把源操作数SRC的有效地址送到指定的寄存器中.<br/>执行操作:&nbsp;REG&nbsp;&nbsp;=&nbsp;EAsrc&nbsp;<br/>注:&nbsp;SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器<br/>MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;,&nbsp;OFFSET&nbsp;OPER_ONE&nbsp;等价于&nbsp;LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;,&nbsp;OPER_ONE<br/>MOV&nbsp;&nbsp;SP&nbsp;,&nbsp;[BX]&nbsp;&nbsp;//将BX间接寻址的相继的二个存储单元的内容送入SP中<br/>LEA&nbsp;&nbsp;&nbsp;SP&nbsp;,&nbsp;[BX]&nbsp;&nbsp;//将BX的内容作为存储器有效地址送入SP中<br/><br/><strong>LDS</strong>(Load&nbsp;DS&nbsp;with&nbsp;pointer)指针送寄存器和DS指令<br/>LDS&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;,&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;//常指定SI寄存器。<br/>执行操作:&nbsp;REG=(SRC),&nbsp;DS=(SRC+2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中，后二个存储单元送入DS段寄存器中。<br/><br/><strong>LES</strong>&nbsp;(Load&nbsp;ES&nbsp;with&nbsp;pointer)&nbsp;指针送寄存器和ES指令<br/>LES&nbsp;&nbsp;&nbsp;&nbsp;REG&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//常指定DI寄存器<br/>执行操作:&nbsp;REG=(SRC)&nbsp;,&nbsp;ES=(SRC+2)&nbsp;//与LDS大致相同,不同之处是将ES代替DS而已.<br/><br/><strong>LAHF</strong>&nbsp;(&nbsp;Load&nbsp;AH&nbsp;with&nbsp;Flags&nbsp;)&nbsp;标志位送AH指令<br/>LAHF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,&nbsp;SF送D7位,&nbsp;ZF送D6位......<br/>执行操作:&nbsp;AH=PSW的低位字节。<br/><br/><strong>SAHF&nbsp;</strong>(&nbsp;Store&nbsp;AH&nbsp;into&nbsp;Flags&nbsp;)&nbsp;AH送标志寄存器指令<br/>SAHF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将AH寄存器的相应位送到PSW寄存器的低8位的相应位,&nbsp;AH的D7位送SF,&nbsp;D6位送ZF......<br/>执行操作:&nbsp;PSW的低位字节=AH。<br/><br/><strong>PUSHF</strong>&nbsp;(&nbsp;PUSH&nbsp;the&nbsp;Flags)&nbsp;标志进栈指令<br/>PUSHF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将标志寄存器的值压入堆栈顶部,&nbsp;同时栈指针SP值减2<br/>执行操作:&nbsp;SP=SP-1,(SP)=PSW的高8位,&nbsp;&nbsp;SP=SP-1,&nbsp;(SP)=PSW的低8位<br/><br/><strong>POPF&nbsp;</strong>(&nbsp;POP&nbsp;the&nbsp;Flags&nbsp;)&nbsp;标志出栈指令<br/>POPF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//与PUSHF相反,&nbsp;从堆栈的顶部弹出两个字节送到PSW寄存器中,&nbsp;同时堆栈指针值加2<br/>执行操作:&nbsp;&nbsp;PSW低8位=(SP),&nbsp;SP=SP+1,&nbsp;&nbsp;&nbsp;PSW高8位=(SP)&nbsp;,&nbsp;SP=SP+1<br/><br/>输入输出指令(<strong>IN,OUT</strong>)：只限于使用累加器AX或AL与外部设备的端口传送信息.<br/>IN&nbsp;(INput)输入指令：信息从I/O通过累加器传送到CPU<br/>IN&nbsp;&nbsp;&nbsp;&nbsp;AL&nbsp;,&nbsp;PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接的字节输入,PORT是外设端口编号(即端口地址),只能取&nbsp;00H&nbsp;~&nbsp;0FFH共256个端口地址.<br/>IN&nbsp;&nbsp;&nbsp;&nbsp;AX&nbsp;,&nbsp;PORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接的字输入,AX存储连续两个端口地址PORT+1,PORT<br/>IN&nbsp;&nbsp;&nbsp;&nbsp;AL&nbsp;,&nbsp;DX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//间接的字节输入,端口地址范围可通过DX设置为0000H&nbsp;~&nbsp;0FFFFH共65536个端口地址<br/>IN&nbsp;&nbsp;&nbsp;&nbsp;AX&nbsp;,&nbsp;DX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//间接的字输入<br/>OUT(&nbsp;OUTput)输出指令&nbsp;：信息从CPU通过累加器传送到I/O<br/>OUT&nbsp;&nbsp;&nbsp;&nbsp;PORT&nbsp;,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接的字节输出,PORT规定与IN指令相同.<br/>OUT&nbsp;&nbsp;&nbsp;&nbsp;PORT&nbsp;,&nbsp;AX<br/>OUT&nbsp;&nbsp;&nbsp;&nbsp;DX&nbsp;,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//间接的字节输出<br/>OUT&nbsp;&nbsp;&nbsp;&nbsp;DX&nbsp;,&nbsp;AX<br/>MOV&nbsp;&nbsp;&nbsp;AL,05H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUT&nbsp;&nbsp;27H,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;//将字节05H传送到地址27H的端口<br/><br/><strong>ADD</strong>(ADD)加法指令<br/>ADD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作:&nbsp;dst=dst+src<br/>1.两个存储器操作数不能通过ADD指令直接相加,&nbsp;即DST&nbsp;和SRC必须有一个是通用寄存器操作数.<br/>2.段寄存器不能作为SRC&nbsp;和DST.<br/>3.影响标志位Auxiliary&nbsp;Crray&nbsp;Flag&nbsp;,Carry&nbsp;Flag,&nbsp;Overflow&nbsp;Flag,&nbsp;Parity&nbsp;Flag,&nbsp;Sign&nbsp;Flag&nbsp;和Zero&nbsp;Flag&nbsp;,如下所示：<br/>CF&nbsp;根据最高有效位是否有进(借)位设置的：有进(借)位时CF=1,&nbsp;无进(借)位时CF=0.&nbsp;<br/>OF&nbsp;根据操作数的符号及其变化来设置的：若两个操作数的符号相同,而结果的符号与之相反时OF=1,&nbsp;否则为0.&nbsp;<br/>ZF&nbsp;根据结果来设置：不等于0时ZF=0,&nbsp;等于0时ZF=1&nbsp;<br/>SF&nbsp;根据结果的最高位来设置：最高位为0,&nbsp;则SF=0.&nbsp;<br/>AF&nbsp;根据相加时D3是否向D4进(借)位来设置：有进(借)位时AF=1,&nbsp;无进(借)位时AF=0&nbsp;<br/>PF&nbsp;根据结果的1的个数时否为奇数来设置：1的个数为奇数时PF=0,&nbsp;为偶数时PF=1&nbsp;<br/><br/><strong>ADC</strong>(&nbsp;ADd&nbsp;with&nbsp;Carry)带进位加法指令<br/>ADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;//Byte/Word<br/>执行操作:&nbsp;dst=dst+src+CF&nbsp;&nbsp;//与ADD不同之处是还要加上进位标志位的值.<br/><br/><strong>INC&nbsp;</strong>(&nbsp;INCreament)&nbsp;加1指令<br/>INC&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作:&nbsp;OPR=OPR+1<br/>1.OPR可以是寄存器和存储器操作数,&nbsp;但不能是立即数和段寄存器<br/>2.影响标志位OF,SF,ZF,PF&nbsp;和AF,不影响CF.<br/><br/><strong>SUB&nbsp;</strong>(&nbsp;SUBtract&nbsp;)&nbsp;不带借位的减法指令<br/>SUB&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：dst=dst&nbsp;-&nbsp;src<br/>1.DST和SRC寻址方式及规定与ADD相同.<br/>2.影响全部标志位.(判断标志位参见ADD)<br/><br/><strong>SBB</strong>&nbsp;(&nbsp;SuBtract&nbsp;with&nbsp;&nbsp;Borrow)&nbsp;带借位减法指令<br/>SBB&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：dst=&nbsp;dst&nbsp;-&nbsp;src&nbsp;-&nbsp;CF<br/><br/><strong>DEC</strong>&nbsp;(&nbsp;DECrement&nbsp;)&nbsp;减1指令<br/>DEC&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：OPR&nbsp;=&nbsp;OPR&nbsp;-&nbsp;1&nbsp;&nbsp;//除CF标志位,&nbsp;其余标志位都受影响.<br/><br/><strong>NEG&nbsp;</strong>(&nbsp;NEGate&nbsp;)&nbsp;求补指令<br/>NEG&nbsp;&nbsp;&nbsp;&nbsp;OPR<br/>执行操作：opr&nbsp;=&nbsp;0-&nbsp;opr&nbsp;//将操作数按位求反后末位加1.<br/><br/><strong>CMP&nbsp;</strong>(&nbsp;CoMPare&nbsp;)&nbsp;比较指令<br/>CMP&nbsp;&nbsp;&nbsp;&nbsp;OPR1&nbsp;,&nbsp;OPR2&nbsp;<br/>执行操作：OPR1&nbsp;-&nbsp;OPR2&nbsp;&nbsp;//与SUB指令一样执行运算,&nbsp;但不保存结果.<br/>比较情况&nbsp;无符号数&nbsp;有符号数<br/>A=B&nbsp;&nbsp;ZF=1&nbsp;&nbsp;ZF=1&nbsp;<br/>A&gt;B&nbsp;&nbsp;CF=0&nbsp;&amp;&amp;&nbsp;ZF=0&nbsp;SF^OF=0&nbsp;&amp;&amp;&nbsp;ZF=0&nbsp;<br/>A&lt;B&nbsp;&nbsp;CF=1&nbsp;&amp;&amp;&nbsp;ZF=0&nbsp;SF^OF=1&nbsp;&amp;&amp;&nbsp;ZF=0&nbsp;<br/>A&gt;=B&nbsp;&nbsp;CF=0&nbsp;||&nbsp;ZF=1&nbsp;SF^OF=0&nbsp;||&nbsp;ZF=1&nbsp;<br/>A&lt;=B&nbsp;&nbsp;CF=1&nbsp;||&nbsp;ZF=1&nbsp;SF^OF=1&nbsp;||&nbsp;ZF=1&nbsp;<br/><br/><strong>MUL</strong>&nbsp;(&nbsp;unsigned&nbsp;&nbsp;MULtiple&nbsp;)&nbsp;无符号数乘法指令<br/>MUL&nbsp;&nbsp;&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;//Byte/Word&nbsp;&nbsp;&nbsp;&nbsp;.<br/>执行操作：Byte&nbsp;&nbsp;=&gt;&nbsp;&nbsp;&nbsp;AX=&nbsp;AL&nbsp;*src&nbsp;&nbsp;&nbsp;&nbsp;//字节运算时目的操作数用AL,&nbsp;乘积放在AX中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Word&nbsp;=&gt;&nbsp;&nbsp;&nbsp;DX=AX&nbsp;*src&nbsp;&nbsp;&nbsp;&nbsp;//字运算时目的操作数用AX,&nbsp;DX存放乘积的高位字,&nbsp;AX放乘积的低位字<br/>1.目的数必须是累加器&nbsp;AX&nbsp;或AL,指令中不需写出<br/>2.&nbsp;源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,&nbsp;而绝对不允许是立即数或段寄存器.<br/><br/><strong>IMUL&nbsp;</strong>(sIgned&nbsp;&nbsp;MULtiple)&nbsp;有符号数乘法指令<br/>IMUL&nbsp;&nbsp;&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;//与MUL指令相同,但必须是带符号数<br/><br/><strong>DIV</strong>&nbsp;(&nbsp;unsigned&nbsp;DIVide)&nbsp;无符号数除法指令<br/>DIV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word&nbsp;&nbsp;&nbsp;&nbsp;其中:&nbsp;SRC的规定同乘法指令MUL<br/>执行操作：Byte&nbsp;=&gt;&nbsp;AX&nbsp;/&nbsp;src&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字节运算时目的操作数在AX中,结果的商在AL中&nbsp;,余数中AH中<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Word=&gt;&nbsp;DX,AX&nbsp;/src&nbsp;//字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中&nbsp;,余数在DX中<br/>存储器操作数必须指明数据类型：BYTE&nbsp;PTR&nbsp;src&nbsp;或&nbsp;WORD&nbsp;PTR&nbsp;src<br/><br/><strong>IDIV</strong>&nbsp;(sIgned&nbsp;DIVied)&nbsp;有符号数除法指令<br/>IDIV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;与DIV指令相同,但必须是带符号数<br/><br/><strong>CBW&nbsp;</strong>(Convert&nbsp;Byte&nbsp;to&nbsp;Word)&nbsp;字节转换为字指令<br/>CBW<br/>执行操作:&nbsp;AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0，则AH=00H,若AL中的D7=1,则AH=FFH.<br/><br/><strong>CWD</strong>&nbsp;(Convert&nbsp;Word&nbsp;&nbsp;to&nbsp;Double&nbsp;word)&nbsp;字转换为双字指令<br/>CWD<br/>执行操作:&nbsp;AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0，则DX=0000H,若AX中的D15=1,则DX=FFFFH<br/>十进制调整指令<br/>当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.<br/>在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD&nbsp;(&nbsp;Binary&nbsp;Coded&nbsp;Decimal&nbsp;).<br/>BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.<br/>压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.<br/>非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.<br/>压缩的BCD码调整指令<br/><br/><strong>DAA&nbsp;</strong>(Decimal&nbsp;Adjust&nbsp;for&nbsp;Addition)&nbsp;加法的十进制调整指令<br/>DAA<br/>执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.<br/><br/><strong>DAS</strong>&nbsp;(Decimal&nbsp;Adjust&nbsp;for&nbsp;Subtraction)&nbsp;减法的十进制调整指令<br/>DAS<br/>执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.<br/>非压缩的BCD码调整指令<br/><br/><strong>AAA&nbsp;</strong>(ASCII&nbsp;Adjust&nbsp;for&nbsp;Addition)&nbsp;加法的ASCII调整指令<br/>AAA<br/>执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.<br/><br/><strong>AAS</strong>&nbsp;(ASCII&nbsp;Adjust&nbsp;for&nbsp;Subtraction)&nbsp;减法的ASCII调整指令<br/>AAS<br/>执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中.<br/><br/><strong>MOVS&nbsp;</strong>(&nbsp;MOVe&nbsp;String)&nbsp;串传送指令<br/>MOVB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字节串传送&nbsp;&nbsp;&nbsp;&nbsp;DF=0,&nbsp;SI&nbsp;=&nbsp;SI&nbsp;+&nbsp;1&nbsp;,&nbsp;DI&nbsp;=&nbsp;DI&nbsp;+&nbsp;1&nbsp;；DF&nbsp;=&nbsp;1&nbsp;,&nbsp;SI&nbsp;=&nbsp;SI&nbsp;-&nbsp;1&nbsp;,&nbsp;DI&nbsp;=&nbsp;DI&nbsp;-&nbsp;1<br/>MOVW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字串传送&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DF=0,&nbsp;SI&nbsp;=&nbsp;SI&nbsp;+&nbsp;2&nbsp;,&nbsp;DI&nbsp;=&nbsp;DI&nbsp;+&nbsp;2&nbsp;；DF&nbsp;=&nbsp;1&nbsp;,&nbsp;SI&nbsp;=&nbsp;SI&nbsp;-&nbsp;2&nbsp;,&nbsp;DI&nbsp;=&nbsp;DI&nbsp;-&nbsp;2<br/>执行操作：[DI]&nbsp;=&nbsp;[SI]&nbsp;,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI&nbsp;所指出的存储单元,再修改SI和DI,&nbsp;从而指向下一个元素.<br/>在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.<br/>MOVS&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;//同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.<br/>1.目的串必须在附加段中,即必须是ES:[DI]<br/>2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].<br/><br/><strong>STOS</strong>&nbsp;(STOre&nbsp;into&nbsp;String)&nbsp;存入串指令<br/>STOS&nbsp;&nbsp;&nbsp;&nbsp;DST<br/>STOSB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//存放字节串&nbsp;&nbsp;&nbsp;(&nbsp;DI&nbsp;)&nbsp;=&nbsp;AL<br/>STOSW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//存放字串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;DI&nbsp;)&nbsp;=&nbsp;AX<br/>执行品作：把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.<br/>1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值.<br/>2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]<br/><br/><strong>LODS</strong>&nbsp;(&nbsp;LOaD&nbsp;from&nbsp;String&nbsp;)&nbsp;从串取指令<br/>LODS&nbsp;&nbsp;&nbsp;&nbsp;SRC<br/>LODSB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从字节串取&nbsp;&nbsp;&nbsp;&nbsp;AL=(SI)<br/>LODSW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从字串取&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AX=&nbsp;(SI±1)&nbsp;(SI)<br/>执行操作：把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.<br/>1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.<br/>2.源串允许使用段超越前缀来改变数据存储的段区.<br/><br/>REP&nbsp;(REPeat)重复操作前缀<br/>REP&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;Primitive&nbsp;//其中:String&nbsp;Primitive可为MOVS,STOS或LODS指令<br/>执行操作：使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.<br/>方向标志设置<br/><br/>CLD&nbsp;(CLear&nbsp;Direction&nbsp;flag)&nbsp;清除方向标志指令<br/>CLD<br/>执行操作：令DF=0,&nbsp;其后[SI],[DI]执行增量操作<br/><br/>STD&nbsp;(SeT&nbsp;Direction&nbsp;flag)&nbsp;设置方向标志指令<br/>STD<br/>执行操作：令DF=1,&nbsp;其后[SI],[DI]执行减量操作<br/><br/>CMPS&nbsp;(CoMPare&nbsp;String)&nbsp;串比较指令<br/>CMPS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRC&nbsp;,&nbsp;&nbsp;DST<br/>CMPSB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字节串比较&nbsp;&nbsp;&nbsp;(SI)-(DI)<br/>CMPSW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//字串比较&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SI+1)(SI)&nbsp;-&nbsp;(DI+1)(DI)<br/>执行操作：把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.<br/><br/>SCAS&nbsp;(SCAn&nbsp;String&nbsp;)&nbsp;串扫描指令<br/>SCAS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DST<br/>SCASB<br/>SCASW<br/>执行操作：把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.<br/><br/>AND,&nbsp;o&#114;&nbsp;,&nbsp;XOR&nbsp;和&nbsp;TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.<br/>NOT是单字节操作指令,不允许使用立即数.<br/>逻辑运算均是按位进行操作,真值表如下:<br/>AND&nbsp;(位与&amp;)&nbsp;o&#114;&nbsp;(&nbsp;位或|&nbsp;)&nbsp;XOR&nbsp;&nbsp;(&nbsp;位异或^&nbsp;)&nbsp;&nbsp;<br/>1&nbsp;&amp;&nbsp;1&nbsp;=&nbsp;1&nbsp;1&nbsp;|&nbsp;1&nbsp;=&nbsp;1&nbsp;1&nbsp;^&nbsp;1&nbsp;=&nbsp;0<br/>1&nbsp;&amp;&nbsp;0&nbsp;=&nbsp;0&nbsp;1&nbsp;|&nbsp;0&nbsp;=&nbsp;1&nbsp;1&nbsp;^&nbsp;0&nbsp;=&nbsp;1<br/>0&nbsp;&amp;&nbsp;1&nbsp;=&nbsp;0&nbsp;0&nbsp;|&nbsp;1&nbsp;=&nbsp;1&nbsp;0&nbsp;^&nbsp;1&nbsp;=&nbsp;1<br/>0&nbsp;&amp;&nbsp;0&nbsp;=&nbsp;0&nbsp;0&nbsp;|&nbsp;0&nbsp;=&nbsp;0&nbsp;0&nbsp;^&nbsp;0&nbsp;=&nbsp;0<br/>A：逻辑运算指令<br/>AND&nbsp;(and)&nbsp;逻辑与指令<br/>AND&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：dst&nbsp;=&nbsp;dst&nbsp;&amp;&nbsp;src<br/>1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.<br/>2.AND指令典型用法A：用于屏蔽某些位,即使某些位为0.<br/>屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与<br/>MOV&nbsp;AL&nbsp;,&nbsp;39H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AL=&nbsp;0011&nbsp;1001B[39H]<br/>ADD&nbsp;AL&nbsp;,&nbsp;0FH&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;AL=&nbsp;0000&nbsp;1001B[09H]&nbsp;&nbsp;即0011&nbsp;1001B[39H]&nbsp;&nbsp;&amp;&nbsp;&nbsp;0000&nbsp;1111B[0FH]&nbsp;=&nbsp;0000&nbsp;1001B[09H]<br/>3.AND指令典型用法B:取出某一位的值(见TEST)<br/>o&#114;&nbsp;(or)&nbsp;逻辑或指令<br/>o&#114;&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：dst&nbsp;=&nbsp;dst&nbsp;|&nbsp;src<br/>1.OR指令执行后,将使CF=0,&nbsp;OF=0,&nbsp;AF位无定义,指令执行结果影响SF,&nbsp;ZF和PF标志位.<br/>2.常用于将某些位置1.<br/>将AL的第5位置1:<br/>MOV&nbsp;AL&nbsp;,&nbsp;4AH&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;AL=0100&nbsp;1010B[4AH]<br/>o&#114;&nbsp;&nbsp;&nbsp;&nbsp;AL&nbsp;,&nbsp;10H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;AL=0101&nbsp;1010B[5AH]&nbsp;&nbsp;&nbsp;即0100&nbsp;1010B[4AH]&nbsp;&nbsp;|&nbsp;&nbsp;0001&nbsp;0000B[10H]&nbsp;=0101&nbsp;1010B&nbsp;[5AH]<br/>XOR&nbsp;(eXclusive&nbsp;o&#114;)&nbsp;逻辑异或指令<br/>XOR&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;,&nbsp;SRC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：dst&nbsp;=&nbsp;dst&nbsp;^&nbsp;src<br/>1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.<br/>2.XOR指令使某些位维持不变则与&nbsp;&#39;0&#39;&nbsp;相异或,若要使某些位取反则与&nbsp;&#39;1&#39;相异或.<br/>将AL的高4位维持不变,低4位取反：<br/>MOV&nbsp;AL,&nbsp;B8H&nbsp;&nbsp;&nbsp;&nbsp;//AL=1011&nbsp;1000B[B8H]<br/>XOR&nbsp;&nbsp;AL,&nbsp;0FH&nbsp;&nbsp;&nbsp;&nbsp;//AL=1011&nbsp;0111B[B7H]&nbsp;即1011&nbsp;1000B[B8H]&nbsp;^&nbsp;0000&nbsp;1111[0FH]=1011&nbsp;0111B[B7H]<br/>测试某一个操作数是否与另一确定操作数相等：<br/>XOR&nbsp;&nbsp;&nbsp;&nbsp;AX&nbsp;,&nbsp;042EH<br/>JZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....&nbsp;&nbsp;&nbsp;//如果AX==042EH,&nbsp;则ZF=TRUE(1),&nbsp;执行JZ...<br/>NOT&nbsp;(not)&nbsp;逻辑非指令<br/>NOT&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：opr&nbsp;=&nbsp;~opr&nbsp;&nbsp;&nbsp;//&nbsp;~&nbsp;01100101&nbsp;[65H]&nbsp;=10011010&nbsp;[9AH]<br/>1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.<br/>2.NOT指令不影响任何标志位。<br/>将AL各位取反：<br/>MOV&nbsp;AL,65H&nbsp;&nbsp;&nbsp;&nbsp;//AL=0110&nbsp;0101B[65H]<br/>NOT&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AL=1001&nbsp;1010B[9AH]&nbsp;&nbsp;即&nbsp;~&nbsp;0110&nbsp;0101B[65H]=1001&nbsp;1010B[9AH]<br/>TEST&nbsp;(test)&nbsp;指令<br/>TEST&nbsp;&nbsp;&nbsp;&nbsp;OPR1&nbsp;,&nbsp;OPR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：opr1&nbsp;&amp;&nbsp;opr2<br/>1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,&nbsp;OF=0,而AF位无定义.<br/>2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足.只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假.<br/>检测某位是否为1：<br/>令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则&nbsp;JNZ...<br/>TEST&nbsp;AL&nbsp;,&nbsp;0000&nbsp;00001B&nbsp;&nbsp;&nbsp;//测试AL最低位是否为1::&nbsp;令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令&nbsp;<br/>JNZ&nbsp;&nbsp;&nbsp;THER　&nbsp;&nbsp;&nbsp;&nbsp;//最低位若为1,&nbsp;则ZF=FALSE(0),&nbsp;执行JNZ&nbsp;THER,&nbsp;否则执行下一条指令.<br/>或者：先对操作数求反,令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JZ...<br/>MOV&nbsp;&nbsp;&nbsp;&nbsp;DL&nbsp;,&nbsp;AL&nbsp;&nbsp;&nbsp;&nbsp;//将AL&nbsp;传送到DL,主要是不要影响AL的值.&nbsp;&nbsp;&nbsp;以下测试AL的b2位是否为1<br/>NOT&nbsp;&nbsp;&nbsp;&nbsp;DL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//先对操作数求反<br/>TEST&nbsp;&nbsp;&nbsp;&nbsp;0000&nbsp;0100B&nbsp;//令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令<br/>JZ&nbsp;&nbsp;&nbsp;&nbsp;THER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//若AL的b2位为1,则ZF=TRUE(1),&nbsp;执行JZ&nbsp;&nbsp;&nbsp;&nbsp;THER<br/><br/>B：移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF.AF无定义.]<br/>非循环逻辑移位：把操作数看成无符数来进行移位.<br/>SHL&nbsp;(&nbsp;SHift&nbsp;logical&nbsp;Left&nbsp;)逻辑左移指令<br/>SHL&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,&nbsp;CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>执行操作：使OPR左移CNT位,并使最低CNT位为全0.<br/>1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.<br/>2.移位次数由CNT决定.每次将OPR的最高位移出并移到CF,最低位补0.<br/>MOV&nbsp;&nbsp;CL&nbsp;,&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//若移位多次,&nbsp;先预置移位次数CL<br/>SHL&nbsp;&nbsp;&nbsp;&nbsp;DX&nbsp;,&nbsp;&nbsp;CL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CNT可取1或CL寄存器操作数<br/>SHR&nbsp;(SHift&nbsp;logical&nbsp;Right)&nbsp;逻辑右移指令<br/>SHR&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,&nbsp;CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.<br/>非循环算术移位：将操作数看成有符号数来进行移位.<br/>SAL&nbsp;(Shift&nbsp;Arithmetic&nbsp;Left)&nbsp;算术左移指令<br/>SAL&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,&nbsp;CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>SAL指令与SHL指令完全相同<br/>SAR(Shift&nbsp;Arithmetic&nbsp;Right)&nbsp;算术右移指令<br/>SAR&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,&nbsp;CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.<br/>循环移位指令<br/>ROL&nbsp;(&nbsp;ROtate&nbsp;Left)&nbsp;循环左移指令<br/>ROL&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,&nbsp;CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>每次移位时,最高位移出并同时移到CF和最低位D0.<br/>ROR&nbsp;(ROtate&nbsp;Right)循环右移指令<br/>ROR&nbsp;&nbsp;&nbsp;&nbsp;OPR,CNT&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>每次移位时,最低位D0移出并同时移到CF和最高位.<br/>带进位循环移位指令<br/>RCL&nbsp;(Rotate&nbsp;Left&nbsp;through&nbsp;Carry)带进位循环左移指令<br/>RCL&nbsp;&nbsp;&nbsp;&nbsp;OPR,CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/>RCR&nbsp;(Rotate&nbsp;Right&nbsp;through&nbsp;Carry)带进位循环左移指令<br/>RCR&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;,CNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Byte/Word<br/><br/>处理器控制指令<br/>CLC&nbsp;(CLear&nbsp;Carry)&nbsp;进位位置0指令<br/>CLC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//执行操作后,CF=0<br/>CMC&nbsp;(CoMplement&nbsp;Carry)&nbsp;进位位求反指令<br/>CMC&nbsp;&nbsp;&nbsp;&nbsp;//执行操作后,CF=!CF<br/>STC&nbsp;(SeT&nbsp;Carry)&nbsp;进位位置1指令<br/>STC&nbsp;&nbsp;&nbsp;&nbsp;//执行操作后,CF=1<br/>NOP&nbsp;(No&nbsp;Operetion)&nbsp;无操作指令<br/>NOP&nbsp;&nbsp;&nbsp;&nbsp;//此指令不执行任何操作,其机器码占一个字节单元<br/>HLT&nbsp;(HaLT)&nbsp;停机指令<br/>HLT<br/>执行操作后,使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作.<br/><br/>JMP&nbsp;(&nbsp;JuMP&nbsp;)&nbsp;无条件转移指令<br/>名称&nbsp;&nbsp;格式&nbsp;&nbsp;&nbsp;执行操作&nbsp;<br/>段内直接短跳转&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;SHORT&nbsp;OPR&nbsp;&nbsp;IP=IP+8&nbsp;位偏移量<br/>段内直接近转移&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;NEAR&nbsp;PTR&nbsp;OPR&nbsp;IP=IP+16位偏移量<br/>段内间接转移&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;PTR&nbsp;OPR&nbsp;IP=(EA)<br/>段间直接转移&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;FAR&nbsp;PTR&nbsp;OPR&nbsp;IP=OPR&nbsp;偏移地址,&nbsp;CS=OPR&nbsp;段地址<br/>段间间接转移&nbsp;JMP&nbsp;&nbsp;&nbsp;&nbsp;DWORD&nbsp;PTR&nbsp;OPR&nbsp;IP=(EA),CS=(EA+2)<br/>1.无条件转移到指定的地址去执行从该地址开始的指令.<br/>2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容.<br/>3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容.<br/>条件转移指令：根据上一条指令所设置的条件码(标志位)来判断测试条件.<br/>根据五个标志位：ZF、SF、OF、&nbsp;PF、&nbsp;CF的两种状态（0&nbsp;FALSE或1&nbsp;TRUE)产生10种测试条件.<br/>Name&nbsp;&nbsp;Flag&nbsp;Flag&nbsp;==&nbsp;TRUE&nbsp;[1]&nbsp;&nbsp;Flag&nbsp;==FALSE&nbsp;[&nbsp;0]&nbsp;<br/>Zero&nbsp;Falg&nbsp;ZF&nbsp;JZ&nbsp;OPR&nbsp;&nbsp;//结果为零转移&nbsp;JNZ&nbsp;OPR&nbsp;&nbsp;//结果不为零转移&nbsp;<br/>Sign&nbsp;Falg&nbsp;SF&nbsp;JS&nbsp;OPR&nbsp;&nbsp;//结果为负转移&nbsp;JNS&nbsp;OPR&nbsp;&nbsp;//结果为正转移&nbsp;<br/>Overflow&nbsp;Flag&nbsp;OF&nbsp;JO&nbsp;OPR&nbsp;&nbsp;//溢出转移&nbsp;JNO&nbsp;OPR&nbsp;&nbsp;//不溢出转移&nbsp;<br/>Parity&nbsp;Flag&nbsp;PF&nbsp;JP&nbsp;OPR&nbsp;&nbsp;//结果为偶转移&nbsp;JNP&nbsp;OPR&nbsp;&nbsp;//结果为奇转移&nbsp;<br/>Carry&nbsp;Flag&nbsp;CF&nbsp;JC&nbsp;OPR&nbsp;&nbsp;//有进位转移&nbsp;JNC&nbsp;OPR&nbsp;&nbsp;//无进位转移&nbsp;<br/>两个数比较：<br/>情况&nbsp;&nbsp;指令&nbsp;满足条件&nbsp;指令&nbsp;满足条件&nbsp;<br/>A&nbsp;&lt;&nbsp;B&nbsp;&nbsp;JC&nbsp;&nbsp;CF==1&nbsp;&nbsp;JL&nbsp;SF^OF==1&nbsp;&amp;&amp;&nbsp;ZF==0&nbsp;<br/>A&nbsp;≥&nbsp;B&nbsp;JNC&nbsp;CF==0&nbsp;JNL&nbsp;SF^OF==0&nbsp;&nbsp;||&nbsp;&nbsp;ZF==1&nbsp;<br/>A&nbsp;≤&nbsp;B&nbsp;JNA&nbsp;CF==1&nbsp;||&nbsp;ZF==1&nbsp;JLG&nbsp;SF^OF==1&nbsp;&nbsp;||&nbsp;&nbsp;ZF==1&nbsp;<br/>A&nbsp;&gt;&nbsp;B&nbsp;JA&nbsp;CF==0&nbsp;&amp;&amp;&nbsp;ZF==0&nbsp;JG&nbsp;SF^OF==0&nbsp;&amp;&amp;&nbsp;ZF==0&nbsp;<br/>测试CX转移指令<br/>JCXZ&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//CX==0时转移<br/><br/>LOOP(LOOP)循环指令<br/>LOOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;测试条件：CX&nbsp;≠&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//OPR在程序中实际是个标号&nbsp;<br/>LOOPZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;测试条件：ZF&nbsp;==&nbsp;1&nbsp;&amp;&amp;&nbsp;CX&nbsp;≠&nbsp;0&nbsp;<br/>LOOPNZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPR&nbsp;测试条件：ZF&nbsp;==&nbsp;0&nbsp;&amp;&amp;&nbsp;CX&nbsp;≠&nbsp;0&nbsp;<br/>执行操作:&nbsp;先执行CX=CX-1,再检测上面的测试条件,如满足则IP=IP+符号扩展的D8,不满足则退出循环.<br/>过程调用及返回指令<br/><br/>CALL&nbsp;(CALL)&nbsp;过程调用指令<br/>CALL&nbsp;&nbsp;&nbsp;&nbsp;DST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DST在程序中实际是子程序标号<br/>执行操作：先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序.<br/>调用方式&nbsp;格式&nbsp;断点保护入栈情况&nbsp;过程入口地址&nbsp;<br/>段内直接&nbsp;CALL&nbsp;&nbsp;NEAR&nbsp;&nbsp;PTR&nbsp;&nbsp;PR1&nbsp;(SP-1)(SP-2)←IP&nbsp;,&nbsp;CS不进栈&nbsp;CS值保持不变,IP←DST&nbsp;<br/>段内间接&nbsp;CALL&nbsp;&nbsp;WORD&nbsp;PTR&nbsp;&nbsp;(EA)&nbsp;(SP-1)(SP-2)←IP&nbsp;,&nbsp;CS不进栈&nbsp;CS值保持不变,IP←(EA)&nbsp;<br/>段间直接&nbsp;CALL&nbsp;&nbsp;FAR&nbsp;&nbsp;PTR&nbsp;&nbsp;PR1&nbsp;(SP-1)(SP-2)←CS&nbsp;,&nbsp;(SP-3)(SP-4)←IP&nbsp;IP←DST偏移地址,CS←DST段地址&nbsp;<br/>段间间接&nbsp;CALL&nbsp;&nbsp;DWORD&nbsp;PTR&nbsp;&nbsp;(EA)&nbsp;(SP-1)(SP-2)←CS&nbsp;,&nbsp;(SP-3)(SP-4)←IP&nbsp;IP←(EA),CS←(EA+2)&nbsp;<br/>注：为了表明是段内调用,可使用NEAR&nbsp;PTR属性操作符作说明.<br/><br/>RET(RETurn)子程序返回指令<br/>RET&nbsp;&nbsp;&nbsp;&nbsp;<br/>RET&nbsp;&nbsp;&nbsp;&nbsp;EXP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//带立即数返回<br/>子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序.返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.]]></summary>
	  <link rel="alternate" type="text/html" href="http://www.is21.cn/default.asp?id=301" /> 
	  <id>http://www.is21.cn/default.asp?id=301</id> 
  </entry>	
		
</feed>