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

一.传送指令

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

 

转载于:https://www.cnblogs.com/seebro/archive/2012/03/13/2394681.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值