`
xshq
  • 浏览: 43981 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

8086/8088指令系统

    博客分类:
  • pc
阅读更多

8086/8088指令系统:

一、数据传送指令

1.通用数据传送指令

MOVMove)传送

PUSHPush onto the stack)进栈

POPPop from the stack)出栈

XCHGExchange)交换

.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)  换码

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

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

.XLAT  换码指令

格式为:    XLAT  OPR

:        XLAT

执行的操作:(AL)<-((BX)+(AL))

 

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

LEA(Load effective address)有效地址送寄存器

LDS(Load DS with Pointer)指针送寄存器和DS

LES(Load ES with Pointer)指针送寄存器和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(Load AH with flags)标志送AH

SAHF(store AH into flags)AH送标志寄存器

PUSHF(push the flags) 标志进栈

POPF(pop the flags) 标志出栈

.LAHF 标志送AH

格式为:    LAHF

执行的操作:(AH)<-(PWS的低字节)

.SAHF AH送标志寄存器

格式为:    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(add with carry)带进位加法

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(subtract with borrow)带借位减法

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(Unsigned Multiple)无符号数乘法

IMUL(Signed Multiple)带符号数乘法

.MUL 无符号数乘法指令

格式:   MUL  SRC

执行的操作:

    字节操作数:(AX)<-(AL)*(SRC)

    字操作数:(DX,AX)<-(AX)*(SRC)

.IMUL 带符号数乘法指令

格式:   IMUL  SRC

执行的操作:MUL相同,但必须是带符号数,MUL是无符号数.

 

4.除法指令

DIV(Unsigned divide)无符号数除法

IDIV(Signed divide)带符号数除法

 

CBW(Convert byte to word)字节转换为字

CWD(Contert word to double word)字转换为双字

.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(exclusive or)异或

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(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) 带进位循环右移

格式:    SHL  OPR,CNT(其余的类似)

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

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

 

四、串处理指令

1.REP相配合工作的MOVS,STOSLODS指令

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

格式:  REP   string primitive

其中String Primitive可为MOVS,LODSSTOS指令

执行的操作:

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

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

3)执行其中的串操作

4)重复1)~3)

.MOVS  串传送指令

格式:可有三种

    MOVS  DST,SRC

    MOVSB(字节)

    MOVSW()

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

            MOVS    ES:BYTE PTR[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(Clear direction flag)该指令使DF=0,在执行串操作指令时可使地址自动增量;

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

.STOS  存入串指令

格式:   STOS  DST

        STOSB(字节)

        STOSW()

执行的操作:

   字节操作:((DI))<-(AL),(DI)<-(DI)+-1

   字操作:  ((DI))<-(AX),(DI)<-(DI)+-2

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

.LODS  从串取指令

格式:    LODS  SRC

         LODSB

         LODSW

执行的操作:

   字节操作:(AL)<-((SI)),(SI)<-(SI)+-1

    字操作: (AX)<-((SI)),(SI)<-(SI)+-2

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

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

  

2.REPE/REPZREPNZ/REPNE联合工作的CMPSSCAS指令

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

格式:     REPE(REPZ)    String Primitive

其中String Primitive可为CMPSSCAS指令.

执行的操作:

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

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

3)执行其后的串指令

4)重复1)~3)

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

格式:     REPNE(REPNZ)   String Primitive

其中String Primitive可为CMPSSCAS指令

执行的操作:

    除退出条件(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  SHORT OPR

执行的操作:(IP)<-(IP)+8位位移量

2)段内直接近转移

格式:JMP  NEAR PTR OPR

执行的操作:(IP)<-(IP)+16位位移量

3)段内间接转移

格式:JMP  WORD PTR OPR

执行的操作:(IP)<-(EA)

4)段间直接()转移

格式:JMP  FAR PTR OPR

执行的操作:(IP)<-OPR的段内偏移地址

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

5)段间间接转移

格式:JMP  DWORD PTR OPR

执行的操作:(IP)<-(EA)

           (CS)<-(EA+2)

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

.JS(Jump if sign)  结果为负则转移

格式:  JS  OPR

测试条件:SF=1

.JNS(Jump if not sign)  结果为正则转移

格式:JNS  OPR

测试条件:SF=0

.JO(Jump if overflow)  溢出则转移

格式:   JO  OPR

测试条件:OF=1

.JNO(Jump if not overflow)  不溢出则转移

格式:   JNO OPR

测试条件:OF=0

.JP(JPE)(Jump if parity,or parity even) 奇偶位为1则转移

格式:   JP  OPR

测试条件:PF=1

.JNP(JPO)(Jump if not parity,or parity odd) 奇偶位为0则转移

格式:   JNP(JPO)  OPR

测试条件:PF=0

.JB(JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或进位位为1则转移

格式:JB(JNAE,JC)  OPR

测试条件:CF=1

.JNB(JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或进位位为0则转移

格式:JNB(JAE,JNC)  OPR

测试条件:CF=0

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

.JB(JNAE,JC)

格式:同上

.JNB(JAE,JNC)

格式:同上

.JBE(JNA)(Jump if below or equal,or not above) 低于或等于,或不高于则转移

格式:JBE(JNA)  OPR

测试条件:CFVZF=1

.JNBE(JA)(Jump if not below or equal,or above) 不低于或等于,或者高于则转移

格式:JNBE(JA)  OPR

测试条件:CFVZF=0

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

.JL(LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移

格式:JL(JNGE)  OPR

测试条件:SFVOF=1

.JNL(JGE)(Jump if not less,or greater or equal)不小于EN-U

分享到:
评论

相关推荐

    8086/8088的指令系统

    "8086/8088的指令系统" 8086/8088的指令系统是微机原理中非常重要的一部分,它们都是条件跳转指令,用于判断两个数 A 和 B 的大小关系。下面是对这些指令的详细说明: 1. JCXZ 指令: JCXZ 指令的格式是 JCXZ ...

    8086/8088汇编语言程序设计教程

    基础部分主要以8086/8088微处理器和DOS操作系统为学习平台,介绍汇编语言基础知识、寻址方式、指令系统和程序设计方法。提高部分则是针对80386微处理器及其保护模式下的编程技术和细节。最后,上机实验指导部分为...

    纯8086/8088汇编指令表

    8086/8088汇编指令是微处理器执行的基本操作,它们构成了低级编程的基础。这些指令集包括了各种操作,如算术运算、逻辑运算、控制流程、输入输出以及内存访问等。以下是对标题和描述中提到的一些重要指令的详细解释...

    8086/8088 16位微机中断系统

    8086/8088 16位微机中断系统的深入理解对于编写低级驱动程序和系统级软件至关重要。它使得开发者能够有效地控制硬件资源,实现实时性操作,并保证系统的稳定性和可靠性。文件"D7.2.ppt"可能包含更详细的中断系统示例...

    微机原理:第4章 8086-8088指令系统.ppt

    "微机原理:8086-8088指令系统" 本章主要教学内容: 1. 8086/8088 指令系统的基本概念和格式 2. 8086/8088 指令系统的寻址方式 3. 8086/8088 的各类指令 4.1 指令的基本概念和格式 * 指令的定义:从程序设计角度...

    微型计算机原理和汇编语言 8086/8088 汇编语言指令表

    本文档详细介绍了8086/8088微型计算机系统的汇编语言指令集。这些指令是构成低级程序的基础,用于直接控制计算机硬件执行特定任务。下面将逐一解释附录B中列出的主要指令及其功能。 #### 数据传送类指令 1. **MOV ...

    微型计算机原理与接口技术:第4章 8086-8088指令系统.pdf

    掌握8086/8088指令系统的这些知识,对于进行汇编语言编程、计算机硬件设计以及优化程序性能都至关重要。通过汇编语言编程,程序员可以更精确地控制硬件资源,实现高效和专业的程序开发。同时,了解指令系统对于硬件...

    8088/8086指令系统

    8088/8086指令系统是Intel公司设计的一种16位微处理器的指令集,它是IBM PC及其兼容机的基础。这个指令系统包含了多种类型的指令,用于控制CPU执行各种计算、数据处理和控制任务。 一、指令格式与寻址方式 8086/...

    8086-8088指令与机器码转换对照表

    8086/8088微处理器是Intel在1978年推出的16位处理器,它是IBM PC及其兼容机的基础,...通过8086/8088指令与机器码转换对照表,我们可以快速查找并学习各种指令的具体实现,这对于教学、编程实践和故障排查都极具价值。

    8086_8088 汇编语言指令表

    ### 8086/8088 汇编语言指令详解 #### 一、数据传送类指令 **MOV** (Move): 这条指令用于将数据从一个位置移动到另一个位置。它支持多种类型的数据来源,包括寄存器、存储器以及立即数。 - **格式**: `MOV dst, ...

    8086/8088 汇编使用手册(非伪指令大全) 及 assembler 汇编软件(英文)

    10. **文档**:MANUAL2.DOC和MANUAL.DOC很可能是汇编语言的手册,包含了8086/8088指令集的详细解释和示例,是学习的重要参考资料。 此外,RFDOrderingInfo.html和RFPOrderingInfo.html可能是关于订购和获取更多资源...

    8086-8088指令系统

    8086/8088 指令系统是早期个人计算机中广泛使用的微处理器架构,它提供了丰富的指令集来进行各种数据处理和控制。在这个系统中,指令被设计得简洁而高效,非常适合初学者学习。 1. 数据传送指令: - MOV(Move):...

    微机系统与接口:第三章 3.4 8086-8088指令系统.ppt

    8086/8088微处理器的指令系统是基于早期8080/8085指令系统的扩展,设计上旨在提供更强大的数据处理能力和灵活性。该系统的一个显著特点是采用可变长指令格式,使得指令长度可以根据需要变化,这增加了指令集的复杂性...

    微机系统与接口:第3章 8086 8088微处理器及其系统2.ppt

    首先,8086/8088指令系统的特点体现在以下几个方面: 1. **可变长指令**:8086/8088的指令长度不固定,根据指令的功能和需要的操作数不同,指令长度可以是1到6字节。 2. **多样化的寻址方式**:提供了多种寻址方式,...

    8086/8088 中8259中断控制技术

    中断控制技术是8086/8088系统中实现异步事件处理的核心机制,允许CPU在执行程序的过程中响应外部或内部事件。本文将详细讲解中断概念、8086/8088中断分类、中断向量以及8259可编程中断控制器的工作方式和编程应用。 ...

    微机原理及应用:第四章 8086 8088 指令系统.pdf

    这些寻址方式是8086/8088指令系统灵活性和高效性的体现,它们允许程序员以多种方式访问和操作内存中的数据,从而实现复杂的程序逻辑。理解和掌握这些寻址模式对于编写有效的汇编语言程序至关重要。

    微机原理与接口技术课件:第3章_3.3 8086 8088指令系统.ppt

    8086/8088指令系统主要分为六大类,包括数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、程序控制指令以及处理器控制指令。 数据传送指令是这六类中的一类,主要用于在不同的数据源之间转移信息。...

    微机原理:第三章(4)8086指令系统.ppt

    **指令系统**:\n8086/8088指令系统包含了92种基本指令,分为六个功能组:\n\n - 数据传送:如MOV, PUSH, POP, XCHG, XLAT,用于在寄存器、内存和端口之间移动数据。\n - 地址传送:LEA, LDS, LES,用于加载地址到...

    8086_8088内核指令

    8086/8088微处理器的指令系统是其核心组成部分,这些指令用于控制处理器执行各种操作。本文将详细解析数据...其他算术指令还包括SUB(减法)、MUL(乘法)、DIV(除法)等,它们共同构成了8086/8088指令系统的基础。

Global site tag (gtag.js) - Google Analytics