附录附录A常用80x86指令速查表指令按助记符字母顺序排列,缩写、符号约定如下:(1)指令中,dst,src表示目的操作数和源操作数。仅一个操作数时,个别处也表示为opr。(2)imm表示立即数,8/16/32位立即数记作:imm8/imm16/imm32。(3)reg表示通用寄存器,8/16/32位通用寄存器记作:reg8/reg16/reg32。(4)mem表示内存操作数,8/16/32等内存操作数记作:mem8/mem16/mem32等。(5)seg表示段寄存器,CS,DS,SS,ES,FS,GS。(6)acc表示累加器,8/16/32累加器对应AL/AX/EAX。(7)OF,SF,ZF,AF,PF,CF分别表示为O,S,Z,A,P,C,相应位置为:字母,根据结果状态设置;?,状态不确定;-,状态不变;1,置1;0,清0;例如:0SZ?P-表示:OF清0,AF不确定,CF不变,其它根据结果设置。若该栏空白,则表示无关。(8)寄存器符号诸如(E)CX,(E)SI,(E)DI,(E)SP,(E)BP和(E)IP等,表示在16地址模式下使用16位寄存器(如CX),或在32地址模式下使用32位寄存器(如ECX)。(9)周期数表示指令执行所需的CPU时钟周期个数,即执行时间为:周期数/主频(秒)。(10)诸如(386+)是表示该指令只能用于80386及以后微处理器上。指令功能指令形式周期数影响标志位AAA非压缩BCD加法调整,AH+进位AAA3?SZ?PCAADAH×10+ALAL,之后AH清0AAD10OSZAPCAAMAL÷10的商AH,余数ALAAM18OSZAPCAAS非压缩BCD减法调整,AH-借位AAS3?SZ?PCADCdst,src带进位加法:dst+src+CFdstADCreg,reg1OSZAPCADCreg,mem2ADCreg,imm1ADCacc,imm1ADCmem,reg3ADCmem,imm3ADDdst,src加法:dst+srcdstADDreg,reg1OSZAPCADDreg,mem2ADDreg,imm1ADDacc,imm1ADDmem,reg3ADDmem,imm3汇编语言程序设计·252·续表指令功能指令形式周期数影响标志位ANDdst,src逻辑与:dstsrcdstANDreg,reg10SZ?P0ANDreg,mem2ANDreg,imm1ANDacc,imm1ANDmem,reg3ANDmem,imm3ARPLdst,src调整选择器的RPL域ARPLreg/mem16,reg167--Z---BOUNDreg,mem越界检查:(80188+)若reg值超出mem,则产生INT5BOUNDreg16,mem32INT+32BOUNDreg32,mem64BSFreg,src从低到高扫描src,16/32位(386+)若src=0,ZF清0,否则置1,位置regBSFreg,reg6~35??Z???BSFreg,mem6~43BSRreg,src从高到低扫描src,16/32位(386+)若src=0,ZF清0,否则置1,位置regBSRreg,reg6~35??Z???BSRreg,mem6~43BSWAPreg32反转reg32字节顺序(486+)BSWAPreg321BTdst,src位测试(386+)由dst指定的位CF(16/32位)BTreg,reg4?????CBTreg,imm4BTmem,reg9BTmem,imm4BTCdst,src位测试并变反(386+)dst的指定位CF,然后该位变反,(16/32位)BTCreg,reg7?????CBTCreg,imm7BTCmem,reg13BTCmem,imm8BTRdst,src位测试并清0(386+)dst的指定位CF,然后该位清0,(16/32位)BTRreg,reg7?????CBTRreg,imm7BTRmem,reg13BTRmem,imm8BTSdst,src位测试并置1(386+)dst的指定位CF,然后该位置1,(16/32位)BTSreg,reg7?????CBTSreg,imm7BTSmem,reg13BTSmem,imm8CALLdst子程序调用近调用:返回的偏移地址进栈,然后转至dst处执行;远调用:返回的段和偏移地址进栈,然后转至dst处执行CALLlabel(near)1CALLreg(near)2CALLmem(near)2CALLlabel(far)4CALLmem(far)5CBWAL符号扩展成AXCBW3CDQEAX符号扩展成EDX:EAXCDQ2CLCCF清0CLC2-----0CLDDF清0CLD2CLIIF清0,即关中断CLI7CLTS清除CR0中任务切换标志(386+)CLTS10CMCCF取反,即CFCFCMC2-----CCMOVccreg,src条件成立srcreg,16/32位(586+)cc:参见Jcc指令。CMOVccreg,reg4~9CMOVccreg,mem附录·253·续表指令功能指令形式周期数影响标志位CMPdst,src比较:dst-src,据此设置标志位CMPreg,reg1OSZAPCCMPreg,mem2CMPreg,imm1CMPacc,imm1CMPmem,reg2CMPmem,imm2CMPSx串比较:[(E)SI]-ES:[(E)DI],然后(E)SI,(E)DI增或减Δ(1/2/4)x:B,W,D对应字节(1)、字(2)、双字(4)。DF=0增,否则减CMPSB5OSZAPCCMPSWCMPSDCMPXCHGdst,regacc-dst,等regdst,否则dstacc(486+)CMPXCHGreg/mem,reg5,6OSZAPCCMPXCHG8BdstEDX:EAX-dst,等ECX:EBXdst,否则EDX:EAXdst(486+)CMPXCHG8Bmem6410--Z---CPUIDCPU标识EAX,EBX,ECX,EDXCPUID14CWDAX符号扩展成DX:AXCWD2CWDEAX符号扩展成EAXCWDE3DAA加法后的十进制调整ALDAA3?SZAPCDAS减法后的十进制调整ALDAS3?SZAPCDECopropr自减1,即opr-1oprDECreg1OSZAP-DECmem3DIVsrc无符号除法8位:AX÷src,商AL,余数AH16位:DX:AX÷src,商AX,余数DX32位:EDX:EAX÷src,商EAX,余数EDXDIVreg17~41??????DIVmemENTERm,n建m字节局部空间,n级的栈帧(286+)ENTERimm16,imm811+HLT暂停CPU,直到I/O中断发生HLTIDIVsrc有符号除8位:AX÷src,商AL,余数AH16位:DX:AX÷src,商AX,余数DX32位:EDX:EAX÷src,商EAX,余数EDXIDIVreg22~46??????IDIVmemIMULsrc有符号乘法8位:AL×srcAX16位:AX×srcDX:AX32位:EAX×srcEDX:EAXIMULreg10~11O????CIMULmemIMULreg,src有符号乘法reg×srcreg(286+)IMULreg,reg/mem10O????CIMULreg,src,imm有符号乘法src×immreg(286+)IMULreg,reg/mem,imm10O????CINacc,src端口数据accINacc,imm87INacc,DX7INCopropr自加1,即opr+1oprINCreg1OSZAP-INCmem3汇编语言程序设计·254·续表指令功能指令形式周期数影响标志位INSx端口DX数据ES:[(E)DI],然后(E)DI增或减Δ(1/2/4)x:B,W,D对应字节(1)、字(2)、双字(4);若DF=0增,否则减INSB9INSWINSDINTnFLAGS进栈,IF,TF置0,从[4n]双字单元取段和偏移地址,并转去执行(实地址模式)INT3INT+5INTimm8INT+6INTO若OF=1,则执行INT4INTO4,INT+5INVD使Cache无效INVD15INVLPG使TLB入口无效INVLPG29IRET中断返回:从堆栈弹出返回的偏移和段地址,再弹出标志寄存器内容IRET7Jccopr条件满足,则转移至oprJcclabel1JA/JNBEopr高于(CF=0ZF=0)JA/JNBElabelJAE/JNB/JNCopr高于等于(CF=0)JAE/JNB/JNClabelJB/JC/JNAEopr低于(CF=1)JB/JC/JNAElabelJBE/JNAopr低于等于(CF=1ZF=1)JBE/JNAlabelJE/JZopr等于(ZF=1)JE/JZlabelJG/JNLEopr大于(ZF=0SF=OF)JG/JNLElabelJGE/JNLopr大于等于(SF=OF)JGE/JNLlabelJL/JNGEopr小于(SF≠OF)JL/JNGElabelJLE/JNGopr小于等于(ZF=1SF≠OF)JLE/JNGlabelJNE/JNZopr不等于(ZF=0)JNE/JNZlabelJNOopr无溢出(OF=0)JNOlabelJNSopr非负数(SF=0)JNSlabelJOopr溢出(OF=1)JOlabelJP/JPEopr有偶数个1(PF=1)JP/JPElabelJPO/JNPopr有奇数个1(PF=0)JPO/JNPlabelJSopr负数(SF=1)JSlabelJCXZopr若CX=0,则转移至oprJCXZlabel6/5JECXZopr若ECX=0,则转移至oprJECXZlabel6/5JMPopr转移至opr近:转移后仅可改变(E)IP远:转移后可改变(E)IP和CSJMPlabel(near)1JMPreg(near)2JMPmem(near)2JMPlabel(far)3JMPmem(far)4LAHF标志寄存器低字节AHLAHF2------LARreg,dst将dst指定的选择器访问权regLARreg,reg/mem8--Z---LDSreg,mem将mem内容DS:regLDSreg,mem4LEAreg,mem将mem的偏移地址regLEAreg,mem1LEAVE释放栈帧,即:(E)BP(E)SP,POP(E)BPLEAVE3LESreg,mem将mem内容ES:regLESreg,mem4LFSreg,mem将mem内容FS:reg(386+)LFSreg,mem4附录·255·续表指令功能指令形式周期数影响标志位LGDTmem将mem内容GDTR(286+)LGDTmem6LGSreg,mem将mem内容GS:reg(386+)LGSreg,mem4LIDTmem将mem内容IDTR(286+)LIDTmem6LLDTsrcsrcLDTR(286+)LLDTreg/mem8LMSWsrcsrc机器状态字(CR0低16位)(286+)LMSWreg/mem8LOCK总线锁(以便其他处理器处理指令)LOCK1LODSx从串取:[(E)SI]acc,然后(E)SI增或减Δ(1/2/4)x:B,W,D对应字节(1)、字(2)、双字(4);若DF=0增,否则减LODSB2LODSWLODSDLOOPopr(E)CX自减1,若(E)CX≠0则转移LOOPlabel5/6LOOPE/LOOPZopr(E)CX自减1,若ZF=1(E)CX≠0则转移LOOPE/LOOPZlabel7/8LOOPNE/LOOPNZopr(E)CX自减1,若ZF=0(E)CX≠0则转移LOOPNE/LOOPNZlabel7/8LSLreg,srcsrc选择器确定的段界reg(286+)LSLreg