精华内容
下载资源
问答
  • 8086-8088指令机器码转换对照表
  • 8086/8088寻址方式

    千次阅读 2021-06-13 10:26:25
    8086/8088寻址方式立即寻址直接寻址寄存器寻址寄存器间接寻址寄存器相对寻址基址—变址寻址基址—变址—相对寻址隐含寻址 所谓寻址方式,主要是指获得操作数所在的地址的方式,在8088/8086系统中,一般将寻址方式...

    所谓寻址方式,主要是指获得操作数所在的地址的方式,在8088/8086系统中,一般将寻址方式分为两种不同的类型

    1. 寻找操作数的地址
    2. 寻找要执行的下一条指令的地址,即程序的地址。后者主要在程序转移或过程调用时用来寻找目标地址或入口地址。这将在调用指令(CALL)和程序转移指令(JMP)中使用的较多。

    在8086指令系统中,说明操作数所在地址的寻址方式可分为8种。

    立即寻址

    立即寻址方式只针对源操作数,此时源操作数是一个立即数,它作为指令的一部分。紧跟在指令的操作码之后,存放于内存的代码段中,在CPU取指令时随指令码一起取出并直接参与计算。这里立即数可以是8位或16位的整数。若为16位,则存放时低8位在低地址单元存放,高8位在高地址单元存放。

    mov ax,3102h ;表示将16位立即数3102h送入累加器。执行后,ah=31h,al=02h
    

    直接寻址

    直接寻址方式表示参加运算的数据存放在内存中,存放的地址由指令直接给出,即指令中的操作数是存储器操作数,"[]"内用16位常数表示存放数据的偏移地址,数据的段基地址默认的数据段,可以允许重设。

    mov ax,[3102h] ;表示将数据段中偏移地址为3102h和3103h两单元的内容送到ax中。默认段基地址为DS
    mov bl,ES:[1200h] ;表示将ES段中偏移地址为1200h单元的内容送到bl寄存器。
    

    若操作不是放在ds段,则在指令中要用段重设符号加以声明。

    在汇编语言中,有时也会用一个符号代替数值以表示操作数的偏移地址,通常把这个符号称为符号地址。例如:用buffer代替偏移地址1200h,则指令表示为mov bl,es:[buffer]

    寄存器寻址

    在寄存器方式下,指令的操作数为CPU的内部寄存器。它们可以是数据寄存器,也可以是地址指针、变址寄存器或段寄存器。

    mov si,ax ;表示将ax的内容送到寄存器si中,若指令执行前ax=2233h,si=4455h,则指令执行后si=2233h。
    

    采用寄存器寻址方式,虽然指令操作码在代码段中,但操作数在内部寄存器中,指令执行时不必通过访问内存就可以取得操作数。因此执行速度较快。

    寄存器间接寻址

    寄存器间接寻址是用寄存器的内容表示操作数的偏移地址。此时寄存器中的内容不再是操作数本身,而是存放数据的偏移地址,操作数本身在内存储器中。

    寄存器间接寻址方式中存放操作数偏移地址的寄存器只允许SI、DX、BX和BP,它们可简称为间址寄存器或称为地址指针,选择不同的间址寄存器涉及的段寄存器不同。在默认情况下,选择SI、DI、BX作间址寄存器时,操作数在数据段,段基地址由DS决定;选择BP作间址寄存器,则操作数在堆栈段,段基地址由SS决定,但无论选择哪一个间址寄存器都允许段重设,可在指令中用段重设符指明当前操作数在哪一段。

    因为间址寄存器中存放的操作数的偏移地址,所以指令中的间址寄存器必须加上方括号,以避免与寄存器寻址混淆。

    例如:已知DS=6000H,SI=1200H,61200H存放数据为44H,612001H存放数据为33H,执行指令:mov ax,[si]

    解释:因为指令中没有指定段重设,所以寻址时使用默认的段寄存器DS,由已知条件可计算出操作数的物理地址为 6000 H ∗ 10 H + 1200 H = 61200 H 6000H*10H+1200H=61200H 6000H10H+1200H=61200H,执行结果为:AX=3344H。

    若操作数存放在附加段,则本利的指令应为mov ax,es:[si]

    若间址寄存器采用BP,则操作数默认存放在堆栈段。

    例如:若已知SS=8000H,BP=0200H,指令mov bx,[bp],因为BP为16字节,所以BL和BH存放的内容各不相同,而指令为低位地址。执行后: B L = [ 80200 H ] BL=[80200H] BL=[80200H]单元中的内容, B H = [ 80201 H ] BH=[80201H] BH=[80201H]单元中的内容。

    使用BX、BP作为间址寄存器的寄存器寻址方式称为基址寻址方式,而将SI,DI作为间址寄存器的寄存器寻址方式称为变址寄存器。

    寄存器相对寻址

    在寄存器相对寻址中,操作数在内存中的存放地址(偏移地址)由间址寄存器的内容加上指令中给出的一个8位和16位的位移量组成。操作数所在段由间址寄存器决定(规则与寄存器间接寻址方式相同)。因位移量可看作相对量,故把这种带位移量的寄存器间接寻址方式称为寄存器相对寻址。

    例如:指令mov ax,data[bx]的寻址过程示例。设DS=6000H,BX=1000H,DATA=0008H。

    解释:操作数所在单元的物理地址为 6000 H ∗ 10 H + 1000 H + 0008 H = 61008 H 6000H*10H+1000H+0008H=61008H 6000H10H+1000H+0008H=61008H,执行结果为AX=5566H

    例如:某数据表的首地址(偏移地址)为TABLE,要取出该表中的第10个字节并存放到AL中,可用如下指令段实现(注意位移量是从0开始的)。

    mov si,9 ;第10个数的偏移量为9
    mov al,[table+si] ;第10个数的偏移量为table+9
    

    相对寻址方式书写格式允许有几种不同的形式。例如:以下几种写法实质是完全等价的。

    mov al,data[si]
    mov al,si[data]
    mov al,data+[si]
    mov al,[si]+data
    mov al,[data+si]
    mov al,[si+data]
    

    基址—变址寻址

    基址—变址寻址方式由一个基址寄存器(BX或BP)的内容和一个变址寄存器(SI或DI)的内容相加而形成操作数的偏移地址,称为基址—变址寻址,在默认的情况下,指令中若有BX作基址寄存器,则段地址在DS中;如果用BP作基址寄存器,则段地址在SS寄存器中,但允许使用段重设。

    例如:指令mov ax,[bx][si]的寻址过程,设DS=8000H,BX=2000H,SI=1000H

    解释:操作数的物理地址为 8000 H ∗ 10 H + 2000 H + 1000 = 83000 H 8000H*10H+2000H+1000=83000H 8000H10H+2000H+1000=83000H,指令执行后AL=[83000H],AH=[83001H]。

    注意:使用基址—变址方式时,不允许将两个基址寄存器或两个变址寄存器组合在一起寻址。

    基址—变址—相对寻址

    基址—变址—相对寻址方式事实上是基址—变址方式的扩充,指令中指定一个基址寄存器和一个变址寄存器。同时还给出一个8位或16位的位移量,将三者相加便可得到操作数的偏移地址。至于默认的段寄存器仍由所用的基址寄存器决定,指令允许使用段重设。

    例如:指令mov ax,5[di][bx]的寻址过程。该指令将段地址为DS,偏移地址为BX+DI+5的连续两个内存中的内容送到ax。

    使用这种寻址方式可以很方便地访问二维数组,例如:用基址寄存器存放数组的首地址(偏移地址),而变址寄存器和位移量分别存放行和列的值,指令就可以直接访问二维数组指定的行和列的元素。

    与寄存器间接寻址方式类似,基址—变址—相对寻址指令同样有很多种表示。

    mov ax,data[si][bx]
    mov ax,[bx+data][si]
    mov ax,[bx+si+data]
    mov ax,[bx]data[si]
    mov ax,[bx+si]data
    

    隐含寻址

    有些指令的操作码不仅包含了操作的性质,还隐含了部分操作数的地址,如乘法指令MUL,在这条指令中只需指明乘数的地址,而被乘数以及乘积的地址是隐含且固定的。这种将一个操作数隐含在指令码中的寻址方式称为隐含寻址。

    例如:mul bl的功能把AL中的内容与BL的内容相乘,乘积送到AX寄存器中。

    展开全文
  • 8086/8088 指令系统一、8086/8088 指令格式二、8086/8088 的寻址方式操作数1、 数据操作数2、 地址操作数寻址方式三、8086/8088 指令系统1、数据运算指令2、算术运算指令3、位操作指令4、串操作指令5、程序控制指令6...

    指令系统:计算机是通过执行指令来完成用户的特定人如,因此每种计算机都有一组指令集供用户使用,这组指令集就称为计算机的指令系统。

    一、8086/8088 指令格式

    8086/8088指令系统采用了一种灵活的、由1~6个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数三个部分。

    8086/8088 不同字长的指令码格式:
    在这里插入图片描述
    操作码/寻址方式字节格式:
    在这里插入图片描述
    第一字节中,W指示操作数类型

    W=0为字节,W=1为字;
    D指示操作数的传送方向:D=0表示寄存器操作数为源操作数,D=1表示寄存器操作数为目的操作数。
    

    第二字节指出所用的两个操作数存放的位置,以及存储器中操作数偏移地址的计算方法。

    (1)REG字段规定一个寄存器操作数

      它作为源操作数还是目的操作数已由第一字节中的D位规定。
    

    (2)MOD字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。

     在存储器寻址的情况下,还用来指出该字节后面有无位移量,有多少位位移量
    

    (3)R/M字段受MOD字段控制,R/M则指出如何计算存储器中操作数的偏移地址

      MOD=11为寄存器方式,R/M字段将指出第二操作数所在的寄存器编号;
      MOD=00,01,10为存储器方式
    

    二、8086/8088 的寻址方式

    操作数
    1、 数据操作数

    这类操作数是与数据有关的操作数,即指令中操作的对象是数据。数据操作数又可分为:

     (1) 立即数操作数。指令中要操作的数据包含在指令中。
     (2)寄存器操作数。指令中要操作的数据存放在指定的寄存器中。
     (3)存储器操作数。指令中要操作的数据存放在指定的存储单元中。
     (4)I/O操作数。指令中要操作的数据来自或送到I/O端口。
    
    2、 地址操作数

    这类操作数是与程序转移地址有关的操作数,即指令中操作的对象不是数据,而是要转移的目标地址。

        它也可以分为立即数操作数、寄存器操作数和存储器操作数,即要转移的目标地址包含在指令中,或存放在寄存器中,或存放在存储单元之中。
        对于数据操作数,有的指令有两个操作数:一个称为源操作数,在操作过程中其值不改变;另一个称为目的操作数,操作后一般被操作结果代替。有的指令只有一个操作数,或没有(或隐含)操作数。
        对于地址操作数,指令只有一个目的操作数,它是一个供程序转移的目标地址。 
    
    寻址方式

    可参见另一篇文章 微机中的主要寻址方式

    三、8086/8088 指令系统

    1、数据运算指令

    数据传送指令是程序中使用最频繁的指令。

    数据传送指令按其功能的不同,可以分为

    (1)通用数据传送指令

    通用数据传送指令又分为:

    数据传送指令MOV:指令实现的操作是将源操作数送给目的操作数

    指令格式及操作:

    MOV dst,src ;(dst)←(src)

    dst表示目的操作数,src表示源操作数(下同)。

    这种传送实际上是进行数据的“复制”,源操作数本身不变

      源操作数可以是存储器、寄存器、段寄存器和立即数;
      目的操作数可以是存储器、寄存器(不能为IP)和段寄存器(不能为CS)
    
    >>>必须注意,不能用一条MOV指令实现以下传送:
       ① 存储单元之间的传送。
    我们可以用CPU的内部寄存器为桥梁来解决这个问题
    MOV  AL, AREA1
    MOV  AREA2, AL 
       ② 立即数至段寄存器的传送。
       ③ 段寄存器之间的传送。
     需说明一点,对于代码段寄存器CS和指令指针寄存器IP,通常无需用户利用传送指令改变其中的内容。但是CS可以作为源操作数。 
    

    堆栈操作指令:PUSH 和 POP :堆栈操作指令中的操作数类型必须是字操作数,即16位操作数。

    压入堆栈指令PUSH (PUSH word onto stack)
      指令格式及操作:
        PUSH	src     ;(SP)←(SP)−2,((SP)+1:(SP))←(src) 
    
    指令完成的操作是“先移后入”,即先将堆栈指针SP减2,使SP始终指向栈顶,然后再将操作数src压入(SP)+1和(SP)两个存储单元中
    指令中的操作数src可以是通用寄存器和段寄存器,也可以是由某种寻址方式所指示的存储单元,但不能是立即数
    
    弹出堆栈指令POP (POP word off stack)。
       指令格式及操作:
         POP  dst    	;(dst)←((SP)+1:(SP)),(SP)←(SP)+2
    
    指令完成的操作是“先出后移”,即先将堆栈指针SP所指示的栈顶存储单元的值弹出到操作数dst中,然后再将堆栈指针SP加2,使其指向栈顶。
    指令中的操作数dst可以是存储器、通用寄存器或段寄存器(但不能是代码段寄存器CS),同样也不能是立即数。
    

    数据交换指令XCHG:段寄存器的内容不能参加交换

    指令格式及操作:
    XCHG dst,src ;(dst)←→(src)

    该指令的操作是使源操作数与目的操作数进行交换,即不仅将源操作数传送到目的操作数,而且同时将目的操作数传送到源操作数。
    交换指令的源操作数和目的操作数各自均可以是寄存器或存储器,但不能二者同时为存储器
    

    字节转换指令XLAT

    指令格式及操作:
    XLAT src_table ;(AL)←((BX)+(AL))

     执行XLAT指令后,表中指定序号的元素存于AL。由于需要将元素的序号送AL寄存器,所以被寻址的表的最大长度为255个字节。
     这是一种特殊的基址变址寻址方式,基址寄存器为BX,变址寄存器为AL。
    

    (2)输入输出指令

    输入指令IN用于从外设端口读入数据,输出指令OUT则向端口发送数据

    无论是读入的数据或是准备发送的数据都必须放在寄存器AL(字节)或AX(字)中。

    输入输出指令可以分为两大类:

      一类是端口直接寻址的输入输出指令;另一类是端口通过DX寄存器间接寻址的输入输出指令。
    

    在直接寻址的指令中只能寻址256个端口(0~255),而间接寻址的指令中可寻址64 K个端口(0~65535)

    输入指令IN

         ① 直接寻址的输入指令
     指令格式及操作:
           IN  acc,port       	;(acc)←(port)
     指令中直接给出端口地址(地址小于0FFH),其功能为从指令中直接指定的端口中读入一个字节或一个字送AL或AX。 
         ② 间接寻址的输入指令
     指令格式及操作:
           IN  acc,DX     		;(acc)←((DX))
      此指令是从DX寄存器内容指定的端口中将8/16位数据送入AL/AX中
      这种寻址方式的端口地址由16位地址表示,执行此指令前应将16位地址存入DX寄存器中。 
    

    输出指令OUT

       ① 直接寻址的输出指令
     指令格式及操作:
         OUT  port,acc      	;(port)←(acc)
     此指令将AL(8位)或AX(16位)中的数据输出到指令指定的I/O端口,端口地址应不大于FFH。
        ② 间接寻址的输出指令
     指令格式及操作:
         OUT  DX,acc      	;((DX))←(acc)
     此指令将AL(8位)或AX(16位)中的数据输出到由DX寄存器内容指定的I/O端口中
    

    (3)目标地址传送指令

    **取有效地址指令LEA **:LEA指令将一个近地址指针写入到指定的寄存器

    指令格式:
        LEA  reg16,mem
     指令中的目的操作数必须是一个16位通用寄存器,源操作数必须是一个存储器操作数,指令的执行结果是把源操作数的有效地址,即16位偏移地址传送到目标寄存器。
    

    地址指针装入DS指令LDS:用于写入远地址指针

    指令格式:
         LDS  reg16,mem32
     源操作数是存储器操作数,目的操作数可以是任一个16位通用寄存器。
     LDS传送一个32位的远地址指针,其中包括一个偏移地址和一个段地址,前者送指令中指定的寄存器(目的操作数),后者送数据段寄存器DS
    

    **地址指针装入ES指令LES **:用于写入远地址指针

    指令格式:
    	LES  reg16,mem32
     LES指令与LDS类似,也是装入一个32位的远地址指针
     位移地址送指定寄存器,但是,段地址送附加段寄存器ES
     目标地址传送指令常常用于在串操作时建立初始的地址指针
    

    (4)标志传送指令等四组

    取标志指令LAHF

    指令格式:
          LAHF
     LAHF指令将标志寄存器FLAGS中的5个状态标志位SF、ZF、AF、PF以及CF分别取出传送到累加器AH的对应位,
    

    置标志指令SAHF

    指令格式:
            SAHF
     SAHF指令的传送方向与LAHF相反,将AH寄存器中的第7、6、4、2、0位分别传送到标志寄存器的对应位。
    

    标志压入堆栈指令PUSHF

    指令格式及操作:
    	PUSHF        	;(SP)←(SP)−2,((SP)+1):(SP))←(FLAGS)
     PUSHF指令先将SP减2,然后将标志寄存器FLAGS的内容(16位)压入堆栈。这条指令本身不影响状态标志位
    

    标志弹出堆栈指令POPF

    指令格式及操作:
        POPF       	;(FLAGS)←((SP)+1:(SP)),(SP)←(SP)+2         
     POPF指令的操作与PUSHF相反,它将堆栈内容弹出到标志寄存器,然后SP加2。
     POPF指令对状态标志位有影响,使各状态标志位恢复为压入堆栈以前的状态。
     PUSHF指令可用于调用过程时保护当前标志寄存器的值,过程返回以后再使用POPF指令恢复标志寄存器原来的值。
    

    数据传送指令除了SAHF和POPF外都不影响状态标志位。

    2、算术运算指令(20条)

    8086/8088的算术运算指令可以处理四种类型的数:无符号的二进制数、带符号的二进制数、无符号的压缩十进制数(压缩型BCD码)和无符号的非压缩十进制数(非压缩型BCD码)

    (1)加法指令(影响状态标志位)

     (1)不带进位加法指令ADD :   ADD  dst,src     	;(dst)←(dst)+(src)
        ADD指令将目的操作数与源操作数相加,并将结果送给目的操作数
     (2)带进位加法指令ADC :    ADC  dst,src    	;(dst)←(dst)+(src)+(CF)
        ADC指令是将目的操作数与源操作数相加,再加上进位标志CF的内容,然后将结果送给目的操作数
     (3)加1指令INC :INC dst        ;(dst)←(dst)+1
        INC指令将目的操作数加1,并将结果送回目的操作数。
    

    带进位加法指令主要用于多字节数据的加法运算

    INC指令将影响状态标志位,如SF、ZF、AF、PF和OF,但对进位标志CF没有影响

    INC指令中目的操作数可以是寄存器或存储器,但不能是立即数和段寄存器。其类型为字节操作或字操作均可

    (2)减法指令(影响状态标志位)

      (1) 减法指令SUB:       SUB  dst,src    	;(dst)←(dst) − (src)
          SUB指令将目的操作数减源操作数,结果送回目的操作数。          
      (2)带借位减法指令SBB:   SBB  dst,src     	;(dst)←(dst)-(src)-(CF)
          SBB指令是将目的操作数减源操作数,然后再减进位标志CF,并将结果送回目的操作数
      (3)减1指令DEC:         DEC  dst        	;(dst)←(dst) −1
           DEC指令将目的操作数减1,结果送回目的操作数
      (4)求补指令NEG:        NEG  dst        ;(dst)←0 − (dst)
          NEG指令的操作是用“0”减去目的操作数,结果送回原来的目的操作数。 
           求补指令对状态标志位有影响
      (5)比较指令CMP:        CMP  dst,src		;(dst) − (src)
        CMP指令将目的操作数减源操作数,但结果不送回目的操作数
    

    DEC指令对状态标志位SF、ZF、AF、PF和OF有影响,但不影响进位标志CF

    (3)乘法指令

     (1)无符号数乘法指令MUL :
     MUL  src	  ;(AX)←(AL) x (src)           (字节乘法)
    	          ;(DX:AX)←(AX) x (src)		(字乘法)  
     MUL指令对状态标志位CF和OF有影响,SF、ZF、AF和PF不确定
    
     (2)带符号数的乘法IMUL :
     IMUL	src    		;(AX)←(AL) x (src)  (字节乘法)
    			        ;(DX:AX)←(AX) x (src)	 (字乘法)
     IMUL指令进行带符号数乘法,指令将两个操作数均按带符号数处理
     8位和16位带符号数的取值范围分别是−128~+127和−32768~+32767。
     如果乘积的高半部分仅仅是低半部分符号位的扩展,则状态标志位(CF)=(OF)=0;否则,高半部分包含乘积的有效数字而不只是符号的扩展,则(CF)=(OF)=1
    

    (4)除法指令

    (1)无符号数除法指令DIV :
       DIV  src       	;(AL)←(AX)/(src)的商  	(字节除法)
    		            ;(AH)←(AX)/(src)的余数
    		            ;(AX)←(DX:AX)/(src)的商  	(字除法)
    		            ;(DX)←(DX:AX)/(src)的余数 
    即字节除法中,AX除以src,被除数为16位,除数为8位,执行DIV指令后,商在AL,余数在AH中;
    字除法中,DX:AX除以src,被除数为32位,除数为16位。除的结果,商在AX,余数在DX中
    
    (2)带符号数除法指令IDIV:
       IDIV  src     		;(AL)←(AX)/(src)的商       (字节除法)
    			            ;(AH)←(AX)/(src)的余数               
    			            ;(AX)←(DX:AX)/(src)的商  (字除法)  
    			            ;(DX)←(DX:AX)/(src)的余数
      执行IDIV指令时,如除数为0,或字节除法时AL寄存器中的商超出−128~+127的范围,或字除法时AX寄存器中的商超出−32 768~+32 767的范围,则自动产生一个类型为0的中断。
      IDIV指令对状态标志位的影响以及指令中操作数的类型与DIV指令相同。 
    

    (5)符号扩展指令(不影响状态标志位)

    (1)字节扩展指令CBW:
             CBW    ;如果(AL)<80H,则(AH)←00H,否则(AH)←0FFH          
    CBW指令将一个字节(8位)按其符号扩展成为字(16位)。
    它是一个隐含操作数的指令,隐含的操作数为寄存器AL和AH
    
    (2)字扩展指令CWD :
             CWD          ;如果(AX)<8000H,则(DX)←0000H,否则(DX)←FFFFH
     CWD指令将一个字(16位)按其符号扩展成为双字(32位)。
     它也是一个隐含操作数指令,隐含的操作数为寄存器AX和DX。
    

    (6)十进制(BCD码)运算指令

    在进行十进制数算术运算时,应分两步进行:

    先按二进制数运算规则进行运算,得到中间结果;
    再用十进制调整指令对中间结果进行修正,得到正确的结果。

    AAA     非压缩性BCD码加法调整指令
    DAA     压缩性BCD码加法调整指令
    AAS     非压缩性BCD码减法调整指令
    DAS     压缩性BCD码减法调整指令
    AAM     非压缩性BCD码乘法调整指令
    AAD     非压缩性BCD码除法调整指令
    
    3、位操作指令

    (1)逻辑运算指令(NOT不影响状态标志位,其他均影响)

     (1)AND    逻辑“与” 按位进行与(都真才为真)   
     AND指令可以用于屏蔽某些不关心的位,而保留另一些感兴趣的位
     
     (2)TEST    测试         
     TEST指令的操作实质上与AND指令相同,即把目的操作数和源操作数进行逻辑“与”运算。
     二者的区别在于TEST指令不把逻辑运算的结果送回目的操作数,只将结果反映在状态标志位上
     TEST指令常常用于位测试,它与条件转移指令一起,共同完成对特定位状态的判断,并实现相应的程序转移
     
     (3)OR      逻辑“或” 按位进行或(有真即真)
     OR指令的一个常见的用途是将寄存器或存储器中某些特定的位设置成“1”
     
     (4)XOR     逻辑“异或”  按位进行异或(一真一假才为真)
     XOR指令将目的操作数和源操作数按位进行逻辑“异或”运算,并将结果送回目的操作数
     XOR指令的一个用途是将寄存器或存储器中某些特定的位“求反”,而使其余位保持不变
     XOR指令的另一个用途是将寄存器的内容清零,
     
     (5)NOT   逻辑“非”
     NOT指令的操作数可以是8位或16位的寄存器或存储器,但不能对一个立即数执行逻辑“非”操作
    

    (2)移位指令

    (1) 逻辑左移/算数左移指令SHL/SAL:
          SHL  dst,1/SAL dst,1     或      SHL  dst,CL/SAL dst,CL
     这两条指令的操作是将目的操作数顺序向左移1位或移CL寄存器指定的位数。
     左移1位时,操作数的最高位移入进位标志CF,最低位补0。
     SHL/SAL指令将影响CF和OF两个状态标志位
    
    (2) 逻辑右移指令SHR :
         SHR  dst,1/CL 
     SHR指令的操作是将目的操作数顺序向右移1位或移CL寄存器指定的位数。
     逻辑右移1位时,操作数的最低位移到进位标志CF,最高位补0
     SHR指令也将影响CF和OF状态标志位
     
     (3)算术右移指令SAR:
             SAR  dst,1/CL
        SAR指令的操作数与逻辑右移指令SHR有点类似,即将目的操作数向右移1位或移CL寄存器指定的位数,操作数的最低位移到进位标志CF。
    

    SAR与SHR指令的主要区别是,算术右移时,最高位保持不变。

    (3)循环移位指令

    (1)循环左移指令ROL :
            ROL  dst,1/CL
        ROL指令将目的操作数向左循环移动1位或移CL寄存器指定的位数。
        最高位移到进位标志CF,同时最高位移到最低位形成循环,进位标志CF不在循环回路之内。
        
    (2)循环右移指令ROR式:
         ROR  dst,1/CL
      ROR指令将目的操作数向右循环移动1位或移CL寄存器指定的位数。
      最低位移到进位标志CF,同时最低位移到最高位。
    
    (3)带进位循环左移指令RCL (Rotate Left through Carry)。指令格式:
       RCL  dst,1/CL
      RCL指令将目的操作数连同进位标志CF一起向左循环移动1位或移CL寄存器指定的位数。
      最高位移入CF,而CF移入最低位
    
    (4)带进位循环右移指令RCR :
        RCR dst,1/CL
     RCR指令将目的操作数与进位标志CF一起向右循环移动1位或移CL寄存器指定的位数。
     最低位移入进位标志CF,CF则移入最高位。
    

    利用循环移位指令可以对寄存器或存储器中的任一位进行位测试

    4、串操作指令
     串传送指令(MOVS): MOVS指令也称为字符串传送指令,它将一个字节或字从存储器的某个区域传送到另一个区域,然后根据方向标志DF自动修改地址指针
     串装入指令(LODS): LODS指令是将一个字符串中的字节或字逐个装入累加器AL或AX中
     串送存指令(STOS): STOS指令是将累加器AL或AX的值送存到内存缓冲区的某个位置上
     串比较指令(CMPS): 将两个字符串中相应的元素逐个进行比较(即相减),但不将比较结果送回目的操作数,而反映在状态标志位上
     串扫描指令(SCAS): 将累加器的内容与字符串中的元素逐个进行比较,比较结果也反映在状态标志位上
    
    5、程序控制指令

    (1)转移指令

    (1) 无条件转移指令JMP :无条件转移指令的操作是无条件地将控制转移到指令中指定的目标地址
    (2)条件转移指令JCC:  在汇编语言程序设计中,常利用条件转移指令来构成分支程序。
    

    条件转移指令

    (2)循环控制指令

      LOOP指令:要求使用CX作为计数器,指令的操作是先将CX的内容减1,如果结果不等于零,则转到指令中指定的短标号处;否则,顺序执行下一条指令
      LOOPE/LOOPZ 指令 :先将CX寄存器的内容减1,如结果不为零,且零标志(ZF)=1,则转移到指定的短标号,循环。
      LOOPNE/LOOPNZ 指令:将CX寄存器的内容减1,如结果不为零,且零标志(ZF)=0 (表示“不相等”或“不等于零”),则转移到指定的短标号。
    

    (3)过程调用指令

    (1)过程调用指令CALL  有以下四种形式:
     指令系统中提供了子程序段内直接调用指令,段内间接调用指令,段间直接调用和段间间接调用指令 
     如:
         CALL  2000H                     ;段内直接调用,调用地址在指令中给出
         CALL  AX                          ;段内间接调用,调用地址由AX给出
         CALl  2000H:  3000H     ;段间直接调用,调用段地址和偏移量都在指令种给出
         CALL  DWORD PTRR[DI]   ;段间间接调用,调用地址在DI、DI+1、DI+2、 DI+3所指的内存单元中,前2个字节为偏移量,后2个字节为段地址
    
    (2)过程返回指令RET
       和调用指令相对应的是返回指令。
       返回指令是子程序的最后一条指令,是用来返回高一层的程序的指令
    

    (4)中断指令

     8086/8088 CPU可以在程序中安排一条中断指令来引起一个中断过程,这种中断称为软件中断。
    
    6、处理器控制指令

    (1) 标志位操作指令(7种)

      CLC:清进位标志。指令的操作为(CF)←0。
      STC:置进位标志。指令的操作为(CF)←1。
      CMC:对进位标志求反。指令的操作为  (CF)←(CF)。
      CLD:清方向标志。指令的操作为(DF)←0。
      STD:置方向标志。指令的操作为(DF)←1。
      CLI:清中断允许标志。指令的操作为(IF)←0。
      STI:置中断允许标志。指令的操作为(IF)←1。执行这条指令后,CPU将允许外部的可屏蔽中断请求    
    

    (2)外部同步指令(4种)

      HLT
      WAIT: 等待指令
      ESC
      LOCK:封锁总线指令
    

    (3)空操作指令 NOP

    展开全文
  • 8086/8088 寻址方式

    千次阅读 2017-06-26 16:35:05
    作者:黑剑  ... 8086/8088 寻址方式 ...这一节讲解8086/8088寻址方式...8086/8088有七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。 其中

    作者:黑剑 
    出处:http://www.cnblogs.com/blacksword/

    8086/8088 寻址方式

    这一节讲解8086/8088寻址方式,所谓寻址方式,就是寻找操作数或操作数地址的方式。

    寻址方式

    8086/8088有七种基本的寻址方式:立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址变址寻址,相对基址变址寻址。

    其中,后五种寻址方式(即直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址和相对基址变址寻址)属于存储器寻址,用于说明操作数或操作数地址所在存储单元的地址。这五种方式也就是确定存放操作数的存储单元有效地址EA的方法,这里所说的有效地址就是在前面一节讲存储器分段中所说的段内偏移地址。

    除了这些基本的寻址方式以外,还有固定寻址和I/O端口寻址等,但不会在本节中介绍到。

     

    基本寻址方式

    下面重点说一下这七种基本寻址方式的特点:

    1. 立即寻址方式

    先解释一个概念,叫做立即数

    操作数包含在指令中,它作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数。

    立即寻址方式所提供的操作数紧跟在操作码后面,与操作码一起放在指令代码段中,不需要到其他地址单元中去取。立即数可以是8位,也可以是16位。这种寻址方式主要用于给寄存器或存储单元赋初值的场合。立即寻址方式是这七种寻址方式中速度最快的寻址方式。

    举例:MOV AX, 1234H ; 给AX寄存器赋值为1234H

     

    2. 寄存器寻址方式

    寄存器寻址的特点是操作数在CPU内部的寄存器中,在指令中指定寄存器号。

    对于16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI和SP等;

    对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。

    例如:MOV SI, AX

            MOV AL, DH

    由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采用寄存器寻址方式的指令执行速度较快。

     

    3. 直接寻址方式

    直接寻址的操作数在存储器中,指令直接包含有操作数的有效地址。由于操作数一般存放在数据段,所以操作数的地址由DS加上指令中给出的16位偏移得到。

    假如DS内容是5000H,地址为51234H字存储单元中的内容时6789H,那么在执行“MOV AX, [1234H]”后寄存器AX的内容是6789H。

    由于该指令所用的段寄存器为DS,所以该条指令还可以写为"MOV AX, DS:[1234H]"。

    当然,除了DS段寄存器以外,还可以指定其他段寄存器。

    例如:MOV ES:[5678H], BL ; 指定ES作为段寄存器

    这种寻址方式常用于处理单个存储器变量的情况。它可以实现在64K字节的段内寻找操作数。直接寻址的操作数通常是程序使用的变量。

     

    4. 寄存器间接寻址方式

    寄存器间接寻址的操作数在存储器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器的内容为段值;如果有效地址在BP中,则以SS段寄存器的内容为段值。

    例如:MOV AX, [SI] ; 自动引用DS作为段寄存器

    假设 (DS)= 5000H, (SI)= 1234H

    那么存储的物理存储单元地址是51234H。再设该字存储单元的内容是6789H,那么在执行该指令后,(AX)= 6789H。

    当然也可以指定段超越前缀,如:

    MOV DL, CS:[BX]  ;引用的段寄存器是CS

    如果有效地址在BP中,那么引用的段寄存器为SS。如:

    MOV [BP], CX  ;此时引用的段寄存器是SS

    这种寻址方式可以用于表格处理,在处理完表中的一项后,只要修改指针寄存器的内容就可以方便地处理表中的另一项。

    注意同寄存器寻址方式的书写方式予以区别。

     

    5. 寄存器相对寻址方式

    操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器的(SI、DI)内容加上指令中给定的8位或16位位移量之和。

    即 EA = (BX)或(BP)或(SI)或(DI) + 8位或16位位移量

    在一般情况下,如果SI、DI或BX的内容作为有效地址的一部分,那么引用的段寄存器是DS。如:

    MOV AX, [DI+1223H] ; 引用的段寄存器是DS

    假设,(DS)= 5000H,(DI)= 3678H。

    那么,存取的物理存储单元地址是5489BH。再假设该字存储单元的内容是55AAH,那么在执行该指令后,(AX)= 55AAH。

    而当BP的内容作为有效地址一部分时,那么引用的段寄存器是SS,如:

    MOV BX, [BP-4]  ; 引用的段寄存器是SS

    当然也可以自行指定段寄存器,如:

    MOV ES:[BX+5], AL ; 引用ES作为段寄存器

    这种寻址方式同样可用于表格处理,表格的首地址可设置为指令中的位移量,利用修改基址或变址寄存器的内容来存取表格中的项值。

    以下两种写法等价:

    MOV AX, [SI+3]

    MOV AX, 3[SI]

     

    6. 基址变址寻址方式

    操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加得到。

    即:EA = (BX)或(BP) + (SI)或(DI)

    在一般情况下,如果BP的内容作为有效地址的一部分,则以SS的内容作为段值,否则以DS的内容作为段值。

    当所得的有效地址超过FFFFFH时,就取其64K的模。

    例如: MOV AX, [BX+DI] ; 此时引用DS段寄存器

    假设,(DS)= 5000H,(BX)= 1223H, (DI)= 54H

    那么,存取的物理存储单元地址是51277H。再假设改字存储单元的内容是168H,那么在执行该指令后,(AX)= 168H

    当然,还可以增加段超越前缀来指定段寄存器。

    例如:

    MOV AX, ES:[BX+SI]  ; 引用ES作为段寄存器
    MOV DS:[BP+SI], AL  ; 引用DS作为段寄存器

    这种寻址方式适用于数组或表格处理。用基址寄存器存放数组首地址,而用变址寄存器来定位数组中的各元素,或反之。

    另外,以下两种表示方法是等价的:

    MOV AX, [BX+DI]

    MOV AX, [DI][BX]


    7. 相对基址变址寻址方式

    操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的8位或16位位位移量相加得到。

    即:EA = (BX)或(BP) + (SI)或(DI) + 8位或16位位移量

    在一般情况下,如果BP作为有效地址的一部分,则以SS段寄存器的内容为段值,否则以DS段寄存器的内容为段值。

    在指令中给定的8位或16位位移量采用补码形式表示。在计算有效地址时,如果偏移量是8位,那么被带符号扩展成16位。当所得的有效地址超过FFFFH时,就取其64K的模。

    举例:MOV AX, [BX+DI-2] ; 自动引用DS作为段寄存器

    假设,(DS)= 5000H,(BX)= 1223H, (DI)= 54H
    那么,存取的物理存储单元地址是51275H。再设该字存储单元的内容是7654H,那么在执行该指令后,(AX)= 7654H

    以下四种表示方法均是等价的:

    MOV AX, [BX+DI+1234H]

    MOV AX, 1234H[BX+DI]

    MOV AX, 1234H[BX][DI]

    MOV AX, 1234H[DI][BX]

    尽管相对基址变址这种寻址方式最复杂,但也是最灵活的。

     

    展开全文
  • 8051与80868088的区别

    2017-04-26 10:14:00
    主要8051是8位,而80868088是16位,所以汇编时会在书写方面不一样,那就要注意算法了,但只要掌握好8051就很快可以过度到16位机以下是一些概括性的资料:(是复制粘贴的)8086是intel的CPU,地球上生产CPU的不只...
    主要8051是8位,而8086和8088是16位,所以汇编时会在书写方面不一样,那就要注意算法了,但只要掌握好8051就很快可以过度到16位机
    以下是一些概括性的资料:(是复制粘贴的)
    8086是intel的CPU,地球上生产CPU的不只intel还有motorola.随着人类的进步cpu也不断发展。8086发育得越来越丰满了,也就是以后的/80286/80386/80486/奔腾/p2/p3/p4.
    8051是单片机,是一种计算机了,实际上8051内除有CPU外,内部还包括RAM、ROM、定时器、I/O接口等,只是她比PC机小得多,用处也不一样而已。为什么说8051系列呢?8051是intel发明的技术,它有自己的这种技术的产品--MCS-51。MCS-51系列单既包括三个基本型80C31、8051、8751,对应的低功耗型号80C31、8051、87C51,因而MCS-51特指Intel的这几种型号。上个世纪80年代中期以后,Intel将8051内核以专利转让的形式卖了出去,8051被不同的公司AMTEL、WINBOND、PHILIPS、、MOTOROLA、ANANOG DEVICES、DALLAS这些包下了,弄出了各有千秋,风姿sex appeal的C51系列。如:ZILOG的Z8系列,PHILIPS的51X系列,motorola的68HC05/08系列等

    8086/8088微处理器
    8086是Inter系列的16位微处理器,芯片上有2.9万个晶体管,采用 HMOS工
    艺制造,用单一的+5V电源,时钟频率为5MHz~10MHz。
    8086有16根数据线和20根地址线,它既能处理16位数据,也能处理8位数据。可
    寻址的内存空间为1MB.
    Inter公司在推出8086的同时,还推出了一种准16位微处理器8088,8088的内部寄存器,运算部件及内部数据总线都是按16位设计的,单外部数据总线只有8条。推出8086的主要目的是为了与当时已有的一套Inter外部设备接口芯片直接兼容使用。8086与8088在寄存器结构,编程结构,存储器组织及I/O端口组织方面是完全一样的或稍有差别,在本节中,对其差别之做出说明。
    1.3.1 8086/8088的寄存器结构
    图1-3示出了8086/8088的寄存器结构
    1. 数据寄存器
    数据寄存器为图中最上边所示的4个寄存器AX,BX,CX,DX。这些寄存器用以暂时保存计算过程中所得到的操作数及结果。他能处理16位数,也能处理8位数,当处理8位数时,这4个16位寄存器作为8个8为寄存器AH,AL,BH,BL,CH,CL,DH,DL来使用。
    这4个数据寄存器除了作为通用寄存器以外,还有各自的专门用途:
    AX(accumulator)做累加器用,是算术运算的主要寄存器。AX还用在字乘和字除法中,此外,所有的I/O指令都是以AX为中心与外部设备进行信息传送;
    BX(base)在计算寄存器地址时,常用做基值寄存器;
    CX(count)再串操作指令及循环中用做计数器;
    DX(data)在字乘法,字除法运算中,将DX,AX组合成一个双字长数,DX用来存放高16位数。另外,在间接的I/O指令中,DX用来指定I/O端口地址
    2. 指针寄存器及变址寄存器
    指针寄存器包括堆栈寄存器SP(stack pointer)和基数指针寄存器BP(base pointer),变
    值寄存器包括源变址寄存器SI(source index)和目的变值寄存器DI(destination index)。这
    4个寄存器都是16位寄存器,这些寄存器在运算过程中也可以用来存放操作数(只能
    以字为单位),但经常的用途是在段内寻址时提供偏移地址,SP,BP一般与段寄存器SS
    联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可
    作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。SI,DI一般与段寄存器
    DS联用,以确定数据段中某一存储单元的地址,SI,DI具有自动增量和自动减量的功能,
    这一点使在串操作指令中用做变址非常方便,SI作为隐含的源变址DS联用,DI作为
    隐含的目的变址和ES连用,从而达到在数据段和附加段中寻址的目的
    3. 段寄存器
    一共有4个段地址寄存器,他们是:
    CS(code segment register)16位代码段寄存器
    DS(data segment register)16位数据段寄存器
    SS(stack segment register)16位堆栈段寄存器
    ES(extra segment register )16为附加段寄存器
    下面将要讲到,在IBM PC机中采用存储器地址分段的办法,使8086/8088能寻址1MB的内存。而段寄存器就是用来存放段地址的,CS段寄存器用来存放当前正在运行的程序;DS段寄存器用来存放当前运行的数据,若程序中使用了段操作指令,源操作数也
    存放在数据段中,SS段寄存器规定了堆栈所处的区域;ES段寄存器用来存放辅助数据
    ,因ES是一个附加的数据段,在执行串操作指令时,目的操作数也一般存放在ES段中。
    4. 控制寄存器
    IP(instruction pointer)是指令指针寄存器,是一个16位寄存器,用来存放代码段中的偏移地址。他与CS连用才能确定下一条指令的地址,根据这一地址,控制器从指定的存储器中,取出下一条要执行的指令,并修改IP,以便指向下一条要执行的指令。可见IP
    寄存器是用来控制指令系列的执行流程的。
    PSW(processor status word)是状态标志寄存器,也是一个16位寄存器,我们将在本节后面加以介绍。
    上面介绍的这些寄存器在计算机中有非常重要的作用,在运算过程中,这些寄存器起着存储器的作用,但存取速度比存储器快得多。
    1.3.2 8086/8088的编程结构
    所谓编程结构是指从使用者看到的结构,这是一种按功能划分的结构,这种结构与CPU内部的实际物理结构当然是有区别的。
    8086的编程结构见图1-4。他分两部分。即总线接口部分BIU(bus interface unit)和执行部件EU(execution unit).

    总线接口部分负责与存储器,外设端口传送数据。具体讲,总线接口部分从内存中取出指令送到指令队列时,CPU执行指令时,所需的操作数也由总线接口部分从指定的内存单元或外设端口取来,传送给执行部分去执行,反过来,执行部分的操作结果也通过
    总线接口传送到指定的内存单元或外设端口中去。
    总线接口部件由下面4部分组成:4个段寄存器,指令指针寄存器IP,20位的地址加法器及6个字节的指令队列。
    地址加法器的作用是产生20个地址。上面提到,8086/8088内部所有的寄存器都是16位的,8086/8088可用20位地址去寻址1MB的内存空间,这就需要地址加法器根据16
    寄存器提供的信息,计算出20位物理地址,具体算法将在本节后面讲述存储器组织时加以介绍。
    对总线接口部分需说明的一点是,8086的指令队列为6个字节,而8088的指令队列为4个字节。不管是8086,还是8088,都会在执行指令的同时,从内存中取出下面一条或几条指令,取来的指令依次放在指令队列中,按顺序放,并按顺序到EU中去执行。执行部分EU的功能负责指令的执行。
    执行部件包括:4个数据寄存器,2个指针寄存器,2个变值寄存器,1个状态标志寄存器和一个算术逻辑单元。
    从编程结构可看出,由于总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时 ,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。这样,一般情况下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令
    1.3.3 8086/8088的存储器组织
    1. 存储单元的地址和内容
    2. 在计算机中用以存储信息的基本单位是一个二进制位,每8个组成一个字节

    转载于:https://www.cnblogs.com/lvdongjie/p/6767215.html

    展开全文
  • 8086/8088引脚介绍

    2020-03-03 13:48:55
    8086/8088引脚介绍 文章目录8086/8088引脚介绍AD0AD15AD_0AD_{15}AD0​AD15​(address data)A16/S6A19/S3A_{16}/S_6A_{19}/S_3A16​/S6​A19​/S3​ (address status bus)BHE‾/S7\overline{BHE}/S7BHE/S7(Bus **...
  • 1、 8086/8088最小模式的典型配置 当8086/8088的第33引脚MN/MX接高电平(或直接接+5V)时,系统工作于最小模式,即单处理器模式 配套的寄存器8284A为时钟发生器,8282为地址锁存器,8286为数据总线收/发器。 2...
  • 8086/8088 存储器分段概念

    千次阅读 2017-06-26 16:33:43
    作者:黑剑  ... 8086/8088 存储器分段概念 ... 从8086 CPU开始采用了分段的方法管理存储器,只有充分理解存储器分段的概念和存储器逻辑地址和物理地址的关系,才能有助于我们掌握8086/8088汇编语言。
  • 8086/8088CPU内部结构

    万次阅读 多人点赞 2017-05-04 15:27:17
    8086/8088的功能结构80868088CPU按功能可分为两个独立的部分:总线接口单元BIU(Bus Interface Unit)和执行单元EU(Execution Unit)BIU: 完成CPU存储器之间的信息传送 总线控制 IO数据传送 逻辑地址物理地址进行...
  • 8086/8088微处理器详解

    2020-05-27 14:26:32
    编程结构8086/8088内部结构图执行单元EU组成成分 8086/8088内部结构图 执行单元EU 组成成分 1个运算器 8个16位的通用寄存器(4个数据寄存器、4个指针寄存器) 1个16位的标志寄存器 16位内部数据总线 等 运算器:2 ...
  • 4.8086/8088片内均由两个独立的裸机单元组成,即总线接口单元(BIU)和执行单元(EU) 总线接口单元BIU组成 1.4个16位段寄存器(CS,DS,SS,ES) 2.16位指令偏移地址寄存器(IP) 3.指令队列寄存器(8086CPU:6字节;80888...
  • 文章目录2.1 8086/8088寄存器组cpu寄存器标志寄存器2.2 存储分段和地址的形成存储单元的地址和内容存储器的分段物理地址的形成段寄存器的引用8086/8088的寻址方式立即寻址方式寄存器寻址方式直接寻址方式寄存器间接...
  • 8086/8088CPU的编程结构

    千次阅读 2020-04-29 00:27:31
    编程结构是指从程序员和使用者的角度看到的结构,亦可成为功能结构。 功能结构 8086/8088由两部分组成,总线接口部件BIU和执行部件EU
  • 8086/8088指令

    2012-11-11 20:44:48
    8086/8088指令系统-来自网络 一、数据传送指令 1.通用数据传送指令 MOV(Move)传送 PUSH(Push onto the stack)进栈 POP(Pop from the stack)出栈 XCHG(Exchange)交换 .MOV 指令 格式为: MOV DST,SRC ...
  • 8086/8088有20条地址线,它的直接寻址能力为1MB。也就是在一个系统中可以有多达1MB的存储器,地址从00000H—FFFFFH。给定任意一个20位物理地址,就可以从中取出需要的指令和操作数。但是8086/8088CPU只能进行16位...
  • 8086/8088存储器和I/O组织

    千次阅读 多人点赞 2018-04-03 17:31:22
    (一)8086/8088存储器组织 一,8086/8088存储空间 8086/8088有20根地址线,可直接对1M个存储单元进行访问。 每个存储单元都有1个20位的地址。这1M个存储单元对应的地址为00000H-FFFFFH 一个存储单元中存放的...
  • 8086/8088指令系统的指令分为7类,即数据传送、算术运算、逻辑操作、程序控制、数据串操作、处理器控制、输入输出。在学习指令系统时,应该从4个方面掌握这个指令,如下: 掌握指令的功能:该指令能够实现何种操作...
  • 详细概括:8086/8088CPU内部寄存器

    千次阅读 2020-03-25 15:27:33
    8086/8088CPU内部有14个16位寄存器,按功能可分为三类:通用寄存器(8个)、段寄存器(4个1)和控制寄存器(2个)。8086/8088CPU内部寄存器结构如下图所示: 现在,我们对每个寄存器一一学习!!!Go! 一、通用...
  • 8086/8088指令系统

    千次阅读 2006-11-17 21:26:00
    指令系统1.计算机指令格式2. 指令格式及寻址方式3.8086/8088指令系统1.指令的寻址方式; 2.指令系统....5.1 8086/8088指令码格式寻址方式5.2 8086指令系统5.3 数据传送类指令5.4 数据操作类指令5.5 串处理
  • 8086/8088CPU

    2009-07-10 10:56:00
    8088CPU:准16位微处理器,内部数据总线为16位,外部数据总线为8位内部结构基本相同,指令系统安全相同内部包括两大部件:总线接口部件BIU 取指令、取操作数、存结果执行部件EU 执行指令8086/8088寄存器 8个16位...
  • 文章目录8086x8088指令系统8086x8088指令格式8086x8088寻址方式规定操作数的方法数据寻址方式立即寻址示例寄存器寻址示例直接寻址示例寄存器间接寻址示例寄存器相对寻址示例:基址变址且相对寻址示例隐含寻址示例...
  • 第四章-8086/8088指令系统

    千次阅读 2018-04-12 00:52:25
    8086/8088指令系统采用了一种灵活的、由1-6个字节组成的、变字长的指令格式,包括操作码、寻址方式以及操作数三个部分。 不同字长的指令码格式不同,如下图: 第一字节:操作码字节(OPCODE),规定指令的操作...
  • 8086/8088微处理器

    千次阅读 2012-12-25 21:15:38
    1. 8086/8088微处理器内部结构 ① 8086/8088微处理器的内部由哪两个工作部件构成?功能分别是什么? EU(指令执行部件)和BIU(总线接口部件)。 EU功能: 执行指令。 BIU功能: 负责微处理器“外部”的内...
  • 8086/8088常用汇编指令汇总 一、数据传送指令: MOV,PUSH,POP,XCHG,IN,OUT,XLAT,LEA,LDS,LES,LAHF,SAHF,PUSHF,POPF 二、算术指令: ADD,ADC,INC,SUB,SBB,DEC,NEG,CMP,MUL,IMUL,DIV,IDIV,CBW,CWD 三、逻辑指令: ...
  • 8086/8088指令集

    2008-07-10 12:52:00
    8086/8088指令集 为了便于查询,这里分类列出8086/8088汇编指令: 数据传送指令 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 或 MOV r,m 或 MOV m,r 或 MOV r,...
  • 尽管80868088处理器的体系结构和指令集相同,但是它们之间仍然存在差异。 下表列出了2个微处理器之间的区别: 序号 8086微处理器 8088微处理器 1 数据总线为16位。 数据总线为8位。 2 它具有3...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,036
精华内容 2,014
关键字:

8086与8088