关闭

关闭

关闭

封号提示

内容

首页 基于8086、8088的指令.doc

基于8086、8088的指令.doc

基于8086、8088的指令.doc

上传者: ssongmu 2011-10-10 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《基于8086、8088的指令doc》,可适用于IT/计算机领域,主题内容包含•​ 一、数据传送指令通用数据传送指令MOV(Move)传送PUSH(Pushontothestack)进栈POP(Popfromthestack)符等。

•​ 一、数据传送指令通用数据传送指令MOV(Move)传送PUSH(Pushontothestack)进栈POP(Popfromthestack)出栈XCHG(Exchange)交换MOV指令格式为:MOVDST,SRC执行的操作:(DST)<(SRC)PUSH进栈指令格式为:PUSHSRC执行的操作:(SP)<(SP)((SP),(SP))<(SRC)POP出栈指令格式为:POPDST执行的操作:(DST)<((SP),(SP))(SP)<(SP)XCHG交换指令格式为:XCHGOPR,OPR执行的操作:(OPR)<>(OPR)累加器专用传送指令IN(Input)输入OUT(Output)输出XLAT(Translate)换码这组指令只限于使用累加器AX或AL传送信息IN输入指令长格式为:INAL,PORT(字节)INAX,PORT(字)执行的操作:(AL)<(PORT)(字节)(AX)<(PORT,PORT)(字)短格式为:INAL,DX(字节)INAX,DX(字)执行的操作:AL<((DX))(字节)AX<((DX),DX)(字)OUT输出指令长格式为:OUTPORT,AL(字节)OUTPORT,AX(字)执行的操作:(PORT)<(AL)(字节)(PORT,PORT)<(AX)(字)短格式为:OUTDX,AL(字节)OUTDX,AX(字)执行的操作:((DX))<(AL)(字节)((DX),(DX))<AX(字)在IBMPC机里,外部设备最多可有个IO端口,端口(即外设的端口地址)为~FFFFH其中前个端口(~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号所以用长格式时可以在指定中直接指定端口号,但只限于前个端口当端口号>=时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从到FFFFH),然后再用IN或OUT指令来传送信息XLAT换码指令格式为:XLATOPR或:XLAT执行的操作:(AL)<((BX)(AL))有效地址送寄存器指令LEA(Loadeffectiveaddress)有效地址送寄存器LDS(LoadDSwithPointer)指针送寄存器和DSLES(LoadESwithPointer)指针送寄存器和ESLEA有效地址送寄存器格式为:LEAREG,SRC执行的操作:(REG)<SRC指令把源操作数的有效地址送到指定的寄存器中LDS指针送寄存器和DS指令格式为:LDSREG,SRC执行的操作:(REG)<(SRC)(DS)<(SRC)把源操作数指定的个相继字节送到由指令指定的寄存器及DS寄存器中该指令常指定SI寄存器LES指针送寄存器和ES指令格式为:LESREG,SRC执行的操作:(REG)<(SRC)(ES)<(SRC)把源操作数指定的个相继字节送到由指令指定的寄存器及ES寄存器中该指令常指定DI寄存器标志寄存器传送指令LAHF(LoadAHwithflags)标志送AHSAHF(storeAHintoflags)AH送标志寄存器PUSHF(pushtheflags)标志进栈POPF(poptheflags)标志出栈LAHF标志送AH格式为:LAHF执行的操作:(AH)<(PWS的低字节)SAHFAH送标志寄存器格式为:SAHF执行的操作:(PWS的低字节)<(AH)PUSHF标志进栈格式为:PUSHF执行的操作:(SP)<(SP)((SP),(SP))<(PSW)POPF标志出栈格式为:POPF执行的操作:(PWS)<((SP),(SP))(SP)<(SP)二、算术指令加法指令ADD(add)加法ADC(addwithcarry)带进位加法INC(increment)加ADD加法指令格式:ADDDST,SRC执行的操作:(DST)<(SRC)(DST)ADC带进位加法指令格式:ADCDST,SRC执行的操作:(DST)<(SRC)(DST)CFADD加指令格式:INCOPR执行的操作:(OPR)<(OPR)减法指令SUB(subtract)减法SBB(subtractwithborrow)带借位减法DEC(Decrement)减NEG(Negate)求补CMP(Compare)比较SUB减法指令格式:SUBDST,SRC执行的操作:(DST)<(DST)(SRC)SBB带借位减法指令格式:SBBDST,SRC执行的操作:(DST)<(DST)(SRC)CFDEC减指令格式:DECOPR执行的操作:(OPR)<(OPR)NEG求补指令格式:NEGOPR执行的操作:(OPR)<(OPR)CMP比较指令格式:CMPOPR,OPR执行的操作:(OPR)(OPR)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球乘法指令MUL(UnsignedMultiple)无符号数乘法IMUL(SignedMultiple)带符号数乘法MUL无符号数乘法指令格式:MULSRC执行的操作:字节操作数:(AX)<(AL)*(SRC)字操作数:(DX,AX)<(AX)*(SRC)IMUL带符号数乘法指令格式:IMULSRC执行的操作:与MUL相同,但必须是带符号数,而MUL是无符号数除法指令DIV(Unsigneddivide)无符号数除法IDIV(Signeddivide)带符号数除法CBW(Convertbytetoword)字节转换为字CWD(Contertwordtodoubleword)字转换为双字DIV无符号数除法指令格式:DIVSRC执行的操作: 字节操作:(AL)<(AX)(SRC)的商(AH)<(AX)(SRC)的余数字操作:(AX)<(DX,AX)(SRC)的商(AX)<(DX,AX)(SRC)的余数IDIV带符号数除法指令格式:DIVSRC执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同CBW字节转换为字指令格式:CBW执行的操作:AL的内容符号扩展到AH即如果(AL)的最高有效位为,则(AH)=如(AL)的最高有效位为,则(AH)=FFHCWD字转换为双字指令格式:CWD执行的操作:AX的内容符号扩展到DX即如(AX)的最高有效位为,则(DX)=否则(DX)=FFFFH这两条指令都不影响条件码三、逻辑指令逻辑运算指令AND(and)逻辑与OR(or)逻辑或NOT(not)逻辑非XOR(exclusiveor)异或TEST(test)测试AND逻辑与指令格式:ANDDST,SRC执行的操作:(DST)<(DST)^(SRC)OR逻辑或指令格式:ORDST,SRC执行的操作:(DST)<(DST)V(SRC)NOT逻辑非指令格式:NOTOPR执行的操作:(OPR)<(OPR)XOR异或指令格式:XORDST,SRC执行的操作:(DST)<(DST)V(SRC)TEST测试指令格式:TESTOPR,OPR执行的操作:(DST)^(SRC)两个操作数相与的结果不保存,只根据其特征置条件码移位指令SHL(shiftlogicalleft)逻辑左移SAL(shiftarithmeticleft)算术左移SHR(shiftlogicalright)逻辑右移SAR(shiftarithmeticright)算术右移ROL(Rotateleft)循环左移ROR(Rotateright)循环右移RCL(Rotateleftthroughcarry)带进位循环左移RCR(Rotaterightthroughcarry)带进位循环右移格式:SHLOPR,CNT(其余的类似)其中OPR可以是除立即数以外的任何寻址方式移位次数由CNT决定,CNT可以是或CL循环移位指令可以改变操作数中所有位的位置移位指令则常常用来做乘以除以操作其中算术移位指令适用于带符号数运算,SAL用来乘,SAR用来除以而逻辑移位指令则用来无符号数运算,SHL用来乘,SHR用来除以四、串处理指令与REP相配合工作的MOVS,STOS和LODS指令REP重复串操作直到(CX)=为上格式:REPstringprimitive其中StringPrimitive可为MOVS,LODS或STOS指令执行的操作:)如(CX)=则退出REP,否则往下执行)(CX)<(CX))执行其中的串操作)重复)~)MOVS串传送指令格式:可有三种MOVSDST,SRCMOVSB(字节)MOVSW(字)其中第二、三种格式明确地注明是传送字节或字第一种格式则应在操作数中表明是字还是字节操作例如:MOVSES:BYTEPTRDI,DS:SI执行的操作:)((DI))<((SI)))字节操作:(SI)<(SI)(或),(DI)<(DI)(或)当方向标志DF=时用,当方向标志DF=时用)字操作:(SI)<(SI)(或),(DI)<(DI)(或)当方向标志DF=时用,当方向标志DF=时用该指令不影响条件码CLD(Cleardirectionflag)该指令使DF=,在执行串操作指令时可使地址自动增量STD(Setdirectionflag)该指令使DF=,在执行串操作指令时可使地址自动减量STOS存入串指令格式:STOSDSTSTOSB(字节)STOSW(字)执行的操作:字节操作:((DI))<(AL),(DI)<(DI)字操作:((DI))<(AX),(DI)<(DI)该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中LODS从串取指令格式:LODSSRCLODSBLODSW执行的操作:字节操作:(AL)<((SI)),(SI)<(SI)字操作:(AX)<((SI)),(SI)<(SI)该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容指令允许使用段跨越前缀来指定非数据段的存储区该指令也不影响条件码一般说来,该指令不和REP联用有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令与REPEREPZ和REPNZREPNE联合工作的CMPS和SCAS指令REPEREPZ当相等为零时重复串操作格式:REPE(或REPZ)StringPrimitive其中StringPrimitive可为CMPS或SCAS指令执行的操作:)如(CX)=或ZF=(即某次比较的结果两个操作数不等)时退出,否则往下执行)(CX)<(CX))执行其后的串指令)重复)~)REPNEREPNZ当不相等不为零时重复串操作格式:REPNE(或REPNZ)StringPrimitive其中StringPrimitive可为CMPS或SCAS指令执行的操作:除退出条件(CX=)或ZF=外,其他操作与REPE完全相同CMPS串比较指令格式:CMPSRC,DSTCMPSBCMPSW执行的操作:)((SI))((DI)))字节操作:(SI)<(SI),(DI)<(DI)字操作:(SI)<(SI),(DI)<(DI)指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同SCAS串扫描指令格式:SCASDSTSCASBSCASW执行的操作:字节操作:(AL)((DI)),(DI)<(DI)字操作:(AL)((DI)),(DI)<(DI)该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码指令的其他特性和MOVS的规定相同 五、控制转移指令无条件转移指令JMP(jmp)跳转指令)段内直接短转移格式:JMPSHORTOPR执行的操作:(IP)<(IP)位位移量)段内直接近转移格式:JMPNEARPTROPR执行的操作:(IP)<(IP)位位移量)段内间接转移格式:JMPWORDPTROPR执行的操作:(IP)<(EA))段间直接(远)转移格式:JMPFARPTROPR执行的操作:(IP)<OPR的段内偏移地址(CS)<OPR所在段的段地址)段间间接转移格式:JMPDWORDPTROPR执行的操作:(IP)<(EA)(CS)<(EA)条件转移指令)根据单个条件标志的设置情况转移JZ(或JE)(Jumpifzero,orequal)结果为零(或相等)则转移格式:JE(或JZ)OPR测试条件:ZF=JNZ(或JNE)(Jumpifnotzero,ornotequal)结果不为零(或不相等)则转移格式:JNZ(或JNE)OPR测试条件:ZF=JS(Jumpifsign)结果为负则转移格式:JSOPR测试条件:SF=JNS(Jumpifnotsign)结果为正则转移格式:JNSOPR测试条件:SF=JO(Jumpifoverflow)溢出则转移格式:JOOPR测试条件:OF=JNO(Jumpifnotoverflow)不溢出则转移格式:JNOOPR测试条件:OF=JP(或JPE)(Jumpifparity,orparityeven)奇偶位为则转移格式:JPOPR测试条件:PF=JNP(或JPO)(Jumpifnotparity,orparityodd)奇偶位为则转移格式:JNP(或JPO)OPR测试条件:PF=JB(或JNAE,JC)(Jumpifbelow,ornotaboveorequal,orcarry)低于,或者不高于或等于,或进位位为则转移格式:JB(或JNAE,JC)OPR测试条件:CF=JNB(或JAE,JNC)(Jumpifnotbelow,oraboveorequal,ornotcarry)不低于,或者高于或者等于,或进位位为则转移格式:JNB(或JAE,JNC)OPR测试条件:CF=)比较两个无符号数,并根据比较的结果转移JB(或JNAE,JC)格式:同上JNB(或JAE,JNC)格式:同上JBE(或JNA)(Jumpifbeloworequal,ornotabove)低于或等于,或不高于则转移格式:JBE(或JNA)OPR测试条件:CFVZF=JNBE(或JA)(Jumpifnotbeloworequal,orabove)不低于或等于,或者高于则转移格式:JNBE(或JA)OPR测试条件:CFVZF=)比较两个带符号数,并根据比较的结果转移JL(或LNGE)(Jumpifless,ornotgreaterorequal)小于,或者不大于或者等于则转移格式:JL(或JNGE)OPR测试条件:SFVOF=JNL(或JGE)(Jumpifnotless,orgreaterorequal)不小于,或者大于或者等于则转移格式:JNL(或JGE)OPR测试条件:SFVOF=JLE(或JNG)(Jumpiflessorequal,ornotgreater)小于或等于,或者不大于则转移格式:JLE(或JNG)OPR测试条件:(SFVOF)VZF=JNLE(或JG)(Jumpifnotlessorequal,orgreater)不小于或等于,或者大于则转移格式:JNLE(或JG)OPR测试条件:(SFVOF)VZF=)测试CX的值为则转移指令JCXZ(JumpifCXregisteriszero)CX寄存器的内容为零则转移格式:JCXZOPR测试条件:(CX)=注:条件转移全为位短跳!循环指令LOOP循环指令格式:LOOPOPR测试条件:(CX)<>LOOPZLOOPE当为零或相等时循环指令格式:LOOPZ(或LOOPE)OPR测试条件:(CX)<>且ZF=LOOPNZLOOPNE当不为零或不相等时循环指令格式:LOOPNZ(或LOOPNE)OPR测试条件:(CX)<>且ZF=这三条指令的步骤是:)(CX)<(CX))检查是否满足测试条件,如满足则(IP)<(IP)D的符号扩充子程序CALL调用指令RET返回指令中断INT指令格式:INTTYPE或INT执行的操作:(SP)<(SP)((SP),(SP))<(PSW)(SP)<(SP)((SP),(SP))<(CS)(SP)<(SP)((SP),(SP))<(IP)(IP)<(TYPE*)(CS)<(TYPE*)INTO若溢出则中断执行的操作:若OF=则:(SP)<(SP)((SP),(SP))<(PSW)(SP)<(SP)((SP),(SP))<(CS)(SP)<(SP)((SP),(SP))<(IP)(IP)<(H)(CS)<(H)IRET从中断返回指令格式:IRET执行的操作:(IP)<((SP),(SP))(SP)<(SP)(CS)<((SP),(SP))(SP)<(SP)(PSW)<((SP),(SP))(SP)<(SP)六、处理机控制指令标志处理指令CLC进位位置指令(Clearcarry)CF<CMC进位位求反指令(Complementcarry)CF<CFSTC进位位置指令(Setcarry)CF<CLD方向标志置指令(Cleardirection)DF<STD方向标志置指令(Setdirection)DF<CLI中断标志置指令(Clearinterrupt)IF<STI中断标志置指令(Setinterrupt)IF<其他处理机控制指令NOP(NoOpreation)无操作HLT(Halt)停机WAIT(Wait)等待ESC(Escape)换码LOCK(Lock)封锁这些指令可以控制处理机状态这们都不影响条件码NOP无操作指令该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代HLT停机指令该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序WAIT等待指令该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续德行ESC换码指令格式ESCmem其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去当然ESC指令不允许使用立即数和寄存器寻址方式这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数协处理机(如)则是为了提高速度而可以选配的硬件LOCK封锁指令该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止当CPU与其他处理机协同工作时,该指令可避免破坏有用信息

用户评论(0)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/12
1下载券 下载 加入VIP, 送下载券

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部