﻿<?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>C++博客-jack-wang-随笔分类-汇编</title><link>http://www.cppblog.com/jack-wang/category/14834.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 02 Sep 2010 19:22:30 GMT</lastBuildDate><pubDate>Thu, 02 Sep 2010 19:22:30 GMT</pubDate><ttl>60</ttl><item><title>8086/8088汇编指令系统</title><link>http://www.cppblog.com/jack-wang/archive/2010/09/03/125709.html</link><dc:creator>小王</dc:creator><author>小王</author><pubDate>Thu, 02 Sep 2010 17:01:00 GMT</pubDate><guid>http://www.cppblog.com/jack-wang/archive/2010/09/03/125709.html</guid><wfw:comment>http://www.cppblog.com/jack-wang/comments/125709.html</wfw:comment><comments>http://www.cppblog.com/jack-wang/archive/2010/09/03/125709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jack-wang/comments/commentRss/125709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jack-wang/services/trackbacks/125709.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt">一、数据传送指令<br>1.通用数据传送指令<br>MOV（Move）传送<br>PUSH（Push onto the stack）进栈<br>POP（Pop from the stack）出栈<br>XCHG（Exchange）交换<br>.MOV指令<br>格式为: MOV&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(SRC)<br>.PUSH进栈指令<br>格式为:PUSH&nbsp;&nbsp; SRC<br>执行的操作:(SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(SRC)<br>.POP出栈指令<br>格式为:POP&nbsp;&nbsp; DST<br>执行的操作:(DST)&lt;-((SP+1),(SP))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)+2<br>.XCHG 交换指令<br>格式为:XCHG&nbsp;&nbsp; OPR1,OPR2<br>执行的操作:(OPR1)&lt;--&gt;(OPR2)</p>
<p style="FONT-SIZE: 10pt">2.累加器专用传送指令<br>IN(Input)&nbsp;&nbsp; 输入<br>OUT(Output)&nbsp;&nbsp; 输出<br>XLAT(Translate)&nbsp;&nbsp; 换码<br>这组指令只限于使用累加器AX或AL传送信息.<br>.IN 输入指令<br>长格式为:&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp; AL,PORT(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp; AX,PORT(字)<br>执行的操作:&nbsp;&nbsp; (AL)&lt;-(PORT)(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (AX)&lt;-(PORT+1,PORT)(字)<br>短格式为:&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp; AL,DX(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp; AX,DX(字)<br>执行的操作:&nbsp;&nbsp; AL&lt;-((DX))(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AX&lt;-((DX)+1,DX)(字)<br>.OUT 输出指令<br>长格式为:&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp; PORT,AL(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp;&nbsp; PORT,AX(字)<br>执行的操作:&nbsp;&nbsp; (PORT)&lt;-(AL)(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PORT+1,PORT)&lt;-(AX)(字)<br>短格式为:&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp; DX,AL(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUT&nbsp;&nbsp; DX,AX(字)<br>执行的操作:&nbsp;&nbsp; ((DX))&lt;-(AL)(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((DX)+1,(DX))&lt;-AX(字)<br>&nbsp;&nbsp;&nbsp;&nbsp; 在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号&gt;=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来 传送信息. <br>.XLAT&nbsp;&nbsp; 换码指令<br>格式为:&nbsp;&nbsp;&nbsp;&nbsp; XLAT&nbsp;&nbsp; OPR<br>或:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XLAT<br>执行的操作:(AL)&lt;-((BX)+(AL))</p>
<p style="FONT-SIZE: 10pt">3.有效地址送寄存器指令<br>LEA(Load effective address)有效地址送寄存器<br>LDS(Load DS with Pointer)指针送寄存器和DS<br>LES(Load ES with Pointer)指针送寄存器和ES<br>.LEA 有效地址送寄存器<br>格式为:&nbsp;&nbsp; LEA&nbsp;&nbsp;&nbsp; REG,SRC<br>执行的操作:(REG)&lt;-SRC<br>&nbsp;&nbsp;&nbsp;&nbsp; 指令把源操作数的有效地址送到指定的寄存器中.<br>.LDS 指针送寄存器和DS指令<br>格式为:&nbsp;&nbsp; LDS&nbsp;&nbsp; REG,SRC<br>执行的操作:(REG)&lt;-(SRC)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (DS)&lt;-(SRC+2)<br>&nbsp;&nbsp;&nbsp;&nbsp; 把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器.<br>.LES 指针送寄存器和ES指令<br>格式为:&nbsp;&nbsp; LES&nbsp;&nbsp; REG,SRC<br>执行的操作: (REG)&lt;-(SRC)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ES)&lt;-(SRC+2)<br>&nbsp;&nbsp;&nbsp;&nbsp; 把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.</p>
<p style="FONT-SIZE: 10pt">4.标志寄存器传送指令<br>LAHF(Load AH with flags)标志送AH<br>SAHF(store AH into flags)AH送标志寄存器<br>PUSHF(push the flags) 标志进栈<br>POPF(pop the flags) 标志出栈<br>.LAHF 标志送AH<br>格式为:&nbsp;&nbsp;&nbsp;&nbsp; LAHF<br>执行的操作:(AH)&lt;-(PWS的低字节)<br>.SAHF AH送标志寄存器<br>格式为:&nbsp;&nbsp;&nbsp;&nbsp; SAHF<br>执行的操作:(PWS的低字节)&lt;-(AH)<br>.PUSHF 标志进栈<br>格式为:&nbsp;&nbsp;&nbsp;&nbsp; PUSHF<br>执行的操作:(SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(PSW)<br>.POPF 标志出栈<br>格式为:&nbsp;&nbsp;&nbsp;&nbsp; POPF<br>执行的操作:(PWS)&lt;-((SP)+1,(SP))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP+2)<br>二、算术指令<br>1.加法指令<br>ADD(add)加法<br>ADC(add with carry)带进位加法<br>INC(increment)加1<br>.ADD&nbsp;&nbsp; 加法指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; ADD&nbsp;&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(SRC)+(DST)<br>.ADC&nbsp;&nbsp; 带进位加法指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; ADC&nbsp;&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(SRC)+(DST)+CF<br>.ADD&nbsp;&nbsp; 加1指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; INC&nbsp;&nbsp;&nbsp; OPR<br>执行的操作:(OPR)&lt;-(OPR)+1</p>
<p style="FONT-SIZE: 10pt">2.减法指令<br>SUB(subtract)减法<br>SBB(subtract with borrow)带借位减法<br>DEC(Decrement)减1<br>NEG(Negate)求补<br>CMP(Compare)比较<br>.SUB&nbsp;&nbsp; 减法指令<br>格式:&nbsp;&nbsp; SUB&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(DST)-(SRC)<br>.SBB&nbsp;&nbsp; 带借位减法指令<br>格式:&nbsp;&nbsp; SBB&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(DST)-(SRC)-CF<br>.DEC&nbsp;&nbsp; 减1指令<br>格式:&nbsp;&nbsp; DEC&nbsp;&nbsp; OPR<br>执行的操作:(OPR)&lt;-(OPR)-1<br>.NEG&nbsp;&nbsp; 求补指令<br>格式:&nbsp;&nbsp; NEG&nbsp;&nbsp; OPR<br>执行的操作:(OPR)&lt;- -(OPR)<br>.CMP&nbsp;&nbsp; 比较指令<br>格式:&nbsp;&nbsp; CMP&nbsp;&nbsp; OPR1,OPR2<br>执行的操作:(OPR1)-(OPR2)<br>&nbsp;&nbsp;&nbsp;&nbsp; 该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.</p>
<p style="FONT-SIZE: 10pt">3.乘法指令<br>MUL(Unsigned Multiple)无符号数乘法<br>IMUL(Signed Multiple)带符号数乘法<br>.MUL 无符号数乘法指令<br>格式:&nbsp;&nbsp;&nbsp; MUL&nbsp;&nbsp; SRC<br>执行的操作:<br>&nbsp;&nbsp;&nbsp;&nbsp; 字节操作数:(AX)&lt;-(AL)*(SRC)<br>&nbsp;&nbsp;&nbsp;&nbsp; 字操作数:(DX,AX)&lt;-(AX)*(SRC)<br>.IMUL 带符号数乘法指令<br>格式:&nbsp;&nbsp;&nbsp; IMUL&nbsp;&nbsp; SRC<br>执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数.</p>
<p style="FONT-SIZE: 10pt">4.除法指令<br>DIV(Unsigned divide)无符号数除法<br>IDIV(Signed divide)带符号数除法</p>
<p style="FONT-SIZE: 10pt">CBW(Convert byte to word)字节转换为字<br>CWD(Contert word to double word)字转换为双字<br>.DIV&nbsp;&nbsp; 无符号数除法指令<br>格式:&nbsp;&nbsp;&nbsp; DIV&nbsp;&nbsp; SRC<br>执行的操作:<br>&nbsp; 字节操作:(AL)&lt;-(AX)/(SRC)的商<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (AH)&lt;-(AX)/(SRC)的余数<br>&nbsp;&nbsp; 字操作:&nbsp;&nbsp; (AX)&lt;-(DX,AX)/(SRC)的商<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (AX)&lt;-(DX,AX)/(SRC)的余数<br>.IDIV&nbsp;&nbsp; 带符号数除法指令<br>格式:&nbsp;&nbsp;&nbsp; DIV&nbsp;&nbsp; SRC<br>执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同.<br>.CBW 字节转换为字指令<br>格式:&nbsp;&nbsp;&nbsp; CBW<br>执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH<br>.CWD 字转换为双字指令<br>格式:&nbsp;&nbsp; CWD<br>执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.<br>&nbsp;&nbsp;&nbsp;&nbsp; 这两条指令都不影响条件码.</p>
<p style="FONT-SIZE: 10pt">三、逻辑指令<br>1.逻辑运算指令<br>AND(and)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 逻辑与<br>OR(or)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 逻辑或<br>NOT(not)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 逻辑非<br>XOR(exclusive or)异或<br>TEST(test)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试<br>.AND&nbsp;&nbsp; 逻辑与指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; AND&nbsp;&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(DST)^(SRC)<br>.OR&nbsp;&nbsp; 逻辑或指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; OR&nbsp;&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(DST)V(SRC)<br>.NOT&nbsp;&nbsp; 逻辑非指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; NOT&nbsp;&nbsp;&nbsp; OPR<br>执行的操作:(OPR)&lt;-(OPR)<br>.XOR&nbsp;&nbsp; 异或指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; XOR&nbsp;&nbsp;&nbsp; DST,SRC<br>执行的操作:(DST)&lt;-(DST)V(SRC)<br>.TEST&nbsp;&nbsp; 测试指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; TEST&nbsp;&nbsp;&nbsp; OPR1,OPR2<br>执行的操作:(DST)^(SRC)<br>两个操作数相与的结果不保存,只根据其特征置条件码</p>
<p style="FONT-SIZE: 10pt">2.移位指令<br>SHL(shift logical left)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 逻辑左移<br>SAL(shift arithmetic left)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算术左移<br>SHR(shift logical right)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 逻辑右移<br>SAR(shift arithmetic right)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算术右移<br>ROL(Rotate left)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 循环左移<br>ROR(Rotate right)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 循环右移<br>RCL(Rotate left through carry)&nbsp;&nbsp; 带进位循环左移<br>RCR(Rotate right through carry) 带进位循环右移<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; SHL&nbsp;&nbsp; OPR,CNT(其余的类似)<br>其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.<br>&nbsp;&nbsp;&nbsp;&nbsp; 循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.</p>
<p style="FONT-SIZE: 10pt"><br>四、串处理指令<br>1.与REP相配合工作的MOVS,STOS和LODS指令<br>.REP重复串操作直到(CX)=0为上<br>格式:&nbsp;&nbsp; REP&nbsp;&nbsp;&nbsp; string primitive<br>其中String Primitive可为MOVS,LODS或STOS指令<br>执行的操作:<br>1)如(CX)=0则退出REP,否则往下执行.<br>2)(CX)&lt;-(CX)-1<br>3)执行其中的串操作<br>4)重复1)~3)<br>.MOVS&nbsp;&nbsp; 串传送指令<br>格式:可有三种<br>&nbsp;&nbsp;&nbsp;&nbsp; MOVS&nbsp;&nbsp; DST,SRC<br>&nbsp;&nbsp;&nbsp;&nbsp; MOVSB(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp; MOVSW(字)<br>其中第二、三种格式明确地注明是传送字节或字，第一种格式则应在操作数中表明是字还是字节操作，例如：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MOVS&nbsp;&nbsp;&nbsp;&nbsp; ES:BYTE PTR[DI],DS:[SI]<br>执行的操作:<br>1)((DI))&lt;-((SI))<br>2)字节操作:<br>&nbsp;&nbsp;&nbsp; (SI)&lt;-(SI)+(或-)1,(DI)&lt;-(DI)+(或-)1<br>&nbsp;&nbsp;&nbsp; 当方向标志DF=0时用+,当方向标志DF=1时用-<br>3)字操作:<br>&nbsp;&nbsp;&nbsp; (SI)&lt;-(SI)+(或-)2,(DI)&lt;-(DI)+(或-)2<br>&nbsp;&nbsp;&nbsp; 当方向标志DF=0时用+,当方向标志DF=1时用-<br>该指令不影响条件码.<br>.CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;<br>.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量.<br>.STOS&nbsp;&nbsp; 存入串指令<br>格式:&nbsp;&nbsp;&nbsp; STOS&nbsp;&nbsp; DST<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STOSB(字节)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; STOSW(字)<br>执行的操作:<br>&nbsp;&nbsp;&nbsp; 字节操作:((DI))&lt;-(AL),(DI)&lt;-(DI)+-1 <br>&nbsp;&nbsp;&nbsp; 字操作:&nbsp;&nbsp; ((DI))&lt;-(AX),(DI)&lt;-(DI)+-2<br>该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中.<br>.LODS&nbsp;&nbsp; 从串取指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; LODS&nbsp;&nbsp; SRC<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LODSB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LODSW<br>执行的操作:<br>&nbsp;&nbsp;&nbsp; 字节操作:(AL)&lt;-((SI)),(SI)&lt;-(SI)+-1<br>&nbsp;&nbsp;&nbsp;&nbsp; 字操作: (AX)&lt;-((SI)),(SI)&lt;-(SI)+-2<br>该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.<br>&nbsp;&nbsp;&nbsp;&nbsp; 一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.<br>&nbsp;&nbsp; <br>2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令<br>.REPE/REPZ&nbsp;&nbsp; 当相等/为零时重复串操作<br>格式:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPE(或REPZ)&nbsp;&nbsp;&nbsp;&nbsp; String Primitive<br>其中String Primitive可为CMPS或SCAS指令.<br>执行的操作:<br>1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行<br>2)(CX)&lt;-(CX)-1<br>3)执行其后的串指令<br>4)重复1)~3)<br>.REPNE/REPNZ&nbsp;&nbsp; 当不相等/不为零时重复串操作<br>格式:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REPNE(或REPNZ)&nbsp;&nbsp;&nbsp; String Primitive<br>其中String Primitive可为CMPS或SCAS指令<br>执行的操作:<br>&nbsp;&nbsp;&nbsp;&nbsp; 除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同.<br>.CMPS&nbsp;&nbsp; 串比较指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMP&nbsp;&nbsp;&nbsp; SRC,DST<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMPSB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMPSW<br>执行的操作:<br>1)((SI))-((DI))<br>2)字节操作:(SI)&lt;-(SI)+-1,(DI)&lt;-(DI)+-1<br>&nbsp;&nbsp; 字操作:&nbsp;&nbsp; (SI)&lt;-(SI)+-2,(DI)&lt;-(DI)+-2 <br>指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同.<br>.SCAS&nbsp;&nbsp; 串扫描指令<br>格式:&nbsp;&nbsp;&nbsp; SCAS&nbsp;&nbsp;&nbsp; DST<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCASB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SCASW<br>执行的操作:<br>&nbsp;&nbsp;&nbsp;&nbsp; 字节操作:(AL)-((DI)),(DI)&lt;-(DI)+-1<br>&nbsp;&nbsp;&nbsp;&nbsp; 字操作:&nbsp;&nbsp; (AL)-((DI)),(DI)&lt;-(DI)+-2<br>该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同. </p>
<p style="FONT-SIZE: 10pt">五、控制转移指令<br>&nbsp; 1.无条件转移指令<br>.JMP(jmp)&nbsp;&nbsp; 跳转指令<br>1)段内直接短转移<br>格式:JMP&nbsp;&nbsp; SHORT OPR<br>执行的操作:(IP)&lt;-(IP)+8位位移量<br>2)段内直接近转移<br>格式:JMP&nbsp;&nbsp; NEAR PTR OPR<br>执行的操作:(IP)&lt;-(IP)+16位位移量<br>3)段内间接转移<br>格式:JMP&nbsp;&nbsp; WORD PTR OPR<br>执行的操作:(IP)&lt;-(EA)<br>4)段间直接(远)转移<br>格式:JMP&nbsp;&nbsp; FAR PTR OPR<br>执行的操作:(IP)&lt;-OPR的段内偏移地址<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)&lt;-OPR所在段的段地址<br>5)段间间接转移<br>格式:JMP&nbsp;&nbsp; DWORD PTR OPR<br>执行的操作:(IP)&lt;-(EA)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)&lt;-(EA+2)<br>2.条件转移指令<br>1)根据单个条件标志的设置情况转移<br>.JZ(或JE)(Jump if zero,or equal)&nbsp;&nbsp; 结果为零(或相等)则转移<br>格式:JE(或JZ)&nbsp;&nbsp; OPR<br>测试条件:ZF=1<br>.JNZ(或JNE)(Jump if not zero,or not equal) 结果不为零(或不相等)则转移<br>格式:JNZ(或JNE)&nbsp;&nbsp; OPR<br>测试条件:ZF=0<br>.JS(Jump if sign)&nbsp;&nbsp; 结果为负则转移<br>格式:&nbsp;&nbsp; JS&nbsp;&nbsp; OPR<br>测试条件:SF=1<br>.JNS(Jump if not sign)&nbsp;&nbsp; 结果为正则转移<br>格式:JNS&nbsp;&nbsp; OPR<br>测试条件:SF=0<br>.JO(Jump if overflow)&nbsp;&nbsp; 溢出则转移<br>格式:&nbsp;&nbsp;&nbsp; JO&nbsp;&nbsp; OPR<br>测试条件:OF=1<br>.JNO(Jump if not overflow)&nbsp;&nbsp; 不溢出则转移<br>格式:&nbsp;&nbsp;&nbsp; JNO OPR<br>测试条件:OF=0<br>.JP(或JPE)(Jump if parity,or parity even) 奇偶位为1则转移<br>格式:&nbsp;&nbsp;&nbsp; JP&nbsp;&nbsp; OPR<br>测试条件:PF=1<br>.JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移<br>格式:&nbsp;&nbsp;&nbsp; JNP(或JPO)&nbsp;&nbsp; OPR<br>测试条件:PF=0<br>.JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移<br>格式:JB(或JNAE,JC)&nbsp;&nbsp; OPR<br>测试条件:CF=1<br>.JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移<br>格式:JNB(或JAE,JNC)&nbsp;&nbsp; OPR<br>测试条件:CF=0<br>2)比较两个无符号数,并根据比较的结果转移<br>.JB(或JNAE,JC)<br>格式:同上<br>.JNB(或JAE,JNC)<br>格式:同上<br>.JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移<br>格式:JBE(或JNA)&nbsp;&nbsp; OPR<br>测试条件:CFVZF=1<br>.JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移<br>格式:JNBE(或JA)&nbsp;&nbsp; OPR<br>测试条件:CFVZF=0<br>3)比较两个带符号数,并根据比较的结果转移<br>.JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移<br>格式:JL(或JNGE)&nbsp;&nbsp; OPR<br>测试条件:SFVOF=1<br>.JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移<br>格式:JNL(或JGE)&nbsp;&nbsp; OPR<br>测试条件:SFVOF=0<br>.JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移<br>格式:JLE(或JNG)&nbsp;&nbsp; OPR<br>测试条件:(SFVOF)VZF=1<br>.JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移<br>格式:JNLE(或JG)&nbsp;&nbsp; OPR<br>测试条件:(SFVOF)VZF=0<br>4)测试CX的值为0则转移指令<br>.JCXZ(Jump if CX register is zero)&nbsp;&nbsp; CX寄存器的内容为零则转移<br>格式:JCXZ&nbsp;&nbsp; OPR<br>测试条件:(CX)=0<br>注:条件转移全为8位短跳!</p>
<p style="FONT-SIZE: 10pt">3.循环指令<br>.LOOP 循环指令<br>格式: LOOP&nbsp;&nbsp; OPR<br>测试条件:(CX)&lt;&gt;0<br>.LOOPZ/LOOPE 当为零或相等时循环指令<br>格式: LOOPZ(或LOOPE)&nbsp;&nbsp; OPR<br>测试条件:(CX)&lt;&gt;0且ZF=1<br>.LOOPNZ/LOOPNE 当不为零或不相等时循环指令<br>格式: LOOPNZ(或LOOPNE)&nbsp;&nbsp; OPR<br>测试条件:(CX)&lt;&gt;0且ZF=0<br>这三条指令的步骤是:<br>1)(CX)&lt;-(CX)-1<br>2)检查是否满足测试条件,如满足则(IP)&lt;-(IP)+D8的符号扩充.</p>
<p style="FONT-SIZE: 10pt">4.子程序<br>.CALL调用指令<br>.RET返回指令<br>5.中断<br>.INT指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp; INT&nbsp;&nbsp; TYPE<br>或&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INT<br>执行的操作:(SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(PSW)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(CS)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(IP)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IP)&lt;-(TYPE*4)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)&lt;-(TYPE*4+2)<br>.INTO&nbsp;&nbsp; 若溢出则中断<br>执行的操作:若OF=1则:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(PSW)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(CS)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)-2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((SP)+1,(SP))&lt;-(IP)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (IP)&lt;-(10H)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)&lt;-(12H)<br>.IRET&nbsp;&nbsp;&nbsp;&nbsp; 从中断返回指令<br>格式:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IRET<br>执行的操作:(IP)&lt;-((SP)+1,(SP))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)+2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (CS)&lt;-((SP)+1,(SP))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)+2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (PSW)&lt;-((SP)+1,(SP))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SP)&lt;-(SP)+2</p>
<p style="FONT-SIZE: 10pt">六、处理机控制指令<br>1.标志处理指令<br>.CLC进位位置0指令(Clear carry)CF&lt;-0<br>.CMC进位位求反指令(Complement carry)CF&lt;-CF<br>.STC进位位置1指令(Set carry)CF&lt;-1<br>.CLD方向标志置0指令(Clear direction)DF&lt;-0<br>.STD方向标志置1指令(Set direction)DF&lt;-1<br>.CLI中断标志置0指令(Clear interrupt)IF&lt;-0<br>.STI中断标志置1指令(Set interrupt)IF&lt;-0<br>2.其他处理机控制指令<br>NOP(No Opreation)&nbsp;&nbsp;&nbsp; 无操作<br>HLT(Halt)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 停机<br>WAIT(Wait)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 等待<br>ESC(Escape)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 换码<br>LOCK(Lock)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 封锁<br>这些指令可以控制处理机状态.这们都不影响条件码.<br>.NOP 无操作指令<br>&nbsp;&nbsp;&nbsp;&nbsp; 该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代.<br>.HLT停机指令<br>&nbsp;&nbsp;&nbsp;&nbsp; 该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序.<br>.WAIT等待指令<br>&nbsp;&nbsp;&nbsp;&nbsp; 该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行.<br>.ESC换码指令<br>&nbsp;&nbsp;&nbsp; 格式ESC&nbsp;&nbsp; mem<br>其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去.当然ESC指令不允许使用立即数和寄存器寻址方式.这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数.协处理机(如8087)则是为了提高速度而可以选配的硬件.<br>.LOCK封锁指令<br>&nbsp;&nbsp;&nbsp;&nbsp; 该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止.当CPU与其他处理机协同工作时,该指令可避免破坏有用信息.</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">汇编指令大全</p>
<p style="FONT-SIZE: 10pt">一、数据传输指令 <br>─────────────────────────────────────── <br>它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 汇编指令大全<br>1. 通用数据传送指令. <br>MOV 传送字或字节. <br>MOVSX 先符号扩展,再传送. <br>MOVZX 先零扩展,再传送. <br>PUSH 把字压入堆栈. <br>POP 把字弹出堆栈. <br>PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. <br>POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. <br>PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. <br>POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. <br>BSWAP 交换32位寄存器里字节的顺序 <br>XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) <br>CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) <br>XADD 先交换再累加.( 结果在第一个操作数里 ) <br>XLAT 字节查表转换. <br>── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]-&gt;AL ) <br>2. 输入输出端口传送指令. <br>IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) <br>OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) <br>输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时, <br>其范围是 0-65535. <br>3. 目的地址传送指令. <br>LEA 装入有效地址. <br>例: LEA DX,string ;把偏移地址存到DX. <br>LDS 传送目标指针,把指针内容装入DS. <br>例: LDS SI,string ;把段地址:偏移地址存到DS:SI. <br>LES 传送目标指针,把指针内容装入ES. <br>例: LES DI,string ;把段地址:偏移地址存到ES:DI. <br>LFS 传送目标指针,把指针内容装入FS. <br>例: LFS DI,string ;把段地址:偏移地址存到FS:DI. <br>LGS 传送目标指针,把指针内容装入GS. <br>例: LGS DI,string ;把段地址:偏移地址存到GS:DI. <br>LSS 传送目标指针,把指针内容装入SS. <br>例: LSS DI,string ;把段地址:偏移地址存到SS:DI. <br>4. 标志传送指令. <br>LAHF 标志寄存器传送,把标志装入AH. <br>SAHF 标志寄存器传送,把AH内容装入标志寄存器. <br>PUSHF 标志入栈. <br>POPF 标志出栈. <br>PUSHD 32位标志入栈. <br>POPD 32位标志出栈. </p>
<p style="FONT-SIZE: 10pt">二、算术运算指令 <br>─────────────────────────────────────── <br>ADD 加法. <br>ADC 带进位加法. <br>INC 加 1. <br>AAA 加法的ASCII码调整. <br>DAA 加法的十进制调整. <br>SUB 减法. <br>SBB 带借位减法. <br>DEC 减 1. <br>NEC 求反(以 0 减之). <br>CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). <br>AAS 减法的ASCII码调整. <br>DAS 减法的十进制调整. <br>MUL 无符号乘法. <br>IMUL 整数乘法. <br>以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), <br>AAM 乘法的ASCII码调整. <br>DIV 无符号除法. <br>IDIV 整数除法. <br>以上两条,结果回送: <br>商回送AL,余数回送AH, (字节运算); <br>或 商回送AX,余数回送DX, (字运算). <br>AAD 除法的ASCII码调整. <br>CBW 字节转换为字. (把AL中字节的符号扩展到AH中去) <br>CWD 字转换为双字. (把AX中的字的符号扩展到DX中去) <br>CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) <br>CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) </p>
<p style="FONT-SIZE: 10pt">三、逻辑运算指令 <br>─────────────────────────────────────── <br>AND 与运算. <br>OR 或运算. <br>XOR 异或运算. <br>NOT 取反. <br>TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果). <br>SHL 逻辑左移. <br>SAL 算术左移.(=SHL) <br>SHR 逻辑右移. <br>SAR 算术右移.(=SHR) <br>ROL 循环左移. <br>ROR 循环右移. <br>RCL 通过进位的循环左移. <br>RCR 通过进位的循环右移. <br>以上八种移位指令,其移位次数可达255次. <br>移位一次时, 可直接用操作码. 如 SHL AX,1. <br>移位&gt;1次时, 则由寄存器CL给出移位次数. <br>如 MOV CL,04 <br>SHL AX,CL </p>
<p style="FONT-SIZE: 10pt">四、串指令 <br>─────────────────────────────────────── <br>DS:SI 源串段寄存器 :源串变址. <br>ES:DI 目标串段寄存器:目标串变址. <br>CX 重复次数计数器. <br>AL/AX 扫描值. <br>D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量. <br>Z标志 用来控制扫描或比较操作的结束. <br>MOVS 串传送. <br>( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) <br>CMPS 串比较. <br>( CMPSB 比较字符. CMPSW 比较字. ) <br>SCAS 串扫描. <br>把AL或AX的内容与目标串作比较,比较结果反映在标志位. <br>LODS 装入串. <br>把源串中的元素(字或字节)逐一装入AL或AX中. <br>( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. ) <br>STOS 保存串. <br>是LODS的逆过程. <br>REP 当CX/ECX&lt;&gt;0时重复. <br>REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX&lt;&gt;0时重复. <br>REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX&lt;&gt;0时重复. <br>REPC 当CF=1且CX/ECX&lt;&gt;0时重复. <br>REPNC 当CF=0且CX/ECX&lt;&gt;0时重复. </p>
<p style="FONT-SIZE: 10pt">五、程序转移指令<br>─────────────────────────────────────── <br>1&gt;无条件转移指令 (长转移) <br>JMP 无条件转移指令 <br>CALL 过程调用 <br>RET/RETF过程返回. <br>2&gt;条件转移指令 (短转移,-128到+127的距离内) <br>( 当且仅当(SF XOR OF)=1时,OP1<br>JA/JNBE 不小于或不等于时转移. <br>JAE/JNB 大于或等于转移. <br>JB/JNAE 小于转移. <br>JBE/JNA 小于或等于转移. <br>以上四条,测试无符号整数运算的结果(标志C和Z). <br>JG/JNLE 大于转移. <br>JGE/JNL 大于或等于转移. <br>JL/JNGE 小于转移. <br>JLE/JNG 小于或等于转移. <br>以上四条,测试带符号整数运算的结果(标志S,O和Z). <br>JE/JZ 等于转移. <br>JNE/JNZ 不等于时转移. <br>JC 有进位时转移. <br>JNC 无进位时转移. <br>JNO 不溢出时转移. <br>JNP/JPO 奇偶性为奇数时转移. <br>JNS 符号位为 "0" 时转移. <br>JO 溢出转移. <br>JP/JPE 奇偶性为偶数时转移. <br>JS 符号位为 "1" 时转移. <br>3&gt;循环控制指令(短转移) <br>LOOP CX不为零时循环. <br>LOOPE/LOOPZ CX不为零且标志Z=1时循环. <br>LOOPNE/LOOPNZ CX不为零且标志Z=0时循环. <br>JCXZ CX为零时转移. <br>JECXZ ECX为零时转移. <br>4&gt;中断指令 <br>INT 中断指令 <br>INTO 溢出中断 <br>IRET 中断返回 <br>5&gt;处理器控制指令 <br>HLT 处理器暂停, 直到出现中断或复位信号才继续. <br>WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. <br>ESC 转换到外处理器. <br>LOCK 封锁总线. <br>NOP 空操作. <br>STC 置进位标志位. <br>CLC 清进位标志位. <br>CMC 进位标志取反. <br>STD 置方向标志位. <br>CLD 清方向标志位. <br>STI 置中断允许位. <br>CLI 清中断允许位. </p>
<p style="FONT-SIZE: 10pt">六、伪指令<br>─────────────────────────────────────── <br>DW 定义字(2字节). <br>PROC 定义过程. <br>ENDP 过程结束. <br>SEGMENT 定义段.<br>ASSUME 建立段寄存器寻址. <br>ENDS 段结束. <br>END 程序结束</p>
<p style="FONT-SIZE: 10pt">&nbsp;</p>
<p style="FONT-SIZE: 10pt">本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/lqk1985/archive/2008/09/11/2911250.aspx">http://blog.csdn.net/lqk1985/archive/2008/09/11/2911250.aspx</a></p>
<img src ="http://www.cppblog.com/jack-wang/aggbug/125709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jack-wang/" target="_blank">小王</a> 2010-09-03 01:01 <a href="http://www.cppblog.com/jack-wang/archive/2010/09/03/125709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>