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可以响应可屏蔽中断。

相关文章推荐

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

一.加减运算指令 1.加法指令ADD 格式:ADD OPRD1, OPRD2 操作:OPRD1 加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结...

80X86汇编语言程序设计学习笔记

  • 2010年02月24日 09:27
  • 480KB
  • 下载

80x86汇编语言学习笔记(四)

这次总结一下汇编语言中的变量和标号首先,变量和标号均表示存储单元,也就是某个地址,但不同的是,变量表示的存储单元用来存储数值,而标号表示的单元则是用来存储代码。由此可以推断,变量应该指向DS,标号应该...

80X86学习笔记--变量与标号

变量表示存储单元中存放的数值,标号表示存储单元中存放的指令代码。 (1)数据定义语句 通过数据定义语句可为数据项分配存储单元,并根据需要设置其初值,还可用符号代表数据项,此时符号与分配的存储单元相...

80x86汇编语言学习笔记(三)

今天上午开始看汇编语言程序设计初步,这一章分为:汇编语言语句、变量和标号、常用伪指令语句和源程序组织、顺序程序设计、分支程序设计、循环程序设计这几块,这次总结一下汇编语言的语句。 首先汇编语言的语句分...

80X86学习笔记--汇编语言的语句

(1)语句的种类和格式 1.语句的种类 指令语句和伪指令语句两类,指令语句有着与其对应的机器指令,伪指令语句没有与其对应的机器指令,只是指示汇编程序如何汇编源程序,包括符号的定义,变量的定义,段的...

80x86汇编学习笔记(时刻更新中)

在学习80x86语言的时候,时刻记录下来自己不懂的查到的知识。 1.  显示字符串后面跟随的 0DH,0AH,'$' 0DH 回车符ASCII码 0AH 换行符ASCII码 '$' DOS功能调用IN...
  • aqzwss
  • aqzwss
  • 2015年01月05日 17:21
  • 757

80x86汇编语言学习笔记(二)二次修改版

本来想上午搞定,但今天在外面逛了一天买东西。。。#相对昨天做了一些补充————2010/2/15##修改了有符号数使用CMP指令后标志CF和OF的值和两个操作数的大小关系——2010/2/23#这次总...

X86汇编指令学习笔记

今天来扒一扒X86汇编指令(IA-32指令),首先看看它的概念: IA-32(Intel Architecture 32bit,英特尔32位体系架构)[1] ,属于X86体系结构的32位版本,即...

【80X86汇编语言学习】【字符串处理】字符串操作指令REPNZ/REPNE

REPNZ用作为一个串操作指令的前缀,它重复气候的串操作指令动作。没重复一次CX的值减一,重复一直进行到CX为0,获知串操作指令使零标志ZF为1时止。 重复操作指令REPNZ主要用在字符串扫描指令S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:80X86学习笔记--数据传送指令
举报原因:
原因补充:

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