80X86学习笔记--数据传送指令

原创 2012年03月23日 15:54:06

一.传送指令

格式:mov dst, src

源操作数可以使累加器,寄存器,存储单元,立即数。

目的操作数不能为立即数。

注意问题:

源和目的操作数不能同时是段寄存器;代码段寄存器cs不能作为目的寄存器;ip既不能作为源,也不能作为目的。

源操作数与目的操作数类型要一致16对16位, 8位对8位。

两个操作数不能都为存储器,必须有一寄存器。

数据传送指令能实现下列传输功能:

1.cpu内部寄存器间数据传送

mov ah, al

mov dl, dh

mov bp, sp

mov as, cs

2.立即数送通用寄存器或存储单元(立即数不能直接送到段寄存器)

mov al, 2

mov si, –5

mov varb, –1

mov varw, 1234h

mov [si], 1234h

mov al, ‘D’

3.寄存器与存储器间数据传送

mov a, varw

mov bh, [di]

mov dl, es:[si+3]

mov varb, dl

mov ds:[bp], dl

mov varw, ds

mov es, varw

--------------------------------

mov ax, offset table

offset为属性操作符,把table偏移地址送至ax。

 

二.交换指令

通用寄存器与通用寄存器或存储单元数据的交换,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。

格式:

xchg oprd1, oprd2

 

三.地址传送指令

(1)lea

传送有效地址指令

格式:

lea reg, oprd

oprd必须是一个存储器操作数

reg必须是一个16位通用寄存器

lea ax, buffer

lea ds, [bs+s]

lea sl, [bx+si+2]

(2)lds

段值和段内偏移构成一个32位地址指针,该指令传送这个32位指针

格式:

lds reg, oprd

reg<-[src]

ds<-[src+2]

段值送到ds

偏移送到reg

(3)指令les(load point into es)

les也是传送32位地址指针

les reg, oprd

reg<-[src]

es<-[src+2]

 

四.堆栈操作指令

堆栈操作以字为单位。

(1)进栈push

格式:

push src

执行操作:sp<-sp – 2

先把堆栈指针寄存器sp的值减2,然后把源操作数src送入由sp所指的栈顶,源操作数src可以是通用寄存器喝段寄存器,也可是字存储单元。

(2)出栈pop

格式:

pop dst

dst可以是通用寄存器喝段寄存器(cs例外),也可是字存储单元。

例子1:

临时保存寄存器内容

push ax

push bx

pop bx

pop ax

例子2:

push si          pop si

push ds         pop ds

push varw     pop varw

push[si]        pop [si]

 

数据交换的三种方式:

用mov,利用寄存器过度方法

mov bx, ax

mov ax, si

mov si, bx

 用交换指令xchg

xchg ax, si

 用堆栈指令

push si

push ax

pop ax

pop si

五.标志操作指令

(1)标志传送指令

LAHF(load ah with flags)

该指令把标志寄存器的低8位(包括sf,zf,af,pf,cf)传送到寄存器ah的指定位。

SAHF

与LAHF相反

PUSHF

该指令把标志寄存器内容压入堆栈

POPF

 

(2) 标志位操作指令

CLC清进位标志

STC置进位标志,进位标志位1.

CMC进位标志取反指令

CLD清方向标志指令,使方向标志DF为0.

STD置方向标志

CLI清中断允许标志指令,该指令使中断允许标志IF为0,cpu不再响应来自外部装置的可屏蔽中断,但对不可屏蔽中断和内部中断都没有影响。

STI置中断允许标志允许指令,该指令使IF为1,cpu可以响应可屏蔽中断。

汇编--学习笔记(七)-数据传送指令

数据传送指令时汇编语言程序设计中最常用的指令。分为4类: (1)通用传送:MOV、PUSH、POP、XCHG (2)累加器专用传送:IN、OUT、XLAT (3)地址目标传送:LEA、LDS、LES ...
  • qq_28877125
  • qq_28877125
  • 2017年05月25日 15:39
  • 292

80x86指令系统和寻址方式

一、数据类型       计算机执行指令过程中需要处理各种类型的机器数,可处理的数据类型有七种:    1)无符号二进制数    2)带符号二进制数    3)BCD码    4)数的定点和浮点表示法...
  • u012620515
  • u012620515
  • 2015年10月16日 20:43
  • 687

常用汇编数据传输指令

一、数据传输指令 它们在存储器和寄存器、寄存器和输入输出端口之间传送数据。 1,通用数据传送指令 mov 传送字或字节 movsx 先符号扩展,在传送 movzx  先0扩展,再传送 push ...
  • qq_35524916
  • qq_35524916
  • 2017年03月11日 17:24
  • 437

80x86汇编指令详解

80x86指令系统,指令按功能可分为以下七个部分。  (1) 数据传送指令。  (2) 算术运算指令。  (3) 逻辑运算指令。  (4) 串操作指令。  (5) 控制转移指令。  (6) 处理器控制...
  • zhaofuguang
  • zhaofuguang
  • 2013年10月18日 14:55
  • 1441

80x86系统寄存器以及系统指令(个人理解)

80x86 系统寄存器喝系统指令 为了协助处理器执行初始化和控制系统操作,80x86 提供了一个标志寄存器EFLAGS和几个系统寄存器,除了一些通用状态标志外,EFLAGS 中还包含几个系统标志。 ...
  • liutianshx2012
  • liutianshx2012
  • 2016年08月28日 20:28
  • 1046

数据传送指令详解

数据传送指令详解     前言 上一章我们说了汇编语言的基础,包括数据格式,寄存器以及操作数的标识方式,接下来我们就应该去认识一下hiU币按语言当红真难过的格各个指令了.这些指令大部署很简单,...
  • shanyongxu
  • shanyongxu
  • 2015年08月17日 15:55
  • 3694

80x86指令系统(一)

一、Intel 8086/8088的指令格式      Intel 8086/8088指令长度是可变的,指令机器码的长度为1~6个字节。双操作数指令的通用格式如图一:其中第1字节和第2字节为基本字节,...
  • scucj
  • scucj
  • 2009年06月18日 23:03
  • 5187

汇编中的通用数据传送类指令

基于IA-32处理器和32位汇编语言 1      通用数据传送指令 数据传送MOV指令: 形式:MOV   目的操作数,源操作数 数据交换XCHG指令: 形式:XCHG  操作数,操...
  • CSDN_LYY
  • CSDN_LYY
  • 2015年04月08日 22:04
  • 804

汇编语言中的串传送指令

串传送指令是movsb和movsw 这个两个指令的区别就是movsb是按字节传送的,movsw是按字传送的,所以下面以movsb举例 movsb就是:将ds:[si]为首地址所指的字符串移动到es...
  • qq_23880193
  • qq_23880193
  • 2015年01月12日 13:41
  • 1297

80X86学习笔记--算术运算指令

一.加减运算指令 1.加法指令ADD 格式:ADD OPRD1, OPRD2 操作:OPRD1 加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结...
  • x954818696
  • x954818696
  • 2012年03月23日 15:55
  • 830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:80X86学习笔记--数据传送指令
举报原因:
原因补充:

(最多只允许输入30个字)