汇编--指令系统 数据传送类指令

(1) 数据传送类指令

通用数据传送指令:MOV 、PUSH、POP、XCHG 交换指令

累加器专用传送指令: IN、OUT 、XLAT 换码指令

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

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

类型转换指令:CBW、CWD、CDQ、BSWAP



MOV指令

对于存储器单元与立即数同时作为操作数的情况,必须显式指明   ;byte ptr 说明是字节操作   ;word ptr 说明是字操作

mov [bx],[si+2]  错误

不允许立即数传送给段寄存器

不允许直接改变CS值

不允许段寄存器之间的直接数据传送



栈顶是地址较小的一端(低端)

堆栈和队列都是一段存储空间。

进栈指令:PUSH

进栈和出栈只对字操作



交换指令:XCHG(exchange)

把两个地方的数据进行互换

XCHG reg,reg/mem

寄存器与寄存器之间交换数据

寄存器与存储单元之间交换数据

不能在存储单元之间交换数据

不能在段寄存器之间交换数据


二、累加器专用传送指令

IN      输入    OUT  输出    XLAT  换码

2、用法:
(1)IN AX/AL, I/O端口地址            表示从外部设备输入数据给累加器

IN AX,80H
MOV DATA_WORD,AX   ;这两条指令把端口28H的内容经过AX传送到存储单元DATA_WORD中
mov DX,3FCH
IN EAX,DX

(2)OUT I/O端口地址,AX/AL         表示将累加器的数据输出给外部设备

OUT 5,AL  ;从AL中输出一个字节到5端口中

说明:当I/O端口地址不超过8位时,则直接放在指令中,若超过8位,则用DX间址。比如:

MOV DX,8080H
IN AL,DX

换码指令:XLAT(translate)

XLAT    ;al←ds:[bx+al]

换码指令执行前: 在主存建立一个字节量表格,内含要转换成的目的代码 表格首地址存放于BX,AL存放相对表格首地址的位移量

换码指令执行后: 将AL寄存器的内容转换为目标代码

换码指令没有显式的操作数,但使用了BX和AL;


地址传送指令

取有效地址指令:LEA   (load EA)     将存储器操作数的有效地址传送至指定的16位寄存器中

指针传送指令:LDS

指针传送指令:LES

注意不是获取存储器单元的内容,而是其有效地址

LEA r16,mem           ;r16←mem的有效地址EA    获得主存单元的有效地址;不是物理地址,也不是该单元的内容

LDS r16,mem ;r16←mem, ;DS←mem+2

  LDS指令将主存中mem指定的字(就是地址里面的值)送至r16,并将mem的下一字送DS寄存器

LES r16,mem ;r16←mem, ;ES←mem+2

LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器



标志传送类指令

标志寄存器传送指令:LAHF、SAHF

标志寄存器传送指令:PUSHF、POPF

  •   用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作
  •   影响标志位

LAHF   ;AH←FLAGS的低字节

  • LAHF指令将标志寄存器的低字节送寄存器AH
  • SF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意

SAHF  ;FLAGS的低字节(5个)←AH

  • SAHF将AH寄存器内容送FLAGS的低字节
  • 用AH的第7/6/4/2/0位相应设置SF/ZF/AF/ PF/CF标志

PUSHF ;SP←SP-2 ;SS:[SP]←FLAGS

  • PUSHF 保存全部标志到堆栈

POPF ;FLAGS←SS:[SP] ;SP←SP+2

  • POPF 将堆栈内容取到标志寄存器


类型转换指令

字节转换成字指令:CBW

字转换成双字指令:CWD

双字转换成四字指令:CDQ

CBW ;AL的符号扩展至AH ;如AL的最高有效位是0,则AH=00 ;AL的最高有效位为1,则AH=FFH。AL不变

CWD ;AX的符号扩展至DX ;如AX的最高有效位是0,则DX=00 ;AX的最高有效位为1,则DX=FFFFH。AX不变

类型转换指令常用于获得倍长的数据

注意:

  • 无操作数指令
  • 隐含对 AL 或 AX 进行符号扩展
  • 不影响条件标志位


什么是符号扩展?

符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全1(负数)。

符号扩展不改变数据大小

对于数据64H(表示数据100),其最高位D7为0,符号扩展后高8位都是0,成为0064H(仍表示数据100)

对于数据ff00H(表示有符号数-256),其最高位D15为1,符号扩展后高16位都是1,成为ffffff00H(仍表示有符号数-256)

mov al,80h ;al=80h

cbw ;ax=ff80h

add al,255 ;al=7fh

cbw ;ax=007fh

    cwd         ;DX.AX←AX

    idiv bx     ;AX←DX.AX÷BX

  • 利用符号扩展指令得到除法指令所需要的倍长于除数的被除数
  • 对无符号数除法应该采用直接使高8位或高16位清0的方法,获得倍长的被除数
时间: 2024-10-14 13:16:52

汇编--指令系统 数据传送类指令的相关文章

ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

要学习一个东西首先要把概念搞清楚,下面只是自己的一些关于汇编的理解. 可执行文件中的01码是机器码,机器码不等于汇编码,虽然机器码可以很容易翻译成汇编码. 汇编码中包含很多汇编指令.伪指令和宏指令等,这些是不可以直接在机器上运行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令,在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样.个人感觉

深入理解计算机系统(3.3)------操作数指示符和数据传送指令

在上一篇博客 程序编码以及数据格式 中我们给出了一个简单的C程序,然后编译成了汇编代码.大家看不懂没关系,后面的博客我们将逐渐揭开一些汇编指令的神秘面纱.本篇博客我们将对操作数指示符和数据传送指令进行详细的介绍. 1.整数寄存器 上一篇博客我们讲了在汇编语言中,如下的几个处理器状态是可见的: 一.程序计数器(在 IA32 中通常称为 PC,用 %eip 表示):指示将要执行的下一条指令在存储器中的地址. 二.整数寄存器文件:包含8个命名的位置,可以存储一些地址或者整数的数据.有的用来记录某些重要

数据传送指令详解

数据传送指令详解 前言 上一章我们说了汇编语言的基础,包括数据格式,寄存器以及操作数的标识方式,接下来我们就应该去认识一下hiU币按语言当红真难过的格各个指令了.这些指令大部署很简单,但是组合在一起却能模拟出我们程序当中香烟的任何效果,确实很神奇. 数据传送指令 数据传送指令的目的是我了将一个数据从一个位置复制到另一个位置.既然如此,那么数据传送至零就会包含一个源操作数和一个目的操作数,指令会将源操作数的值复制到目的操作数并覆盖. 数据传送指令一共可以分为5种,分别是mov,movs,movz,

深入理解计算机系统(3.3)---数据传送(或者说复制)指令详解

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer15.html 引言 上一章我们已经介绍了汇编语言的基础部分,包括数据格式.寄存器以及操作数的标识方式,接下来我们就应该去认识一下汇编语言当中的各个指令了.这些指令大多数都非常简单,但是组合在一起却能模拟出我们程序当中想要的任何效果,确实是十分神奇的一件事. 数据传送指令 数据传送指令的目的是为了将一个数据从一个位置复制到另外一个位置.既然如此,那么数据传送指令就会包含一个源操作数和一个目的操

汇编的数据段和栈

1.DS和[address] 例如:我们要读取10000H单元的内容可以用如下程序进行 mov bx,1000H mov ds,bx mov al,[0] 上面的三条指令是将10000H(1000:0)中的数据读到al中. [...]表示一个内存单元,[...]中的0表示内存单元的偏移地址.我们知道只有偏移地址是不能定位一个内存单元的,那么内存单元的段地址是多少呢?指令执行时,8086CPU自动获取ds中的数据位内存单元的段地址. 再来看一下,我们如何用mov指令从10000H中读取数据.100

实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp

DMA方式的数据传送过程

DMA方式具有如下特点: 1. 外部设备的输入输出请求直接发给主储存器. 主存储器既可以被CPU访问,也可以被外围设备访问.因此,在主存储器中通常要有一个存储管理部件来为各种访问主存储器的申请排队,一般计算机系统把外围设备的访问申请安排在最高优先级. 2. 不需要做保存现场和恢复现场等工作,从而使DMA方式的工作速度大大加快. 由于在外围设备与主存储器之间传送数据不需要执行程序,因此,也不动用CPU中的数据寄存器和指令计数器等. 3.在DMA控制器中,除了需要设置数据缓冲寄存器.设备状态寄存器或

字符串攻击、防攻击、实体类、数据访问类

字符串攻击: 主要利用获取需用户输入的字符串时,通过输入精心编制的含有某种指令的字符串,从而对数据库进行攻击性操作. 防攻击: 例 cmd.CommandText = "update Users set [email protected],[email protected],[email protected],[email protected],[email protected],[email protected] where [email protected]"; cmd.Param

2017-4-20实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类:  实体类 二.数据访问类 将某个表的数据库操作写成一个一个方法,放入到此类中供外部调用 这是一个数据访问类:  数据访问类 三.字符串攻击,防攻击 字符串攻击: 主要利用获取需用户输入