答案:一.数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为:MOVDST,SRC执行的操作:(DST).PUSH进栈指令格式为:PUSHSRC执行的操作:(SP)((SP)+1,(SP)).POP出栈指令格式为:POPDST执行的操作:(DST)(SP).XCHG交换指令格式为:XCHGOPR1,OPR2执行的操作:(OPR1)(OPR2)2.累加器专用传送指令IN(Input)输入OUT(Output)输出XLAT(Translate)换码这组指令只限于使用累加器AX或AL传送信息..IN输入指令长格式为:INAL,PORT(字节)INAX,PORT(字)执行的操作:(AL)(AX)短格式为:INAL,DX(字节)INAX,DX(字)执行的操作:ALAX.OUT输出指令长格式为:OUTPORT,AL(字节)OUTPORT,AX(字)执行的操作:(PORT)(PORT+1,PORT)短格式为:OUTDX,AL(字节)OUTDX,AX(字)执行的操作:((DX))((DX)+1,(DX))在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息..XLAT换码指令格式为:XLATOPR或:XLAT执行的操作:(AL)3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DSwith Pointer)指针送寄存器和DSLES(Load ESwith Pointer)指针送寄存器和ES.LEA有效地址送寄存器格式为:LEAREG,SRC执行的操作:(REG)指令把源操作数的有效地址送到指定的寄存器中..LDS指针送寄存器和DS指令格式为:LDSREG,SRC执行的操作:(REG)(DS)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器..LES指针送寄存器和ES指令格式为:LESREG,SRC执行的操作:(REG)(ES)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.4.标志寄存器传送指令LAHF(Load AHwith flags)标志送AHSAHF(store AHinto flags)AH送标志寄存器PUSHF(push the flags)标志进栈POPF(pop the flags)标志出栈.LAHF标志送AH格式为:LAHF执行的操作:(AH).SAHFAH送标志寄存器格式为:SAHF执行的操作:(PWS的低字节).PUSHF标志进栈格式为:PUSHF执行的操作:(SP)((SP)+1,(SP)).POPF标志出栈格式为:POPF执行的操作:(PWS)(SP)二.算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD加法指令格式:ADDDST,SRC执行的操作:(DST).ADC带进位加法指令格式:ADCDST,SRC执行的操作:(DST).ADD加1指令格式:INCOPR执行的操作:(OPR)2.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB减法指令格式:SUBDST,SRC执行的操作:(DST).SBB带借位减法指令格式:SBBDST,SRC执行的操作:(DST).DEC减1指令格式:DECOPR执行的操作:(OPR).NEG求补指令格式:NEGOPR执行的操作:(OPR).CMP比较指令格式:CMPOPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.3.乘法指令MUL(Unsigned Multiple)无符号数乘法IMUL(Signed Multiple)带符号数乘法.MUL无符号数乘法指令格式:MULSRC执行的操作:字节操作数:(AX)字操作数:(DX,AX).IMUL带符号数乘法指令格式:IMULSRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数.4.除法指令DIV(Unsigned divide)无符号数除法IDIV(Signed divide)带符号数除法CBW(Convert byte to word)字节转换为字CWD(Contert word to double word)字转换为双字.DIV无符号数除法指令格式:DIVSRC执行的操作:字节操作:(AL)(AH)字操作:(AX)(AX).IDIV带符号数除法指令格式:DIVSRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同..CBW字节转换为字指令格式:CBW执行的操作:AL的内容符号扩展到AH.即如果(AL)的最高有效位为0,则(AH)=00;如(AL)的最高有效位为1,则(AH)=0FFH.CWD字转换为双字指令格式:CWD执行的操作:AX的内容符号扩展到DX.即如(AX)的最高有效位为0,则(DX)=0;否则(DX)=0FFFFH.这两条指令都不影响条件码.三.逻辑指令1.逻辑运算指令AND(and)逻辑与OR(or)逻辑或NOT(not)逻辑非XOR(exclusive or)异或TEST(test)测试.AND逻辑与指令格式:ANDDST,SRC执行的操作:(DST).OR逻辑或指令格式:ORDST,SRC执行的操作:(DST).NOT逻辑非指令格式:NOTOPR执行的操作:(OPR).XOR异或指令格式:XORDST,SRC执行的操作:(DST).TEST测试指令格式:TESTOPR1,OPR2执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码2.移位指令SHL(shift logical left)逻辑左移SAL(shift arithmetic left)算术左移SHR(shift logical right)逻辑右移SAR(shift arithmetic right)算术右移ROL(Rotate left)循环左移ROR(Rotate right)循环右移RCL(Rotate left through carry)带进位循环左移RCR(Rotate right through carry)带进位循环右移格式:SHLOPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.四.串处理指令1.与REP相配合工作的MOVS,STOS和LODS指令.REP重复串操作直到(CX)=0为上格式:REPstring primitive其中String Primitive 可为MOVS,LODS或STOS指令执行的操作:1)如(CX)=0则退出REP,否则往下执行.2)(CX)3)执行其中的串操作4)重复1)~3).MOVS串传送指令格式:可有三种MOVSDST,SRCMOVSB(字节)MOVSW(字)其中第二.三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:MOVSES:BYTEPTR[DI],DS:[SI]执行的操作:1)((DI))2)字节操作:(SI)当方向标志DF=0时用+,当方向标志DF=1时用-3)字操作:(SI)当方向标志DF=0时用+,当方向标志DF=1时用-该指令不影响条件码..CLD(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;.STD(Set direction flag)该指令使DF=1,在执行串操作指令时可使地址自动减量..STOS存入串指令格式:STOSDSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))字操作:((DI))该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中..LODS从串取指令格式:LODSSRCLODSBLODSW执行的操作:字节操作:(AL)字操作:(AX)该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令.REPE/REPZ当相等/为零时重复串操作格式:REPE(或REPZ)String Primitive其中String Primitive 可为CMPS或SCAS指令.执行的操作:1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行2)(CX)3)执行其后的串指令4)重复1)~3).REPNE/REPNZ当不相等/不为零时重复串操作格式:REPNE(或REPNZ)String Primitive其中String Primitive 可为CMPS或SCAS指令执行的操作:除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同..CMPS串比较指令格式:CMPSRC,DSTCMPSBCMPSW执行的操作:1)((SI))-((DI))2)字节操作:(SI)字操作:(SI)指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同..SCAS串扫描指令格式:SCASDSTSCASBSCASW执行的操作:字节操作:(AL)-((DI)),(DI)字操作:(AL)-((DI)),(DI)该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.五.控制转移指令1.无条件转移指令.JMP(jmp)跳转指令1)段内直接短转移格式:JMPSHORTOPR执行的操作:(IP)2)段内直接近转移格式:JMPNEARPTROPR执行的操作:(IP)3)段内间接转移格式:JMPWORDPTROPR执行的操作:(IP)4)段间直接(远)转移格式:JMPFARPTROPR执行的操作:(IP)偏移地址(CS)5)段间间接转移格式:JMPDWORDPTROPR执行的操作:(IP)(CS)2.条件转移指令1)根据单个条件标志的设置情况转移.JZ(或JE)(Jump if zero,or equal)结果为零(或相等)则转移格式:JE(或JZ)OPR测试条件:ZF=1.JNZ(或JNE)(Jump if not zero,or not equal)结果不为零(或不相等)则转移格式:JNZ(或JNE)OPR测试条件:ZF=0