通用数据处理指令——数据传送类指令

文章目录

  • 通用数据处理指令——数据传送类指令
    • 一、MOV指令
      • 1.数据长度
      • 2.传送方式
      • 3.常见错误
    • 二、XCHG指令
      • 1.数据长度
      • 2.空操作指令NOP(no-operation)
    • 三、LEA指令
      • 1.LEA与OFFSET的作用
      • 2.地址传送程序
      • 3.用LEA指令实现运算功能
  • 数据传送
    ►把数据从一个位置传送到另一个位置
    ►计算机中最基本的操作
    ►程序设计中最常使用的指令
  • 除标志寄存器传送指令外,均不影响状态标志

一、MOV指令

把一个字节、字或双字的操作数从源位置传送至目的位置。

MOV reg/mem,imm
MOV reg/mem/seg,reg
MOV reg/seg,mem
MOV r16/m16,seg

1.数据长度

  • 8位(字节)数据,byte类型

    mov al,200
    
  • 16位(字)数据,word类型

    mov ax,[ebx]
    
  • 32位(双字)数据,dword类型

    mov eax,dvar
    

2.传送方式

立即数传送:

MOV reg/mem,imm
  • 寄存器reg为目的操作数

    mov al,200
    

    ;8位立即数i8

    mov ax,200
    

    ;16位立即数i16

    mov eax,200
    

    ;32位立即数i32

寄存器传送:

MOV reg/mem/seg,reg
  • 寄存器reg为目的操作数

    mov al,ah
    

    ;8位通用寄存器r8

    mov ax,bx
    

    ;16位通用寄存器r16

    mov eax,edx
    

    ;32位通用寄存器r32

  • 存储器mem为目的操作数

    mov bvar,cl
    

    ;8位通用寄存器r8

    mov [ebx],cx
    

    ;16位通用寄存器r16

    mov [esi+8],edi
    

    ;32位通用寄存器r32

  • 段寄存器seg为目的操作数

    mov ds,bx
    

存储器传送:

MOV reg/seg,mem
  • 寄存器reg为目的操作数

    mov dl,bvar
    

    ;8位储存器m8

    mov dx,[ebx]
    

    ;16位存储器m16

    mov edx,dvar[edi]
    

    ;32位存储器m32

  • 段寄存器seg为目的操作数

    mov ds,wvar
    

    ;16位存储器m16

    mov es,[ebx]
    

    ;16位存储器m16

    mov ss,[ebp+8]
    

    ;16位存储器m16

(16位)段寄存器传送:

MOV r16/m16,seg
  • 寄存器r16为目的操作数

    mov ax,ds
    mov dx,es
    mov si,fs
    mov di,gs
    
  • 存储器m16为目的操作数

    mov wvar,ds
    mov [ebx],ss
    mov [esi-8],cs
    mov [ebp+8],cs
    

3.常见错误

  • 注意1:双操作数必须类型一致

    MOV ESI,DL
    

    ;错误:类型不一致
    ;ESI为32位寄存器,DL为8位寄存器

    mov esi,edx
    

    ;正确:两个32位寄存器传送

    MOV AL,050AH
    

    ;错误:类型不一致
    ;050AH超过了寄存器AL范围

    mov eax,050ah
    

    ;正确:双字量数据传送

  • 注意2:操作数必须有明确的类型

    MOV [EBX+4],200
    

    ;错误:无明确类型

    mov byte ptr [ebx+4],200
    

    ;正确:BYTE PTR说明是字节操作

    mov wvar[esi],200
    

    ;正确:字变量WVAR说明是字操作

    mov dvar[edi*4],200
    

    ;正确:双字变量DVAR说明是双字操作

    无变量名的寄存器相对和变址寻址无明确类型

  • 注意3:双操作数不允许都是主存单元

    MOV DBUF2,DBUF1
    

    ;假设dbuf1和dbuf2是两个双字变量
    ;错误:两个操作数都是存储单元

    mov eax,dbuf1
    

    ;正确:EAX=DBUF1(将DBUF1内容送EAX)

    mov dbuf2,eax
    

    ;正确:DBUF2=EAX(将EAX内容送DBUF2)

  • 注意4:不可随意操作专用寄存器

    MOV DS,@DATA
    

    ;错误:立即数不能直接传送段寄存器
    (@DATA是数据段地址)

    mov ax,@data
    

    ;正确:立即数传送给AX

    mov ds,ax
    

    ;正确:通过AX间接传送给DS

    MOV EIP,EAX
    

    ;错误:没有显式操作指令指针寄存器EIP的指令

二、XCHG指令

将源操作数和目的操作数内容交换

XCHG reg,reg/mem
XCHG reg/mem,reg

►通用寄存器与通用寄存器之间
►通用寄存器或存储器之间

1.数据长度

32位数据交换

xchg esi,edi
xchg esi,[edi]

16位数据交换

xchg si,di
xchg si,[edi]

8位数据交换

xchg bl,bh
xchg al,bvar

2.空操作指令NOP(no-operation)

空操作指令是一条不做实质操作的指令(交换指令的一个特例)

NOP = XCHG EAX, EAX

一个字节的指令代码;90H

  • 处理器执行需要化费时间,占用一个字节存储空间
  • 所以,具有实际意义:
    ►实现短时间延时
    ►临时占用代码空间

三、LEA指令

地址传送指令获取存储器操作数的地址

LEA r16/r32,mem
  • r16/r32←mem的有效地址EA(不需类型一致)
  • IA-32使用32位地址,保存于32位通用寄存器r32

1.LEA与OFFSET的作用

  • LEA指令在指令执行时计算出偏移地址
    ►OFFSET操作符在汇编阶段取得变量的偏移地址

    lea edi, var
    
  • OFFSET无需在执行时计算、指令执行速度更快
    ►LEA指令能获取汇编阶段无法确定的偏移地址

    mov edi, offset var
    

2.地址传送程序

mov eax,dvar
lea esi,dvar
mov ebx,[esi]
mov edi,offset dvar
mov ecx,[edi]

3.用LEA指令实现运算功能

lea edx,[esi+edi*4+100h]

EDX=ESI+EDI×4+100H

  • LEA指令在计算地址时,可进行加和移位操作
    ►编译器将其用于实现加法,或者乘以2、4和8
  • 不能用OFFSET操作符实现
    mov edx, offset [esi+edi*4+100h];错误

【汇编语言】通用数据处理指令——数据传送类指令相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. verilog实现多周期处理器之——(五)移动操作(通用数据传送)指令的实现

    本文参考作者 自己动手写CPU之第六阶段(1)--移动操作指令说明 自己动手写CPU之第六阶段(2)--移动操作指令实现思路 本文会添加笔者自己的思路以及理解在其中. 指令说明 这6条指令都是R类型指 ...

  9. 总结:常用的通用数据处理指令

    作者:bakari  时间:2012.4.21 1. 操作数类型 Imm立即操作数 Reg寄存器操作数 Mem内存操作数 2. 操作数寻址方式 立即数寻址 寄存器数寻址 存储器寻址 3. 数据传送类指 ...

最新文章

  1. Struts2中action获取request、response、session的方式
  2. Python使用xlrd和xlwt读取和写入excel详细教程
  3. 公钥私钥 多久过期_上传到公钥服务器的gpg公钥过期了会被删除吗?
  4. Mongodb自带工具
  5. 新冠患者样本单细胞测序文献汇总
  6. 大话存储pdf 百度网盘_学用系列|亲身体验百度网盘内测在线文档,有遗憾也有期待...
  7. 后缀自动机(学习笔记)
  8. Java 学习经验[转]
  9. SaaS应用架构师所面临的最大挑战
  10. java备份_手把手教你实现Java权限管理系统 后端篇(十三):系统备份还原
  11. 20200718每日一句
  12. 网站采集工具免费采集发布网站后台
  13. 小红帽免费酒店管理系统PMS
  14. QT 录制音频(麦克风、系统)
  15. python可以开发软件_python可以开发软件吗
  16. 独立站运营 | 聊天聚合部件,助你提升100%私域转化率
  17. Spring-@Bean
  18. 【vue打包】线上部署报错net::ERR_ABORTED 404 (Not Found)
  19. 易语云模块-易语言邮件发送模块下载(含命令详解)
  20. 博士生在校没药吃,父亲寄6斤布洛芬引热议!最新回应

热门文章

  1. d3d 渲染遇到的几个问题
  2. 杭电2103---Family planning
  3. linux的python2.7的paramiko_centos7 python2.7下安装paramiko模块
  4. word 产生很多temp 不显示_word表格中文字显示到最下面的时候不自动换页-解决办法...
  5. python数组横向合并_python中合并数组的方法
  6. python读取url中存储的数据_Python实现从URL地址提取文件名的方法
  7. python分词词典_基于python的分词算法的实现(3) – 建立字典 | 学步园
  8. linux编译android源码,ubuntu16.04 Android源码下载编译
  9. ftp文件推送 linux_Linux 终端访问 FTP 及 上传下载 文件
  10. 调查问卷java源码_2020年Java技术趋势