数据传送(Data Transfer)类指令是指令系统中用的最多的一类指令,也是条数最多的一类指令,常用于将原始数据、中间运算结果、最终结果及其它信息在CPU(中央处理器)的寄存器和存储器之间进行传送。

数据传输指令分类

指令格式

一、通用数据传送指令 MOV

通用数据传送指令(General Purpose Transfer)是所有指令中最基本、最重要的一类,在实际应用程序中,它的使用率也是最高的。
指令格式:MOV dst,src
执行操作:(dst) <—— (src)
标志位:不影响

该指令把源操作数 src 传送给目的操作数 dst,指令执行后源操作数不变,目的操作数被源操作数所替换。传送指令每次可以传送一字节或一个字,它可以实现 CPU 的内部寄存器之间的数据传送、寄存器和内存之间的的数据传送,还可以将立即数送给内存单元或 CPU 内部的寄存器。

MOV 指令的搭配共有 7 种方式(书上)

MOV reg, data/reg/segreg/mem
MOV segreg, reg
MOV mem, reg/data

MOV 指令的搭配共有 9 种方式(讲解)

(1)从累加器到存储器
MOV  [1234H],AX
(2)从存储器到累加器
MOV  AX,[1234H]
MOV AX,ES:[BX][SI]
(3)从存储器或寄存器送段寄存器
MOV  DS,DX
MOV  ES,SS:[BX]
注意:CS不作目的操作数!
(4)从段寄存器送存储器或寄存器
MOV  BX,ES
MOV  AX,CS
(5)从寄存器送寄存器
MOV  AX,BX
MOV  DI,DX
注意:两个寄存器之间传输数据必须宽度相同!
(6)从寄存器送存储器
MOV  [SI],DI
MOV  ES:[BP][SI],DX
(7)从存储器送寄存器
MOV  DX,ES:[BX][SI]
MOV  CX,[BX]
(8)立即数送寄存器
MOV  DX,2847
MOV  BX,OFFSET  TABLE
(9)立即数送存储器
MOV  BYTE PTR MEM,30H
注意:
立即数送存储器时,必须说明存储器的操作类型。
可以用BYTE PTR或WORD PTR说明是字节操作还是字操作。

注意:

  1. 立即数只能作为源操作数,不能作为目的操作数。
  2. 立即数不能直接传送到段寄存器,但可以通过通用寄存器传送。
  3. MOV 指令的两个操作类型必须相同,即两个操作数的位数相同。
  4. CPU 中的寄存器除 IP 外,都可以通过 MOV 指令访问。
  5. CS 只能作为源操作数,不能直接作为目的操作数。
  6. 段寄存器之间不能直接传送数据,两个内存单元之间不能直接传送。

二、交换指令 XCHG

指令格式:XCHG dst, src
执行操作:(dst)<——>(src)
标志位:不影响
该指令把源操作数和目的操作数进行交换。该指令可以实现字节交换,也可以实现子交换,可以实现数据在 CPU 的内部寄存器之间进行交换,也可以实现数据在CPU内部寄存器和存储单元之间进行交换。
XCHG格式:

XCHG reg, reg/mem
XCHG mem, reg

例如:

XCHG   AX,BX
XCHG   AL,BH
XCHG   BX,[1000H]
XCHG   [2100H],DH
XCHG   SI,AX

注意:

  1. 源操作数与目的操作数不能同时为内容单元。
  2. 不能使用 CS、IP 作为操作数。
  3. XCHG 指令不影响标志位。

三、堆操作指令 PUSH 和 POP

1、入栈指令 PUSH
指令格式:PUSH src
执行操作:(SP)<——(SP)-2; ((SP))<——(src)L; ((SP)+1)<——(src)H
标志位:不影响
该指令首先使SP的内容减2,再将 src 推入堆栈。src可以为16位寄存器数或16位存储器数。
入栈指令格式:

PUSH mem16/reg16/segreg

2、出栈指令 POP
指令格式:POP dst
执行操作:(dst)L<——((SP)); (dst)H<——((SP)+1); (SP)<——(SP)+2
标志位:不影响
该指令首先使栈顶内容弹出到目的操作数 dst,再使SP的内容加2。dst 可以为16位寄存器数或16位存储器数。
出栈指令格式:

POP mem16/reg16/segreg


注意:

  1. 8086的堆栈操作都是字(16位)操作。
  2. 堆栈指令的操作数只能是存储器和寄存器操作数,而不能是立即数。
  3. 堆栈指令中堆栈指针SP是隐藏的操作数。
  4. 入栈时“先减后压”(SP先减2,再压入操作数),出栈时“先弹后加”(弹出操作数,SP加2)。
  5. CS寄存器可以入栈PUSH,但是不能出栈POP。因为POP CS会改变代码段寄存器CS的内容。

四、累加器专用传送指令XLAT、IN、OUT

1、XLAT(换码指令、查表指令)
指令格式:XLAT
执行操作:(AL)<——((BX)+(AL))
标志位:不影响
该指令通过 AL 和 BX 寄存器进行表格查找,即将累加器 AL 中的一字节转换为内存表格中的数据,表格的偏移地址有 BX 和 AL内容之和确定。

2、输入指令IN
指令格式:IN AL/AX, port
执行操作:(AL)/(AX)<——(port)
标志位:不影响
数据输入指令,即将一个字节或一个字从输入端口传送到AL或AX寄存器。

3、输出指令OUT
指令格式:OUT port,AL/AX
执行操作:(port)<——(AL)/(AX)
标志位:不影响
数据输出指令,即将AL或AX寄存器中的一个字节或一个字传送到输出端口。

注意:

  1. 8086系统的 I/O指令有两种寻址方式:(a)直接寻址,00H—FFH;(b)寄存器间接寻址,FFH—FFFFH,端口地址由 DX 寄存器进行数据传送。
  2. 只能用累加器 AL/AX 与I/O 端口进行数据传送。

五、地址传送指令LEA、LDS、LES

1、取有效地址指令LEA(Load Effective Address)
指令格式:LEA reg16, mem
执行操作:(reg16)<——offset mem
标志位:不影响
注释:该指令把存储单元内容的有效地址送到指定的寄存器中。
MEM必须是各种寻址方式的存储器操作数;
REG必须是16位的寄存器。
用途:用一个寄存器作内存单元的地址指针。

2、全指针地址传送指令LDS(Load pointer with DS)
指令格式:LDS reg16, mem32
执行操作:(reg16)<——(mem32)、DS<——(mem32)+2
标志位:不影响
注释:该指令把MEM指出的前两个存储单元的内容送入REG中,后两个存储单元的内容送入DS中。
MEM表示双字(四个字节)的各种寻址方式的存储器操作数的首地址。
REG必须是16位的寄存器,但不能是段寄存器。

3、全指针地址传送指令LES(Load pointer with ES)
指令格式:LES reg16, mem32
执行操作:(reg16)<——(mem32)、ES<——(mem32)+2
标志位:不影响
注释:该指令与LDS大致相同,不同之处是以ES代替DS。
通常:指定REG为DI寄存器。

六、标志寄存器传送指令LAHF、SAHF、PUSHF、POPF

1、LAHF(Load AH with Flags)标志位送AH
格式:LAHF
执行的操作:AH ← Flag/PSW的低位字节

2、SAHF(Store AH into Flags) AH送标志寄存器
格式:SAHF
执行的操作: Flag/PSW的低位字节 ← AH

3、PUSHF(Push the Flags) 标志进栈
格式:PUSHF
执行的操作:
(SP)<——(SP)-2; ((SP))<——(FLAG)L; ((SP)+1)<——(FLAG)H

4、POPF(Pop the Flags) 标志出栈
格式:POPF
执行的操作:
(FLAG)L<——((SP)); (FLAG)H<——((SP)+1); (SP)<——(SP)+2

PUSHF 指令和 POP 指令分别起保护标志和恢复标志的作用。

8086CPU指令系统——数据传送类指令相关推荐

  1. 汇编语言数据传送指令之通用数据传送类指令

    文章目录 1.通用数据传送类指令 1. 1)Mov reg/mem,imm//立即数传送 1. 2)Mov reg/mem/seg,reg//寄存器传送] 1. 3)Mov reg/seg,mem// ...

  2. 【汇编语言】通用数据处理指令——数据传送类指令

    通用数据处理指令--数据传送类指令 文章目录 通用数据处理指令--数据传送类指令 一.MOV指令 1.数据长度 2.传送方式 3.常见错误 二.XCHG指令 1.数据长度 2.空操作指令NOP(no- ...

  3. 数据传送类指令(PUSH,POP,LEA)

    目录 数据传送类指令 堆栈的概念: 进栈指令 (PUSH) 出栈指令(POP) 练习 LEA取偏移地址(有效地址EA)指令(去括号) LEA和OFFSET区别: 用法注意 LEA和MOV指令的比较 数 ...

  4. 数据传送类指令LAD的数据传送方向是( )。 A 从寄存器到内存 B 从寄存器到寄存器 C 从内存到内存 D 从内存到寄存器...

    LAD (Load Effective Address) 是一种数据传送类指令,它的数据传送方向是从内存到寄存器.因此答案是 D 从内存到寄存器. LAD 指令用于将某个内存地址中的值加载到寄存器中. ...

  5. 《计算机组成原理》数据传送类指令不包括( ),兰大《计算机组成原理》20秋平时作业1【标准答案】...

    可做奥鹏全部院校作业论文!答案请添加qq:599792222 或 微信:1095258436 <计算机组成原理>20秋平时作业1 1.[单选题] CRT的分辨率为1024×1024像素,像 ...

  6. 8086CPU指令系统——控制转移类指令

    控制转移(Control Jump)类指令用于改变程序的执行顺序. 8086提供了以下控制转移指令: 调用与返回指令.无条件转移指令.条件转移指令.循环控制指令.中断指令. 一.调用与返回指令 调用指 ...

  7. 8086指令系统 操作数地址,双操作数,单操作数,无操作数指令。一,传送类指令;二,二、算数运算类指令

    双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR 按指令功能划分为六大类: 1传送类指令 2算术运算类指令 3位操作类指令 4串操作类指令 5程序转移类指令 ...

  8. MCS-51单片机指令系统--数据传送指令

    按指令的功能,MCS-51单片机可以分为以下五类: 1,数据传送 2,算术运算 3,逻辑运算 4,控制转移 5,位操作 在分类介绍指令之前,先把描述指令的以一些符号的意义作简单的介绍. Rn----当 ...

  9. 微机原理——指令系统——传送类指令(MOV、LEA、LDS、LES、LAHF、SAHF、XCHG、XLAT、PUSH、POP、PUSHF、POPF)

    博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. [没事儿可以到我主页看看 ...

最新文章

  1. 这个播放量200万的视频燃爆了!它讲透了:希尔伯特计划是如何被哥德尔与图灵“打脸”的?...
  2. VITIS 2019.2使用非正式测评
  3. ngx_pagespeed加速nginx
  4. java 最小堆_Java最小堆实现
  5. Enums and Structs in C#(C#里的枚举和结构) (from codeproject)
  6. Java 7 vs Groovy 2.1性能比较
  7. C++ 基类和派生类的析构函数
  8. mallcloud商城基于SpringBoot2.x
  9. 响应在此上下文中不可用
  10. 美国最受欢迎的电商网站,竟然是一家中国公司?
  11. Mac访达搜索找不到对应文件的解决方法
  12. 关于CASS点自动连线方法
  13. python while循环的用法_Python while循环语句详解
  14. MC9S12XS128 事件处理
  15. 【Chapter 1】架构的结构
  16. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线
  17. cf卡格式化后还能数据恢复么?相机cf卡误删怎么恢复
  18. 家庭小庭院设计的19种要素
  19. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(一):图像分类笔记(下)
  20. Centos7扩容根目录

热门文章

  1. CS-major日常问题归总(持续更新)
  2. python 拼接数字和字符串_Python字符串拼接(包含字符串拼接数字)
  3. 生活中的数学问题(二)
  4. C语言中while循环我爱你十次案例
  5. Redshift 简介
  6. HDU 2448 Mining Station on the Sea
  7. Visual Studio Code 配置 Python开发环境
  8. 高等数学 多元函数微分学 知识技巧思维导图 [21考研上岸之旅]
  9. UE4命令行使用,解释
  10. TencentTbs腾讯浏览服务 x5内核使用