8086 指令小结.docx

上传人:b****6 文档编号:15558007 上传时间:2023-07-05 格式:DOCX 页数:14 大小:20.98KB
下载 相关 举报
8086 指令小结.docx_第1页
第1页 / 共14页
8086 指令小结.docx_第2页
第2页 / 共14页
8086 指令小结.docx_第3页
第3页 / 共14页
8086 指令小结.docx_第4页
第4页 / 共14页
8086 指令小结.docx_第5页
第5页 / 共14页
8086 指令小结.docx_第6页
第6页 / 共14页
8086 指令小结.docx_第7页
第7页 / 共14页
8086 指令小结.docx_第8页
第8页 / 共14页
8086 指令小结.docx_第9页
第9页 / 共14页
8086 指令小结.docx_第10页
第10页 / 共14页
8086 指令小结.docx_第11页
第11页 / 共14页
8086 指令小结.docx_第12页
第12页 / 共14页
8086 指令小结.docx_第13页
第13页 / 共14页
8086 指令小结.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

8086 指令小结.docx

《8086 指令小结.docx》由会员分享,可在线阅读,更多相关《8086 指令小结.docx(14页珍藏版)》请在冰点文库上搜索。

8086 指令小结.docx

8086指令小结

8086/8088汇编指令小结--

                   作者:

walkdeath

转载地址:

                   

一、数据传送指令;

二、算术指令;

三、逻辑指令;

四、串处理指令;

五、控制转移指令;

六、处理机控制指令。

(详情见全文)

一、数据传送指令

1.通用数据传送指令

MOV(Move)传送

PUSH(Pushontothestack)进栈

POP(Popfromthestack)出栈

XCHG(Exchange)交换

.MOV指令

格式为:

MOV DST,SRC

执行的操作:

(DST)<-(SRC)

.PUSH进栈指令

格式为:

PUSH SRC

执行的操作:

(SP)<-(SP)-2

          ((SP)+1,(SP))<-(SRC)

.POP出栈指令

格式为:

POP DST

执行的操作:

(DST)<-((SP+1),(SP))

          (SP)<-(SP)+2

.XCHG交换指令

格式为:

XCHG OPR1,OPR2

执行的操作:

(OPR1)<-->(OPR2)

2.累加器专用传送指令

IN(Input) 输入

OUT(Output) 输出

XLAT(Translate) 换码

这组指令只限于使用累加器AX或AL传送信息.

.IN输入指令

长格式为:

   IN AL,PORT(字节)

    IN AX,PORT(字)

执行的操作:

 (AL)<-(PORT)(字节)

            (AX)<-(PORT+1,PORT)(字)

短格式为:

   IN AL,DX(字节)

            IN AX,DX(字)

执行的操作:

 AL<-((DX))(字节)

            AX<-((DX)+1,DX)(字)

.OUT输出指令

长格式为:

   OUT PORT,AL(字节)

            OUT PORT,AX(字)

执行的操作:

 (PORT)<-(AL)(字节)

            (PORT+1,PORT)<-(AX)(字)

短格式为:

   OUT DX,AL(字节)

            OUT DX,AX(字)

执行的操作:

 ((DX))<-(AL)(字节)

            ((DX)+1,(DX))<-AX(字)

   在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息.

.XLAT 换码指令

格式为:

   XLAT OPR

或:

       XLAT

执行的操作:

(AL)<-((BX)+(AL))

3.有效地址送寄存器指令

LEA(Loadeffectiveaddress)有效地址送寄存器

LDS(LoadDSwithPointer)指针送寄存器和DS

LES(LoadESwithPointer)指针送寄存器和ES

.LEA有效地址送寄存器

格式为:

 LEA  REG,SRC

执行的操作:

(REG)<-SRC

   指令把源操作数的有效地址送到指定的寄存器中.

.LDS指针送寄存器和DS指令

格式为:

 LDS REG,SRC

执行的操作:

(REG)<-(SRC)

          (DS)<-(SRC+2)

   把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器.

.LES指针送寄存器和ES指令

格式为:

 LES REG,SRC

执行的操作:

(REG)<-(SRC)

           (ES)<-(SRC+2)

   把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.

4.标志寄存器传送指令

LAHF(LoadAHwithflags)标志送AH

SAHF(storeAHintoflags)AH送标志寄存器

PUSHF(pushtheflags)标志进栈

POPF(poptheflags)标志出栈

.LAHF标志送AH

格式为:

   LAHF

执行的操作:

(AH)<-(PWS的低字节)

.SAHFAH送标志寄存器

格式为:

   SAHF

执行的操作:

(PWS的低字节)<-(AH)

.PUSHF标志进栈

格式为:

   PUSHF

执行的操作:

(SP)<-(SP)-2

          ((SP)+1,(SP))<-(PSW)

.POPF标志出栈

格式为:

   POPF

执行的操作:

(PWS)<-((SP)+1,(SP))

          (SP)<-(SP+2)

二、算术指令

1.加法指令

ADD(add)加法

ADC(addwithcarry)带进位加法

INC(increment)加1

.ADD 加法指令

格式:

   ADD  DST,SRC

执行的操作:

(DST)<-(SRC)+(DST)

.ADC 带进位加法指令

格式:

   ADC  DST,SRC

执行的操作:

(DST)<-(SRC)+(DST)+CF

.ADD 加1指令

格式:

   INC  OPR

执行的操作:

(OPR)<-(OPR)+1

2.减法指令

SUB(subtract)减法

SBB(subtractwithborrow)带借位减法

DEC(Decrement)减1

NEG(Negate)求补

CMP(Compare)比较

.SUB 减法指令

格式:

 SUB DST,SRC

执行的操作:

(DST)<-(DST)-(SRC)

.SBB 带借位减法指令

格式:

 SBB DST,SRC

执行的操作:

(DST)<-(DST)-(SRC)-CF

.DEC 减1指令

格式:

 DEC OPR

执行的操作:

(OPR)<-(OPR)-1

.NEG 求补指令

格式:

 NEG OPR

执行的操作:

(OPR)<--(OPR)

.CMP 比较指令

格式:

 CMP OPR1,OPR2

执行的操作:

(OPR1)-(OPR2)

   该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.

3.乘法指令

MUL(UnsignedMultiple)无符号数乘法

IMUL(SignedMultiple)带符号数乘法

.MUL无符号数乘法指令

格式:

  MUL SRC

执行的操作:

   字节操作数:

(AX)<-(AL)*(SRC)

   字操作数:

(DX,AX)<-(AX)*(SRC)

.IMUL带符号数乘法指令

格式:

  IMUL SRC

执行的操作:

与MUL相同,但必须是带符号数,而MUL是无符号数.

4.除法指令

DIV(Unsigneddivide)无符号数除法

IDIV(Signeddivide)带符号数除法

CBW(Convertbytetoword)字节转换为字

CWD(Contertwordtodoubleword)字转换为双字

.DIV 无符号数除法指令

格式:

  DIV SRC

执行的操作:

 字节操作:

(AL)<-(AX)/(SRC)的商

          (AH)<-(AX)/(SRC)的余数

 字操作:

 (AX)<-(DX,AX)/(SRC)的商

          (AX)<-(DX,AX)/(SRC)的余数

.IDIV 带符号数除法指令

格式:

  DIV SRC

执行的操作:

与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(exclusiveor)异或

TEST(test)      测试

.AND 逻辑与指令

格式:

   AND  DST,SRC

执行的操作:

(DST)<-(DST)^(SRC)

.OR 逻辑或指令

格式:

   OR  DST,SRC

执行的操作:

(DST)<-(DST)V(SRC)

.NOT 逻辑非指令

格式:

   NOT  OPR

执行的操作:

(OPR)<-(OPR)

.XOR 异或指令

格式:

   XOR  DST,SRC

执行的操作:

(DST)<-(DST)V(SRC)

.TEST 测试指令

格式:

   TEST  OPR1,OPR2

执行的操作:

(DST)^(SRC)

两个操作数相与的结果不保存,只根据其特征置条件码

2.移位指令

SHL(shiftlogicalleft)        逻辑左移

SAL(shiftarithmeticleft)     算术左移

SHR(shiftlogicalright)       逻辑右移

SAR(shiftarithmeticright)    算术右移

ROL(Rotateleft)               循环左移

ROR(Rotateright)              循环右移

RCL(Rotateleftthroughcarry) 带进位循环左移

RCR(Rotaterightthroughcarry)带进位循环右移

格式:

   SHL OPR,CNT(其余的类似)

其中OPR可以是除立即数以外的任何寻址方式.移位次数由CNT决定,CNT可以是1或CL.

   循环移位指令可以改变操作数中所有位的位置;移位指令则常常用来做乘以2除以2操作.其中算术移位指令适用于带符号数运算,SAL用来乘2,SAR用来除以2;而逻辑移位指令则用来无符号数运算,SHL用来乘2,SHR用来除以2.

四、串处理指令

1.与REP相配合工作的MOVS,STOS和LODS指令

.REP重复串操作直到(CX)=0为上

格式:

 REP  stringprimitive

其中StringPrimitive可为MOVS,LODS或STOS指令

执行的操作:

1)如(CX)=0则退出REP,否则往下执行.

2)(CX)<-(CX)-1

3)执行其中的串操作

4)重复1)~3)

.MOVS 串传送指令

格式:

可有三种

   MOVS DST,SRC

   MOVSB(字节)

   MOVSW(字)

其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:

           MOVS  ES:

BYTEPTR[DI],DS:

[SI]

执行的操作:

1)((DI))<-((SI))

2)字节操作:

  (SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1

  当方向标志DF=0时用+,当方向标志DF=1时用-

3)字操作:

  (SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2

  当方向标志DF=0时用+,当方向标志DF=1时用-

该指令不影响条件码.

.CLD(Cleardirectionflag)该指令使DF=0,在执行串操作指令时可使地址自动增量;

.STD(Setdirectionflag)该指令使DF=1,在执行串操作指令时可使地址自动减量.

.STOS 存入串指令

格式:

  STOS DST

       STOSB(字节)

       STOSW(字)

执行的操作:

  字节操作:

((DI))<-(AL),(DI)<-(DI)+-1

  字操作:

 ((DI))<-(AX),(DI)<-(DI)+-2

该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中.

.LODS 从串取指令

格式:

  LODS SRC

        LODSB

        LODSW

执行的操作:

  字节操作:

(AL)<-((SI)),(SI)<-(SI)+-1

   字操作:

(AX)<-((SI)),(SI)<-(SI)+-2

该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容.指令允许使用段跨越前缀来指定非数据段的存储区.该指令也不影响条件码.

   一般说来,该指令不和REP联用.有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令.

  

2.与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令

.REPE/REPZ 当相等/为零时重复串操作

格式:

    REPE(或REPZ)  StringPrimitive

其中StringPrimitive可为CMPS或SCAS指令.

执行的操作:

1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行

2)(CX)<-(CX)-1

3)执行其后的串指令

4)重复1)~3)

.REPNE/REPNZ 当不相等/不为零时重复串操作

格式:

    REPNE(或REPNZ)  StringPrimitive

其中StringPrimitive可为CMPS或SCAS指令

执行的操作:

   除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同.

.CMPS 串比较指令

格式:

    CMP  SRC,DST

         CMPSB

         CMPSW

执行的操作:

1)((SI))-((DI))

2)字节操作:

(SI)<-(SI)+-1,(DI)<-(DI)+-1

 字操作:

 (SI)<-(SI)+-2,(DI)<-(DI)+-2

指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同.

.SCAS 串扫描指令

格式:

  SCAS  DST

       SCASB

       SCASW

执行的操作:

   字节操作:

(AL)-((DI)),(DI)<-(DI)+-1

   字操作:

 (AL)-((DI)),(DI)<-(DI)+-2

该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码.指令的其他特性和MOVS的规定相同.

五、控制转移指令

 1.无条件转移指令

.JMP(jmp) 跳转指令

1)段内直接短转移

格式:

JMP SHORTOPR

执行的操作:

(IP)<-(IP)+8位位移量

2)段内直接近转移

格式:

JMP NEARPTROPR

执行的操作:

(IP)<-(IP)+16位位移量

3)段内间接转移

格式:

JMP WORDPTROPR

执行的操作:

(IP)<-(EA)

4)段间直接(远)转移

格式:

JMP FARPTROPR

执行的操作:

(IP)<-OPR的段内偏移地址

          (CS)<-OPR所在段的段地址

5)段间间接转移

格式:

JMP DWORDPTROPR

执行的操作:

(IP)<-(EA)

          (CS)<-(EA+2)

2.条件转移指令

1)根据单个条件标志的设置情况转移

.JZ(或JE)(Jumpifzero,orequal) 结果为零(或相等)则转移

格式:

JE(或JZ) OPR

测试条件:

ZF=1

.JNZ(或JNE)(Jumpifnotzero,ornotequal)结果不为零(或不相等)则转移

格式:

JNZ(或JNE) OPR

测试条件:

ZF=0

.JS(Jumpifsign) 结果为负则转移

格式:

 JS OPR

测试条件:

SF=1

.JNS(Jumpifnotsign) 结果为正则转移

格式:

JNS OPR

测试条件:

SF=0

.JO(Jumpifoverflow) 溢出则转移

格式:

  JO OPR

测试条件:

OF=1

.JNO(Jumpifnotoverflow) 不溢出则转移

格式:

  JNOOPR

测试条件:

OF=0

.JP(或JPE)(Jumpifparity,orparityeven)奇偶位为1则转移

格式:

  JP OPR

测试条件:

PF=1

.JNP(或JPO)(Jumpifnotparity,orparityodd)奇偶位为0则转移

格式:

  JNP(或JPO) OPR

测试条件:

PF=0

.JB(或JNAE,JC)(Jumpifbelow,ornotaboveorequal,orcarry)低于,或者不高于或等于,或进位位为1则转移

格式:

JB(或JNAE,JC) OPR

测试条件:

CF=1

.JNB(或JAE,JNC)(Jumpifnotbelow,oraboveorequal,ornotcarry)不低于,或者高于或者等于,或进位位为0则转移

格式:

JNB(或JAE,JNC) OPR

测试条件:

CF=0

2)比较两个无符号数,并根据比较的结果转移

.JB(或JNAE,JC)

格式:

同上

.JNB(或JAE,JNC)

格式:

同上

.JBE(或JNA)(Jumpifbeloworequal,ornotabove)低于或等于,或不高于则转移

格式:

JBE(或JNA) OPR

测试条件:

CFVZF=1

.JNBE(或JA)(Jumpifnotbeloworequal,orabove)不低于或等于,或者高于则转移

格式:

JNBE(或JA) OPR

测试条件:

CFVZF=0

3)比较两个带符号数,并根据比较的结果转移

.JL(或LNGE)(Jumpifless,ornotgreaterorequal)小于,或者不大于或者等于则转移

格式:

JL(或JNGE) OPR

测试条件:

SFVOF=1

.JNL(或JGE)(Jumpifnotless,orgreaterorequal)不小于,或者大于或者等于则转移

格式:

JNL(或JGE) OPR

测试条件:

SFVOF=0

.JLE(或JNG)(Jumpiflessorequal,ornotgreater)小于或等于,或者不大于则转移

格式:

JLE(或JNG) OPR

测试条件:

(SFVOF)VZF=1

.JNLE(或JG)(Jumpifnotlessorequal,orgreater)不小于或等于,或者大于则转移

格式:

JNLE(或JG) OPR

测试条件:

(SFVOF)VZF=0

4)测试CX的值为0则转移指令

.JCXZ(JumpifCXregisteriszero) CX寄存器的内容为零则转移

格式:

JCXZ OPR

测试条件:

(CX)=0

注:

条件转移全为8位短跳!

3.循环指令

.LOOP循环指令

格式:

LOOP OPR

测试条件:

(CX)<>0

.LOOPZ/LOOPE当为零或相等时循环指令

格式:

LOOPZ(或LOOPE) OPR

测试条件:

(CX)<>0且ZF=1

.LOOPNZ/LOOPNE当不为零或不相等时循环指令

格式:

LOOPNZ(或LOOPNE) OPR

测试条件:

(CX)<>0且ZF=0

这三条指令的步骤是:

1)(CX)<-(CX)-1

2)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充.

4.子程序

.CALL调用指令

.RET返回指令

5.中断

.INT指令

格式:

   INT TYPE

或      INT

执行的操作:

(SP)<-(SP)-2

          ((SP)+1,(SP))<-(PSW)

          (SP)<-(SP)-2

          ((SP)+1,(SP))<-(CS)

          (SP)<-(SP)-2

          ((SP)+1,(SP))<-(IP)

          (IP)<-(TYPE*4)

          (CS)<-(TYPE*4+2)

.INTO 若溢出则中断

执行的操作:

若OF=1则:

          (SP)<-(SP)-2

          ((SP)+1,(SP))<-(PSW)

          (SP)<-(SP)-2

          ((SP)+1,(SP))<-(CS)

          (SP)<-(SP)-2

          ((SP)+1,(SP))<-(IP)

          (IP)<-(10H)

          (CS)<-(12H)

.IRET   从中断返回指令

格式:

    IRET

执行的操作:

(IP)<-((SP)+1,(SP))

          (SP)<-(SP)+2

          (CS)<-((SP)+1,(SP))

          (SP)<-(SP)+2

          (PSW)<-((SP)+1,(SP))

          (SP)<-(SP)+2

六、处理机控制指令

1.标志处理指令

.CLC进位位置0指令(Clearcarry)CF<-0

.CMC进位位求反指令(Complementcarry)CF<-CF

.STC进位位置1指令(Setcarry)CF<-1

.CLD方向标志置0指令(Cleardirection

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2