汇编语言的所有指令数据传送指令集MOV功能:把源操作数送给目的操作数语法:MOV目的操作数,源操作数格式:MOVr1,r2MOVr,mMOVm,rMOVr,dataXCHG功能:交换两个操作数的数据语法:XCHG格式:XCHGr1,r2XCHGm,rXCHGr,mPUSH,POP功能:把操作数压入或取出堆栈语法:PUSH操作数POP操作数格式:PUSHrPUSHMPUSHdataPOPrPOPmPUSHF,POPF,PUSHA,POPA功能:堆栈指令群格式:PUSHFPOPFPUSHAPOPALEA,LDS,LES功能:取地址至寄存器语法:LEAr,mLDSr,mLESr,mXLAT(XLATB)功能:查表指令语法:XLATXLATm算数运算指令ADD,ADC功能:加法指令语法:ADDOP1,OP2ADCOP1,OP2格式:ADDr1,r2ADDr,mADDm,rADDr,data影响标志:C,P,A,Z,S,OSUB,SBB功能:减法指令语法:SUBOP1,OP2SBBOP1,OP2格式:SUBr1,r2SUBr,mSUBm,rSUBr,dataSUBm,data影响标志:C,P,A,Z,S,OINC,DEC功能:把OP的值加一或减一语法:INCOPDECOP格式:INCr/mDECr/m影响标志:P,A,Z,S,ONEG功能:将OP的符号反相(取二进制补码)语法:NEGOP格式:NEGr/m影响标志:C,P,A,Z,S,OMUL,IMUL功能:乘法指令语法:MULOPIMULOP格式:MULr/mIMULr/m影响标志:C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法:DIVOPIDIVOP格式:DIVr/mIDIVr/mCBW,CWD功能:有符号数扩展指令语法:CBWCWDAAA,AAS,AAM,AAD功能:非压BCD码运算调整指令语法:AAAAASAAMAAD影响标志:A,C(AAA,AAS)S,Z,P(AAM,AAD)DAA,DAS功能:压缩BCD码调整指令语法:DAADAS影响标志:C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能:执行BIT与BIT之间的逻辑运算语法:ANDr/m,r/m/dataORr/m,r/m/dataXORr/m,r/m/dataTESTr/m,r/m/dataNOTr/m影响标志:C,O,P,Z,S(其中C与O两个标志会被设为0)NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能:移位指令语法:SHRr/m,data/CLSHLr/m,data/CLSARr/m,data/CLSALr/m,data/CL影响标志:C,P,Z,S,OROR,ROL,RCR,RCL功能:循环移位指令语法:RORr/m,data/CLROLr/m,data/CLRCRr/m,data/CLRCLr/m,data/CL影响标志:C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能:设定进位标志语法:CLCSTCCMC标志位:CCLD,STD功能:设定方向标志语法:CLDSTD标志位:DCLI,STI功能:设定中断标志语法:CLISTI标志位:ICMP功能:比较OP1与OP2的值语法:CMPr/m,r/m/data标志位:C,P,A,Z,OJMP功能:跳往指定地址执行语法:JMP地址JXX功能:当特定条件成立则跳往指定地址执行语法:JXX地址注:A:ABOVE,当C=0,Z=0时成立B:BELOW,当C=1时成立C:CARRY,当弁时成立CXZ:CX寄存器的值为0(ZERO)时成立E:EQUAL,当Z=1时成立G:GREATER(大于),当Z=0且S=0时成立L:LESS(小于),当S不为零时成立N:NOT(相反条件),需和其它符号配合使用O:OVERFLOW,O=1时成立P:PARITY,P=1时成立PE:PARITYEVEN,P=1时成立PO:PARITYODD,P=0时成立S:SIGN,S=1时成立Z:ZERO,Z=1时成立LOOP功能:循环指令集语法:LOOP地址LOOPE(Z)地址LOOPNE(Z)地址标志位:无CALL,RET功能:子程序调用,返回指令语法:CALL地址RETRETn标志位:无INT,IRET功能:中断调用及返回指令语法:INTnIRET标志位:在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能:字符串传送指令语法:MOVSBMOVSWMOVSD标志位:无CMPSB,CMPSW,CMPSD功能:字符串比较指令语法:CMPSBCMPSWCMPSD标志位:C,P,Z,S,OSCASB,SCASW功能:字符串搜索指令语法:SCASBSCASW标志位:C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能:字符串载入或存贮指令语法:LODSBLODSWSTOSBSTOSW标志位:无REP,REPE,REPNE功能:重复前缀指令集语法:REP指令SREPE指令SREPNE指令S标志位:依指令S而定对于IBMPC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新。1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。数据传送指令类型指令说明通用数据传送指令MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)累加器专用传送指令IN(输入指令)、OUT(输入指令)地址传送指令LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)标志寄存器传送指令LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)2)算术指令:用来执行算术运算。算术指令类型指令说明加法指令ADD(加法)、ADC(带进位加法)、INC(加1)减法指令SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)乘法指令MUL(无符号数乘法)、IMUL(带符号数乘法)除法指令DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)3)逻辑指令:对字或字节执行逻辑运算。逻辑指令类型指令说明逻辑运算指令AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)移动指令SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)4)串处理指令:处理存放存储器里的数据串。串处理指令类型指令说明指令MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)5)控制转移指令:用来控制程序的执行流程。控制转移指令类型指令说明无条件转移指令JMP(段间和段内转移)条件转移指令JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)循环指令LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)子程序指令CALL(调用指令)、RET(返回指令)中断指令INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)6)处理机控制指令:处理机控制指令类型指令说明标志处理指令CLC(进位位置0指令)、CMC(进位位求反指令)、STC(进位位置为1指令)、CLD(方向标志置1指令)、STD(方向标志位置1指令)、CLI(中断标志置0指令)、STI(中断标志置1指令)其他处理机控制指令NOP(无操作)、HLT(停机)、WAIT(等待)、ESC(换码)、LOCK(封锁)汇编语言程序格式汇编语言源程序用语句书写,MASM中可使用的语句分成两类,他们是指令性语句和伪指令语句1.指令性语句:指令性语句与机器指令相对应,汇编程序将他翻译成目标代码(机器指令代码)。语句格为:标号:指令助记符操作数,操作数;注释标号表示指令语句的符号地址,标号后面必须紧跟“:”。标号可以省略,他经常作为转移指令或CALL指令的一个操作数,用以表示地址的转移。指令助记符是该语句的指令名称的代表号码,他指出操作的类型,汇编程序将其翻译成机器指令。不可省略。操作数表示参加本指令的运算数据,根据指令的操作类型,操作数不同,中间必须用“,”隔开。注释指明一条指令的功能,可以省略。2.伪指令语句伪指令语句没有对应的机器指令。汇编程序汇编源程序时对伪指令进行处理,他可以完成数据定义,存储区分配,段定义,段分配,指示程序结束功能。伪指令语句的格式为:名字伪指令指示符操作数,操作数;注释名字时给伪指令取得名称,他用符号地址表示。伪指令中的名字通常是变量名,段名,过程名、符号名等。伪指令指示符是汇编程序MASM规定的符号。操作数是根据伪指令的具体要求来得。3.数据项汇编语言中使用的操作数,可以是常数、寄存器、存储器、变量、标号活表达式,其中藏书、变量和标号是三种基本数据项。⑴常数必须是固定的值,没有属性,是确定的数据。⑵变量在程序运行中是可以修改的。所有的变量具有三种属性①段值(SEGMENT):指明变量所在段的基址。②段内偏移地址(OFFSET):指变量所在地址与段首地址之间的偏移字节数。③类型(TYPE):变量的类型属性指变量中每个单元所包含的字节数,类型有:字节变量(BYTE)、字变量(WORD)、双字变量(DOUBLEWORD)⑶标号:标号是指可执行指令语句的地址的符号表示,他可作为转移指令和调用指令的目标操作数,以确定程序转换的目标地址,他具有三个属性。①段值(SEGMENT):指明标号所在段的基址。②段内偏移地址(OFFSET):指标号所在地址与所在段段首地址之间的偏移字节数。③类型(TYPE):标号的类型属性指在转移指令中标号可转移的距离类型.NEAR,表示近标号只能实现在本代码段内转移或调用;FAR,表示远标号,可;以作为其他代码段中的目标地址,实现段间调用或转移。伪指令汇总1.数据定义语句格式一:变量名助记符操作数,操作数…;注释格式二:变量名助记符nDUP(操作数,操作数…);注释功能:将操作数存入变量名指定的存储单元中,或者只分配存储空间不存入数据。变量名,用符号表示,可以省略。汇编程序时将此变量的助记符后的第一个字节的偏移地址作为他的符号地址。助记符主要有:DB:用来定义字节,表示每个操作数占用一个字节;DW:用来定义字,表示每个操作数占用一个字;DD:用来定义双字,表示每个操作数占用两个字;DQ:用来定义四个字,表示每个操作数占用四个字;DT:用来定义十个字节,表示每个操作数占用十个字节;在格式二中,用nDUP表示时,n必须是整数,表示括号中的操作数的重复次数。DUP后面必须带括号。2.表达式赋值语句⑴赋值语句EQU格式:符号名EQU表达式功能:用来给变量、标号、常数、指令、表达式等定义一个符号名,程序中用到EQU左边得变量、标号时可以用右边的常数值或表达式来代替,但是一经定义在同一个程序模块中不能再重新定义。⑵符号语句=符号语句“=”与EQU语句具有相同功能,区别仅在于EQU中左边的标号不允许重新定义,而用“=”定义的语句可以重新定义。3段定义语句存储器的物理地址由段基址和偏移地址组合而成,任何一个逻辑段,无论是数码段,数据段,堆栈段,附加段都必须定义。以便连接程序把不同段和模块连成一个可执行的程序。⑴段定义语句SEGMENT…ENDS格式:段名SEGMENT定位类型组合类型‘分类名’逻辑段内容段名ENDS功能:将一个逻辑段定义成一个整体段名,是逻辑段的标识符,不能省略。他确定了逻辑段在存储器中的