单片机基础之汇编语言入门学习(八) 数据传送指令

常见的汇编指令可以分为以下六类
数据传送指令
算术运算指令
逻辑运算和移位指令
串操作指令
转移指令
处理器控制指令

数据传送类指令
包括:

   通用传送指令;  累加器专用传送指令
   地址传送指令;  标志传送指令;

1、通用传送指令
①基本传送指令(MOV)

指令格式:MOV  DST,SRC;
源操作数和目的操作数可用前述6种寻址方式的任何一种。
操作:将SRC内容付给、、赋给DST。
所有通用传送指令都不影响标志位。


注意:不能用MOV指令实现以下传递

(1)储存器操作数之间不能直接传送
    MOV [1000H],[DI];  错
  应该为
    MOV  AX,[DI];
    MOV  [1000H],AX;
(2)立即数不能直接送段寄存器
    MOV   DS,2000H;    错
  应该为
    MOV   AX,2000H
    MOV   DS,AX
(3)段寄存器之间不能直接传送
    MOV   ES,DS;       错
  应该为
    MOV    AX,DS;
    MOV    ES,AX
(4)CS只可以作为源操作数
    MOV    CS,AX;      对
    MOV     AX,CS;     错
(5)源操作数和目的操作数的宽度必须相同

他们之间的相互传递关系
在这里插入图片描述
②堆栈指令(PUSH、POP)
堆栈(STACK)的概念
数据的存储按后进先出(Last In First Out—LIFO)原则组织的一段内存区域。
SS(堆栈段)
SP(指向堆栈段的段顶)

入栈指令(PUSH)
格式:PUSH  src
操作过程分两步完成:
  Ⅰ.(SP)<-(SP)-2       (栈顶位置向上移2个字)
  Ⅱ.((SP)+1,(SP))<-(src)     (把src放到新空出的两个字)
功能:把一个字压入由SP指向的堆栈区
如:PUSH  AX
出栈指令(POP)          *即弹栈*
格式:POP  dst  ;
 操作:
     (dst)<-((SP)+1,(SP))
     (SP)<-(SP)+2
功能:把SP所指向的堆栈顶部的一个字送入目的地址,同时进行修改堆栈指针。
如:POP   BX;
    POP   AXL     

堆栈的用途如下表
在这里插入图片描述
在这里插入图片描述

断电信息:程序断点地址、标志寄存器及其他被子程序使用和改变的寄存器。


应注意的问题

①堆栈操作都按字操作;
②PUSH,POP指令的操作数可以是CPU内部寄存器或存储单元;
③PUSH  CS  合法,POP  CS  非法
④执行PUSH指令,(SP)-2->(SP),低字节放在低地址,高字节放在高地址;
⑤SP总是指向栈顶;
⑥堆栈最大容量即为SP的初值与SS之差。

③交换指令(XCHG)

格式: XCHG  dst,src ;  (dst)<->(src)
可以实现:  寄存器之间
            寄存器和存储器之间
注意:
    存储器之间不能直接交换;
    段寄存器不能作为操作数;
    允许字或字节操作。
            

2、累加器专用传送指令
(1)输入指令(IN)

功能:用于CPU从外设端口接收数据。
具体形式有四种:
   IN  AL,data8;  从端口地址输入一个字节
   IN  AX,data8; 从8位端口地址输入一个字   
   IN  AL,DX;     从16位端口地址输入一个字节
   IN  AX,DX;     从16位端口地址输入一个字

(2)输出指令(OUT)

功能:用于CPU像外设端口发送数据
具体形式有四种:
   OUT data8,AL;  从端口地址输入一个字节
   OUT data8,AX; 从8位端口地址输入一个字   
   OUT DX;AL;      从16位端口地址输入一个字节
   OUT DX,AX;      从16位端口地址输入一个字

3、目的地址传送指令
8086提供了三条指令:
LEA
LDS
LES

(1)LEA
格式:  LEA  reg16,mem
reg16——16位通用寄存器;
mem——存储单元;
功能:将源操作数的偏移地址传送到目的操作数;
注意:
     源操作数必须以 寄存器 间接寻址、变址寻址、基址加变址寻址 
     等方式表示的存储器操作数;
     目的操作数为一个16位的通用寄存器。
例如:
 设(DI) = 1005H
 执行LEA  AX,[DI],  有(AX) = 1005H.
(2)LDS
格式:  LDS  reg16,mem 
功能:把源操作数指定的4个相继字节的数据分别送到
      指令指定的寄存器及DS寄存器种。
         (reg16)<-(mem)
         (DS)<-((mem)+2)
例如:LDS  SI,[0010H]
     设(DS) = 0C000H
      指令执行后:
      (SI) = 0180H
      (DS) = 2000H

在这里插入图片描述

4、标志传送指令
8086有四条标志传送指令:

(1)LAHF (Load AH into flags)

格式:LAHF  ;
功能:标志寄存器低八位 ->(AH)
          (AH)<-(PSW的低字节)

在这里插入图片描述
(2)SAHF(Store AH into Flags)

格式:SAHF
功能:(AH)送标志寄存器低八位。
     (PSW的低字节)<-(AH)

(3)PUSHF(Push Flags)

格式:PUSHF  ;
功能:  标志进栈。
     (SP)<-(SP)-2
     ((SP)+1,(SP))<-(PSW)

(4)POPF(Pop Flags)

格式:POPF;
功能:标志出栈。
      (PSW)<-((SP)+1,(SP))
      (SP)<-(SP)+2
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值