新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8086指令系统---数据传送指令

8086指令系统---数据传送指令

作者: 时间:2016-11-27 来源:网络 收藏
  8086指令系统分为以下6组:
  ⒈ 数据传送指令
  ⒉ 算术指令
  ⒊ 逻辑指令
  ⒋ 串处理指令
  ⒌ 控制转移指令
  ⒍ 处理机控制指令

数据传送指令

  数据传送指令的功能是把数据、地址传送到寄存器或存储器单元中。它分为4类。

  ⑴ 通用数据传送指令     ⑵ 累加器专用传送指令
   MOV  传送           IN   输入
   PUSH 进栈           OUT  输出
   POP  出栈           XLAT 换码
   XCHG 交换

  ⑶ 地址传送指令       ⑷ 标志寄存器传送指令
   LEA  有效地址送寄存器     LAHF 标志送AH
   LDS  指针送寄存器和DS     SAHF AH送标志寄存器
   LES  指针送寄存器和ES     PUSHF 标志进栈
                   POPF 标志出栈

1 通用数据传送指令 

  MOV dst, src;传送指令(move)
  执行操作:(dst) ← (src)
  功能: 将源操作数(字节或字)传送到目的地址。

  注意:
   ● 目的操作数dst和源操作数src不能同时用存储器寻址方式,这个限制适用于所有指令;
   ● 目的操作数dst不能是CS,也不能用立即数方式;
   ● 目的操作数dst和源操作数src不允许同时为段寄存器;
   ● MOV指令不影响标志位。

  PUSH   src ; 进栈指令(push onto the stack)
  执行操作: (SP) ← (SP)-2
        ((SP)) ← (src)

  POP    dst ; 出栈指令(pop from the stack)
  执行操作: (dst) ← ((SP))
        (SP) ← (SP)+2

  PUSH和POP指令分别将数据存入堆栈或把堆栈中的数据取出。堆栈是以LIFO(后进先出)方式工作的一个存储区,程序中定义的堆栈段就是这样一个LIFO存储区。数据存入堆栈单元或从堆栈单元中取出都由堆栈指针SP指示,而SP总是指向栈顶,所以进栈和出栈指令都会自动修改SP。

  PUSH指令执行时,SP的内容先减2,然后将数据压入SP所指示的字单元,存储的方法同样是高8位存入高地址字节,低8位存入低地址字节。POP指令执行时,将SP所指示的栈顶地址的内容取出放入目的地址,然后SP增2,指向新的栈顶地址。

  注意:
   ● PUSH和POP指令只能是字操作,因此存取字数据后,SP的修改必须是+2或-2;
   ● PUSH和POP指令不能使用立即数方式;
   ● POP指令的dst不允许是CS寄存器;
   ● PUSH和POP指令都不影响标志位。
   PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

  XCHG  opr1, opr2 ; 交换指令(exchange)
  执行操作:(opr1) ←→ (opr2)
  XCHG指令使两个操作数opr1,和opr2互相交换,其中一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

  注意:
   ● 不允许使用段寄存器
   ● 不影响标志位

  例 假设(DS)=1000H, (SS)=4000H, (SP)=100H, (BX)=2100H, (12100)=00A8H, 指出连续执行下列各条指令后,有关寄存器、存储单元以及堆栈的情况。

     PUSH   DS
     PUSH   BX
     PUSH   [BX]
     POP    DI
     POP    WORD PTR [DI+2]
     POP    DS

  
执行结果: (SP)=100H-2=0FEH    (SP)=0FE-2=0FCH   (SP)=0FC-2=0FAH
      (400FEH)=1000H      (400FCH)=2100H    (400FAH)=00A8H

  
执行结果: (SP)=0FA+2=0FCH    (SP)=0FC+2=0FEH     (SP)=0FE+2=100H
      (DI)=00A8H       (100AAH)=2100H      (DS)=1000H

  例 已知(AX)=6634H, (BX)=0F24H, (SI)=0012H, (DS)=1200H, (12F36H)=2500H, 写出下列指令执行的结果。

      XCHG  AH,AL    ; 执行前: (AH)=66H, (AL)=34H
               ; 执行后: (AH)=34H, (AL)=66H
      XCHG  AX,[BX+SI] ; 执行前: (AX)=6634H, (12F36H)=2500H
               ; 执行后: (AX)=2500H, (12F36H)=6634HH

 2 累加器专用传送指令

  这组指令只限于使用累加器(ac:AX 或AL)传送信息。
  IN  ac, port ; 输入指令(input), port≤0FFH
  执行操作: (AL) ← (port) 传送字节
   或 (AX) ← (port+1,port) 传送字

  IN  ac, DX  ; 输入指令, DX中的port>0FFH
  执行操作: (AL) ← ((DX)) 传送字节
   或 (AX) ← ((DX)+1,(DX)) 传送字

  OUT  port, ac  ; 输出指令(output), port≤0FFH
  执行操作: (port) ← (AL) 传送字节
   或 (port+1,port) ← (AX) 传送字

  OUT  DX, ac   ; 输出指令(output), DX中的 port>0FFH
  执行操作: ((DX)) ← (AL) 传送字节
   或 ((DX)+1,(DX)) ← (AX) 传送字

  对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。微处理机分配给外部设备最多有64K个端口,其中前256个端口(0~FFH)称为固定端口,可以直接在指令中指定。当端口地址超过8位(≥256),称为可变端口,它必须先送到DX寄存器,然后再用IN或OUT指令传送信息。CPU与I/O端口传送信息的寄存器只限于累加器ac (AX或AL),传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。

上一页 1 2 下一页

评论


技术专区

关闭