汇编语言数据传送指令之通用数据传送类指令
文章目录
- 1、通用数据传送类指令
- 1. 1)Mov reg/mem,imm//立即数传送
- 1. 2)Mov reg/mem/seg,reg//寄存器传送]
- 1. 3)Mov reg/seg,mem//存储器传送
- 1. 4)Mov r16/m16,seg//段寄存器传送
- 2 注意问题
- 3.交换指令XCHG
- 32位数据交换。
- 16位数据交换。
- 8位数据交换。
- 交换指令示例
1、通用数据传送类指令
传送指令mov把一个字节、字或双字的操作数从源位置传送至目的位置,可实现立即数到通用寄存器或者是主存的传送,通用寄存器与通用寄存器,主存或段寄存器之间的传送,主存与段寄存器之间的传送,
1. 1)Mov reg/mem,imm//立即数传送
寄存器以reg为目的操作数
Mov al,200;8位立即数i8
Mov ax,200;16位数据传送i16
Mov eax,200;32位立即数i32
存储器以mem为目的操作数
Mov bvar,byte ptr200;8位立即数i8,bvar是byte型数据的变量
Mov [ebx],word ptr 200;16位通用通用寄存器i16
Mov [esi+8],dword ptr 200;32位通用寄存器i32
1. 2)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;位通用寄存器r8,bvar是byte型数据的变量
Mov [ebx],cx;16位通用寄存器r16
Mov [esi+8],edi;32位通用寄存器r32
段寄存器seg为目的操作数
Mov ds,bx;段寄存器是16位的,只能与16位通用寄存器r16进行数据传输
1. 3)Mov reg/seg,mem//存储器传送
寄存器reg为目的操作数
Mov dl,bvar; 8位存储器m8,bvar是byte型数据的变量
Mov dx,[ebx]; 16位存储器m16
Mov edx,dvar[edi];32位存储器32
段寄存器seg为目的操作数
Mov ds,wvar;16位存储器m16,wvar是word型变量
Mov,es,[ebx];段寄存器是16位的,只能与16位存储器进行数据传输
Mov ss,[ebp+8];虽然寻址方式使用了32位存储器,但是访问的是16存储单元
1. 4)Mov r16/m16,seg//段寄存器传送
寄存器r16为目的操作数
Mov ax,ds;mov dx,es;mov si,fs;mov di,gs;
存储器m16为目的操作数
Mov wvar,ds;wvar是word类型
Mov [ebx],ss;mov [esi+8],cs;mov[ebp+8],cs;
IA-32处理器能处理的数据类型:
8位数据byte类型mov al,200
16位数据word类型mov ax,[ebx]
32位数据dword类型mov eax,dvar
2 注意问题
2.1)IA-32指令系统可以对8位,16位,32位整数进行处理,但是双操作数指令的目的操作数与源操作数必须类型一致;
MOV ESI,DL;错误:类到不一致.ESI为32位寄存器,DL为8位寄存器
mov esi,edx;正确:两个32位寄存器传送
mov AL,050Ah;错误:类型不一致。 050AH超出了寄存器AL的范圈
mov eax,050ah;正确:双字量数据传送
2. 2) 寄存器名表达了其类型, 变量一经定义也具有类型属性, 但立即数和寄存器间接寻址的存储单元等却无明确的类型。
IA-32指令系统要求类型一致的两个操作数之一必须有明确类型,则要用PTR指明。
例如
MOV [EBX],255;错误:无明确类型
mov byte ptr[ebx],255;正确:BYTE PTR说明是字节操作
mov word ptr[ebx],255;正确:WORD PTR说明是字操作
mov dword ptr[ebx],255;正确:DWORD PTR说明是双字操作
另外, 无变量名的寄存器相对和变址寻址也无明确类型, 例如:
MOV [EBX+4],200;错误:无明确类型
mov byte ptr [ebx+4],200正:BYTEPTR说明是字节操作
mov wvar[esi],200:正确:字变量wVAR说明是字操作
mov dvar[edi* 4],200;正确:双字变量DVAR说明是双字操作
2. 3) 为了减小指令编码长度,IA-32指令系统没有设计两个存储器操作数的指令 (除串操作指令), 也就是不允许两个操作数都是存储单元
,例如:
假设DBUF1 和DBUF2 是两个双字变量
MOV DBUF2,DBUFI;错误: 两个操作数都是存储单元
mov eax,dbufl;正确:EAX=DBUF1(将DBUFl 内容送EAX)
mov dbuf2,eax;正确:DBUF2=EAX(将EAX内容送DBUF2)
- 能对专用寄存器进行操作的指令有限,功能不强, 使用时要注意
。 例如:
MOV DS,@DATA;错误:立即数不能直接传送段寄存器(@DATA是获得数据段地址)
mov ax,@data;
mov ds.ax ;正确:通过2X间接传送给DS
3.交换指令XCHG
交换指令 XCHG (Exchange) 用来交换源操作数的和目的操作数的内容, 可以在通用寄存器与通用寄存器或存储器之间对换数据。使用操作数符号的合法格式如下:
XCHG reg,reg/mem
XCHG reg/mem,reg
交换指令的两个操作数实现位置互换,实际上既是源提作数也是目的操作数, 所以它们哪个在前哪个在后就无所谓了,但不能是立即数,也不支持存储器与存储器之间的数据对换。
与大多数指令一样, 交互指令XCHG 支持8,16和32位数据交换,例如:
32位数据交换。
xchg esi,edi;ESI 与EDI 互换内容
xchg esi,[edi];ESI与EDI指向的主存单元互换内容
16位数据交换。
xchg si,di;SI与DI互换内容
xchg si,[edi];SI与EDI指向的主存单元互换内容
8位数据交换。
xchg bl,bh;BL与BH互换内容
xchg’al,bvar:AL与字节类型变量BVAR 互换内容
IA-32处理器采用小端方式存储多字节数据,但有些处理器却采用大端方式。当数据在不同处理器之间交换时, 有时需要进行小端, 大端的互换。
交换指令示例
双字变量DVAR进行小端、大端的互换可以使用交换指令:
mov al,byte ptr dvar ;取第1个字节
xchg al,byte ptr dvar+3 ;与第4 个字节交换
mov byte ptr dvar,al;实现低1,4个字节互换(也可以用MOV指令)
mov al,byte ptr dvar+1 ;同上,AL=第2个字节
xchg al,byte ptr dvar+2 ;与第3个字节交换,AL=第3个字节
mov al,byte ptr dvar+1 ;实现第2,3个字节互换
指令系统中有一条空操作 (No Operation) 指令: NOP。 在IA-32 处理器中, NOP指令与指令 “XCHG EAX, EAX” 具有同样的指令代码 (90H), 实际上就是同一条指令。 空操作指令放置在主存中也要占用一个字节空间。 编程中, 有时利用 NOP指令实现短时间延时, 还可以临时占用代码空间以便以后填入需要的指令代码。
汇编语言数据传送指令之通用数据传送类指令相关推荐
- 8086CPU指令系统——数据传送类指令
数据传送(Data Transfer)类指令是指令系统中用的最多的一类指令,也是条数最多的一类指令,常用于将原始数据.中间运算结果.最终结果及其它信息在CPU(中央处理器)的寄存器和存储器之间进行传送 ...
- 数据包覆盖Android,安卓数据包怎么安装 安卓游戏数据包安装教程
安卓数据包怎么安装?安卓数据包放在哪?这是很多安卓单机游戏爱好者经常问的问题,下面小编就为各位玩家带来:安卓游戏数据包安装教程,诸如数据包存放好后,为什么还是不能正常玩都能为您解答~ 安卓数据包怎么安 ...
- or1200处理器的异常处理类指令介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...
- 【汇编语言】通用数据处理指令——数据传送类指令
通用数据处理指令--数据传送类指令 文章目录 通用数据处理指令--数据传送类指令 一.MOV指令 1.数据长度 2.传送方式 3.常见错误 二.XCHG指令 1.数据长度 2.空操作指令NOP(no- ...
- verilog实现多周期处理器之——(五)移动操作(通用数据传送)指令的实现
本文参考作者 自己动手写CPU之第六阶段(1)--移动操作指令说明 自己动手写CPU之第六阶段(2)--移动操作指令实现思路 本文会添加笔者自己的思路以及理解在其中. 指令说明 这6条指令都是R类型指 ...
- 计算机组成原理学习笔记————计算机指令,MIPS指令集,存储器操作数,数据传送指令,取数存数指令
计算机语言 现在计算机编程常用的语言是C,C++,Java等高级语言,但计算机第层是将高级编程语言的代码编译成二进制代码形式的指令才能执行.所以计算机语言中的基本单词是二进制形式的指令,一台计算机的全 ...
- Intel汇编语言程序设计学习-第四章 数据传送、寻址和算术运算-上
数据传送.寻址和算术运算 4.1 数据传送指令 4.1.1 简介 第一段一大推,就是为了说明汇编相比高级语言来说比较麻烦需要注意很多细节,但是换来的好处是给开发者带来了更大的灵活性. 读者如果肯花 ...
- 汇编(二)——ARM数据处理指令——算术运算、数据传送
ARM指令集 数据操作 ARM指令的种类 数据处理指令 程序状态寄存器与通用寄存器之间的传送指令 Load/Store指令 转移指令 异常中断指令 协处理器指令 数据处理指令分为6类 数据传送指令 算 ...
- 数据传送类指令(PUSH,POP,LEA)
目录 数据传送类指令 堆栈的概念: 进栈指令 (PUSH) 出栈指令(POP) 练习 LEA取偏移地址(有效地址EA)指令(去括号) LEA和OFFSET区别: 用法注意 LEA和MOV指令的比较 数 ...
最新文章
- 基于JWT(Json Web Token)的ASP.NET Web API授权方式
- jsp(3,6,9) EL表达式及JSTL
- mysql PREPARE用法_PHP5 mysqli的
- 如何禁掉SAP Fiori上传文件的病毒扫描设置
- 【maven】The forked VM terminated without saying properly
- 使用Ecliplse时,对导入package的顺序进行设定
- android5.1禁用通知栏,android-阻止通知栏
- go语言编写同时支持Linux和Windows的单文件Web界面文件浏览器filebrowser介绍
- 第四章 广告投放系统——数据库设计与实体类
- Java锁synchronized关键字学习系列之CAS和对象头
- php的gc回收机制,php垃圾回收机制相关(GC)
- VScode 光标乱跳 光标自动跳动问题
- 为什么我不推荐大家去外包公司
- 初级程序员 中级程序员_急切的程序员
- 牛客华为机试-查找排序
- 关于外国人报考美国专利代理人的基础介绍
- html vertical-align:middle垂直居中 的方法
- 微信公众号原创功能怎么开通?
- 小学计算机ps课题计划,小学生学习习惯养成课题总结
- 北京 怀揣理想的地方!