DJ12-1 8086系列指令系统-2 数据传送指令

news2024/11/23 17:07:53

目录

1. 通用数据传送指令

(1)MOV 一般数据传送指令

(2)堆栈操作指令

(3)XCHG 交换指令

(4)XLAT 查表指令

(5)CBW 和 CWD 字位扩展指令

2. 输入输出指令

3. LEA 取偏移地址指令

4. 其它传送类指令

(1)LDS 和 LES 装入地址指针指令

(2)标志传送指令


 

符号说明:

Acc 隐含规定使用 AL、AX(一般不用 AH)。

 

数据传送指令按功能可以分为:通用数据传送指令、输入输出指令、目的地址传送指令、标志传送指令。

FLAGS 不能作操作数。

虽然不能直接对其进行操作,但是可以间接对其进行操作。

SAHF 把 AH 写入 FLAGS,CAHF 把 FLAGS 写入 AH 。

1. 通用数据传送指令

(1)MOV 一般数据传送指令

格式:MOV  Dest,Src

执行:Src → Dest

举例:MOV  AL,BL

 


对操作数的要求:

① 两操作数长度必须相同;

MOV AX,BL(×)

MOV AX,09H(√)

在可识别的情况下,编译器会自动把 09H 转换为 0009H。实际上还是满足要求的。

MOV AX,[SI]

根据 AX 是 16 位,会从 M 取出 16 位。

② 存储单元之间不能直接传送;

③ 段寄存器 CS 只能作源操作数,段寄存器之间不能直接传送;

④ 当源操作数是立即数时,目的操作数不能是段寄存器;

MOV  DS,1000H(×)应该修正为:

MOV  DX,1000H

MOV  DS,DX

⑤ FLAGS 一般不作为操作数在指令中出现。

 (重点背记)MOV 传送指令的操作数:


 


例、将 * 的 ASCII 码 2AH 送入内存数据段 1010H 开始的 100 个单元中。

CX 作计数器。


 

(2)堆栈操作指令

压栈指令格式:PUSH OPRD

出栈指令格式:POP OPRD

要求:

① 指令的操作数必须是 16 位。

② 操作数可以是寄存器或存储器字单元,但不能是立即数。

这里的寄存器包括段寄存器和通用寄存器。

因为立即数无法作目的操作数,所以不适用于单操作数指令。

③ 不能从栈顶弹出一个字给 CS。

原则上只有 MOV 中可以使用 CS,其它的都不让用。

④ PUSH 和 POP 指令在程序中一般成对出现。

⑤ PUSH 指令的操作方向是从高地址向低地址,而 POP 指令的操作正好相反。


PUSH 指令执行过程:


POP 指令执行过程: 


PUSH 和 POP 指令在程序中一般成对出现,但有时候我们故意不按顺序,以实现交换的效果。


(3)XCHG 交换指令

格式:XCHG OPRD1,OPRD2

执行:OPRD1 ←→ OPRD2

效果:交换源地址中的内容和目的地址中的内容。

要求:

  • 操作数中至少有一个是通用寄存器,即不能同时为存储器。
  • 段寄存器不能作操作数。(段寄存器主要适用于一般传送和堆栈操作)
  • 两个操作数的字长必须相同。

举例:

        XCHG AX,BX

        XCHG [2000],CL

(4)XLAT 查表指令

格式:XLAT

执行:[ BX + AL ] → AL

特点:

  • 指令为零操作数指令,采用隐含寻址。
  • BX 的内容为表格首地址,AL 的内容为表内位移量,  BX + AL 得到要查找元素的偏移地址。
  • 表格的最大长度不超过 256 字节

例题、假设数据段中存放有一张 ASCII 码转换表,若首地址为 2000H,现欲查出表中第 11 个代码的 ASCII 码。

 

(5)CBW 和 CWD 字位扩展指令

将带符号数的符号位扩展到高位。

注:默认将无符号数和带符号数一概视为带符号数。

指令为零操作数指令,采用隐含寻址,隐含的操作数为 AX 或 AX+DX。

① CBW

将 AL 的符号位扩展到 AH。

若 AL 的最高位 = 1,则执行后 AH = 0FFH;

若 AL 的最高位 = 0,则执行后 AH = 00H。

② CWD

将 AX 的符号位扩展到 DX。

若 AX 的最高位 = 1,则执行后 DX = 0FFFFH;

若 AX 的最高位 = 0,则执行后 DX = 0000H。

例题、判断下列指令的执行结果。

2. 输入输出指令

专门面向 I/O 端口操作的指令。

格式:

  • 输入指令:IN  Acc,Port
  • 输出指令:OUT  Port,Acc

Port 为端口地址,Acc 为累加器 AL 或 AX。

若端口号为 0 ~ 0FFH,那么我们可以直接使用端口号;否则,需要把端口号送入 DX,以 DX 内容去访问端口。

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

① 直接寻址

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

② 间接寻址

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

举例:

IN  AX,80H

MOV DX,2400H

IN  AL,DX

OUT  35H,AX

OUT  DX,AX

 

3. LEA 取偏移地址指令

格式:LEA  Reg16,Mem

LOAD EA,这里的 EA 指偏移地址。

效果:LEA 指令将存储器操作数的 16 位偏移地址送到指定的通用寄存器。

要求:

  • 源操作数必须是存储器操作数;
  • 目标操作数必须是 16 位通用寄存器,而且最好是间址寄存器。

例题、

 

4. 其它传送类指令

(1)LDS 和 LES 装入地址指针指令

格式:

  • LDS  Reg16,Mem32
  • LES  Reg16,Mem32

要求:REG16 任意一个 16 位通用寄存器,Mem32 必须是一个存储器操作数。

作用:

  • 把 Mem32 存储单元开始的 4 个字节单元的内容送入通用寄存器和段寄存器 DS(LDS指令)或ES(LES指令)。
  • 低字单元内容为偏移量送通用寄存器,高字单元内容为段基值送 DS 或 ES。

 

(2)标志传送指令

(1)LAHF:将 FLAGS 低 8 位的内容装入 AH。

(2)SAHF:将 AH 的内容送给 FLAGS 的低 8 位。

(3)PUSHF:将 FLAGS 的内容压栈保存。

(4)POPF:将当前的栈顶内容送给 FLAGS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8点FFT实现全教程

个人认为编写8点FFT的编写,不要过分关注理论,重要的是理解整个流程。 参考文章: matlab 8点fft蝶形图,基2时抽8点FFT的matlab实现流程及FFT的内部机理_罗漫的博客-CSDN博客前言本来想用verilog描述FFT算法,虽然是8点的FFT算法,但写出来的资源用量及时延也不比调用FFT IP…

【第五部分 | JS WebAPI】5:1W字详解Bom对象

目录 | Bom概述 | window 、Bom、Dom 的关系 | window的load事件:把JS写进head里 如何把 JS 代码写到head里(页面加载事件 onload) 比onload更高效的加载事件 DOMContentLoaded | window的resize事件(窗口大小改变的时候触发…

vue移动端高德地图的使用及实现最简单的地图功能

目录 一、创建应用获取key 1、进入开放平台,按步骤注册成为开发者 2、 登录之后,点击头像,进入「应用管理」 页面「创建新应用」 3、 为应用添加 Key 二、配置 1、在public下的index.html中添加 2、 JSAPI key和安全密钥的使用 方式一…

论文阅读09——《Deep Fusion Clustering Network》

论文阅读09——《Deep Fusion Clustering Network》 原文链接:论文阅读09——《Deep Fusion Clustering Network》 作者:Wenxuan Tu, Sihang Zhou, Xinwang Liu, Xifeng Guo, Zhiping Cai, En zhu, Jieren Cheng 发表时间:2021年5月18日 论文…

Java基础五大机制 —— SPI机制基础(一)

1、什么是SPI机制 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可…

Fast-DDS库的安装教程

Fast-DDS库的安装教程0 序言1 安装依赖2 安装Fast-DDS2.1 编译foonathan_memory_vendor2.2 编译Fast-CDR2.3 编译Fast-DDS2.4 编译Fast-DDS-Gen2.5 添加环境变量2.6 验证3 参考资料4 写在最后工欲善其事,必先利其器。首先要知道 Fast-DDS是什么?要知道 Fast-DDS是什…

wy的leetcode刷题记录_Day48

wy的leetcode刷题记录_Day48 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间:2022-11-21 前言 补前几天的blog 目录wy的leetcode刷题记录_Day48声明前言808. 分汤题目介绍思路代码收获654. 最大二叉树题目介绍思路代码收获808. 分汤 今…

Boc-QAR-AMC,CAS号:201849-55-0/113866-20-9

胰蛋白酶的高反应性底物,前列腺素和matriptase的荧关底物 编号: 199467中文名称: 标记肽Boc-QAR-7-氨基-4-甲基香豆素.HCl英文名: Boc-Gln-Ala-Arg-AMCCAS号: 201849-55-0/113866-20-9单字母: Boc-QAR-AMC三字母: Boc-Gln-Ala-Arg-AMC氨基酸个数: 3分子式: C29H42O8…

低代码维格云常用组件入门教程

1. 维格云常用组件功能简介 工作区的成员可以根据自己的业务习惯,将工作区内的应用、门户添加到常用组件。添加后成员可以直接从门户的常用组件中操作相应的应用、门户 2. 维格云常用组件配置方式 2.1 添加常用组件 在门户中拖拽或点击添加常用组件2.2 设置组件标题 在右侧编…

中学化学教学参考杂志社中学化学教学参考编辑部2022年第15期目录

刊庆专稿 试论“文化化学”教学思想的实践意义与样态 刘英琦; 1-4 课改在线《中学化学教学参考》投稿:cn7kantougao163.com 凝练观念 重构实践 引领评价——谈《义务教育化学课程标准(2022年版)》的修订 周青; 4-6 领悟化学课程的育人标准——基于《义务…

阿里、字节等神创,必须是全网最全的Netty核心原理手册

时间飞逝,转眼间毕业七年多,从事 Java 开发也六年了。我在想,也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

这篇文章,主要介绍SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档 1.4、查询文档 1.5、判断文档是否存在 1.6、批量创建文档 一、Spr…

高手系列!数据科学家私藏pandas高阶用法大全 ⛵

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 本文地址:https://www.showmeai.tech/article-detail/394 📢 声明:版权所有,转…

CubeMX+VSCode+Ozone的STM32开发工作流(二)VSCode环境配置

neozng1hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架,你可以直接克隆仓库,阅读仓库下的Markdown文档获得更好的体验,记得点一个小⭐: basic_framework: basic_framework (gitee.com)所有安装包也可以…

OceanBase TableAPI实践案例(Rust)

引子 这是OceanBase TableAPI实践案例(Java)的姊妹篇,上一篇比较全面的比较全面的介绍了TableAPI的相关概念,以及基本的环境搭建,因此这篇不再赘述。本文将主要介绍TableAPI的Rust客户端obkv-table-client-rs &#x…

Visio画图更改连接线的弧形和调整跨线

目录前言准备参考问题解决问题一解决问题二前言 最近在使用Visio画图时,出现了一些问题,于是上网查了一下,将方法记录下来。 准备 Visio2021 参考 Visio中,如何修改连接线的跨线样式? 问题 (1) 使用连接线的时候…

【微信小程序】使用 Cryptojs 解密微信绑定手机号码

很抱歉断更了一段时间,因为最近在做一个项目比较忙,正好项目中小程序板块需要解密手机号码来提交给接口,小程序中虽然提供了获取手机号按钮点击事件:bindgetphonenumber,但是该事件的处理函数中只能获取到加密过的手机…

新力量,新希望|明道云伙伴大会2022秋圆满落幕

2022年10月28日至29日,明道云伙伴大会(2022年秋)在上海顺利举办。来自北京大兴国际机场、广汽本田、京东方、天津钢管、深圳龙华区卫健局、可口可乐、山东移动、浙江移动、上海电气数科、金科信息、艾默生电气等超过五百位参会者同台交流。行…

工业物联网的数据集成

随着网关技术的不断发展,创新、高效的软件解决方案及IT架构在工业物联网系统架构中将发挥着更为重要的作用。其中,工业物联网集成工业数据的一个关键问题在于如何利用软件、IT和创新算法来部署网络解决方案,从而使得生产效率更高。 &#xff…

Java中 this 和 super 的用法与区别

在Java的学习与开发者我们经常遇到this和super关键字,那么它们的用法和区别是什么呢? 一、this关键字 1.this是什么? this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。 2.this…