微型计算机原理与接口技术——8086指令系统之数据传送指令

前言

本篇文章正式进入汇编语言,下面是要用到的一些符号:

  • OPRD:泛指各种类型的操作数
  • mem:存储器操作数
  • acc:累加器操作数
  • dest:目标操作数
  • src:源操作数
  • disp:8位或16位偏移量,可用符号地址表示
  • DATA:8位或16位立即数
  • port:输入输出端口,可用数字或表达式表示
  • [ ]:表示存储器操作数,方括号中的内容表示数据的偏移地址

数据传送指令是实际程序中使用最为频繁的一类指令,因为无论什么样的程序都需要将原始数据、中间运算结果、最终结果及其他信息在CPU的寄存器和存储器之间进行传送。

绝大多数数据传送指令都不会对状态寄存器FLAGS产生影响。

数据传送指令按功能可分为四小类:

  1. 通用数据传送指令
  2. 目标地址传送指令
  3. 标志传送指令
  4. 输入输出指令

1.通用数据传送指令

通用数据传送指令包括一般传送指令MOV、堆栈操作指令PUSH和POP、交换指令XCHG、查表转换指令XLAT和字位拓展指令。

该类指令的执行对标志位不产生影响

一般传送指令MOV

指令格式

MOV dest,src

  • 两操作数字长必须相同;
  • 两操作数不允许同时为存储器操作数;
  • 两操作数不允许同时为段寄存器;
  • 在源操作数是立即数时,目标操作数不能是段寄存器;

指令功能

这里的dest表示目标操作数,src表示源操作数。

指令的功能是将一个操作数从源地址传送到目标地址,而源地址中的数据保持不变。

也就是说,MOV指令实际上是完成了一次数据的复制。

MOV指令可实现以下各种传送

在这里插入图片描述
注:

  • reg:寄存器
  • mem:存储器
  • sreg :段寄存器
  • data :8或16立即数

堆栈操作指令PUSH和POP

堆栈是内存中一个特定的区域,用以存放寄存器或存储器中暂时不用又必须保存的数据。
在这里插入图片描述

在程序中,堆栈主要应用于子程序调用、中断响应等操作时的参数保护,也可用于实现参数传递。

压栈指令 PUSH

指令格式

格式: PUSH src

执行过程

在压入操作数之前,堆栈指针SP先减2:
在这里插入图片描述
在这里插入图片描述

出栈指令 POP

指令格式

格式: POP dest

执行过程

在这里插入图片描述
在这里插入图片描述

交换指令XCHG

指令格式

XCHG OPRD1,OPRD2

需要注意的是:

  • 操作数可以是寄存器数或存储器数(但不能同时是存储器数,即必须有一个是寄存器数)
  • 不允许使用段寄存器
  • 两个操作数字长必须相同,可以字节/字交换
指令功能

交换指令的操作是将源地址与目标地址中的内容进行互换,即将源操作数送到目标操作数,同时将目标操作数传送到源操作数。

查表转换指令 XLAT

XLAT是一条字节的查表转换指令,可用根据表中元素的序号查出表中相应元素的内容

指令格式

XLAT ;AL <~ [BX+AL]

指令功能

将BX+AL所指单元的内容送AL(1个字节)

在这里插入图片描述

在这里插入图片描述

2.输入输出指令

输入输出(I/O)指令是专门面向输入输出端口进行读写的指令,共有两条,分别是IN和OUT。

指令格式

在这里插入图片描述

指令寻址方式

根据端口地址码的长度,指令具有两种不同的端口地址表现形式。

直接寻址

  • 端口地址为8位时,指令中直接给出8位端口地址;
  • 寻址256个端口。

间接寻址

  • 端口地址为16位时,指令中的端口地址必须由DX指定
  • 可寻址64K个端口。

3.取偏移地址指令

指令格式

LEA REG,MEM

源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。

指令功能

将存储器操作数的16位偏移地址取出送目标寄存器

当程序中用符号地址表示内存偏移地址时,须使用该指令。

LEA与MOV的对比

在这里插入图片描述

4.其他传送指令

字节到字的扩展指令

指令格式

CBW

指令操作

将AL内容扩展到AX

指令规则

  • 若AL最高位=1,则执行后AH=FFH
  • 若AL最高位=0,则执行后AH=00H

字到双字的扩展指令

指令格式

CWD

指令操作

将AX内容扩展到DX AX

指令规则

  • 若AX最高位=1,则执行后DX=FFFFH
  • 若AX最高位=0,则执行后DX=0000H

取远地址指针指令

LDS

指令格式

LDS reg,MEM32

指令功能

将内存中连续4个字节内容送到DS和寄存器reg中。

在这里插入图片描述

LES

指令格式

LES reg,MEM32

指令功能

将内存中连续4个字节内容送到ES和寄存器reg中。

在这里插入图片描述

标志位操作指令

在这里插入图片描述

LAHF,SAHF

在这里插入图片描述

PUSHF,POPF

针对FLAGS的堆栈操作指令

将标志寄存器压栈或从堆栈弹出

总结与升华

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.郑先生_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值