第2节 数据传送指令
推荐给好友
打印
加入收藏
更新于2009-06-01 10:40:30


1. 通用数据传送指令

(1) 基本传送指令 MOV d, s ;ds
源操作数s——寄存器、存储器、立即数
目的操作数d—— 寄存器、存储器
执行的操作:d<--s


实例:

  • CPU内部寄存器之间的数据传送
    MOV AL,BL MOV DX, DI
    MOV SI, BP MOV DS, BX
    MOV AX,DX
  • 立即数传送到CPU内部通用寄存器组(AX,BX,CX,DX,BP,SP,DI,SI)
    MOV CL, 4
    MOV DX, 03FFH
    MOV DI, 04BFH
  • CPU内部寄存器(除CS,IP外)与存储器(所有寻址方式)之间的数据传送
    MOV BX, BUFFER MOV [DI], CX
    MOV AL, [2000] MOV SI, BLOCK[BP]
    MOV AX, [SI] MOV DS, DAT[SI+BX]
  • 立即数给存储单元赋值
    MOV WORD PTR[2000], 10
    MOV BYTE PTR[BX+DI], 30

注意事项:
1. 立即数不能直接送段寄存器 MOV DS, 3000H
2. 目标操作数不允许用立即数方式 MOV 2000H, AL
3. 不允许在两个存储单元间传送数据 MOV[2000H],[3000H]
4. 不允许在两个段寄存器之间传送数据 MOV DS, ES
5. MOV 指令不影响标志位。
6. CS不可变 MOV CS, AX

例1: 把地址为AREA1(段内偏移量)的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中。


例2:若要传送的不是一个字节,而是一个数据块,(例如内有100个字节),如何实现?

(2)栈操作指令
PUSH s ;stack<--s
POP d ;d<--stack
d,s = Rc16;Rs;M16

堆栈——按照先进后出的原则组织的一段内存区域。8086中规定堆栈设置在堆栈段(SS段)内,堆栈指针SP的初值决定了堆栈的大小。
SP始终指向堆栈的顶部,即始终指向最后推入堆栈的信息所在的单元。


PUSH AX
指令分两步执行:
1. 先SP-1-->SP,将AH内容送至SP所指单元;
2. 再SP-1-->SP,将AL内容送至SP所指单元;

例:MOV AX,1234H
PUSH AX


POP AX
指令分两步执行:
1. 先将SP所指单元内容送至AL, 然后SP+1-->SP ;
2. 再SP所指单元内容送至AH, 然后SP+1-->SP

例:MOV AX,5678H
POP AX



(3)交换指令
XCHG d, s ; d<-->s
XCHG s ;AX<-->s


在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。
源操作数: 寄存器、存储器
目的操作数:寄存器、存储器
执行的操作:d<--> s

例: XCHG BX, [BP+SI]
(BX)=6F30H
(BP)=0200H
(SI)=0046H
(SS)=2F00H
(2F246H)=1234H

(4)换码指令
XLAT ; AL<-- [BX+AL]
功能: 将AL指向的换码表中的一个字节的内容送到AL中。
操作数:隐含的寄存器 BX , AL
操作: AL <--[BX+AL]
MOV AL, 01H
MOV BX, 2000H
XLAT

2. 地址传送指令(LEA, LDS, LES)

目的:把地址传送到指定寄存器。
(1)有效地址送寄存器
LEA d, s ; d<--s有效地址
Rc16<--M有效地址

该地址常用来设置一个16位的寄存器作为地址指针; 
该指令的执行效果与mov reg , offset src相同。

例:LEA bx, [bx][si]
执行前    (bx)=1000h
                (si)=2000h
执行后    bx=1000h+2000h=3000h

(2)指针送寄存器及DS指令
LDS d, s ; d<--[s] , DS<--[s+2]
Rc16<--M[s]
DS<--M[s+2]

把源操作数指定的内存的4个相继字节的内容送至指定寄存器及DS中
(1) 该指令完成一个32位地址指针的传送;
(2) 该指令通常指定 SI 作寄存器 REG。

例: LDS SI, [0100h]


(3)指针送寄存器及ES指令
LES d, s ; d<--[s] , ES<--s+2]
Rc16<--M[s]
ES<--M[s+2]

把源操作数指定的内存的4个相继字节的内容送至指定寄存器及ES中。
(1) 该指令完成一个32位地址指针的传送;
(2) 该指令通常指定 DI 作寄存器 REG。

例: LES DI, [100h]


3. I/O传送指令

PC机中,所有I/O端口与CPU之间的通信都有IN, OUT指令完成。

(1)I/O输入指令
IN AL, port8
IN AL, DX
AL<--port8, DX

(2)I/O输出指令
OUT port8, AL
OUT DX, AL
port8, DX<-- AL

4.标志寄存器传送指令

(1)读取标志指令 LAHF ;AH<--Flag 的低字节


(2)设置标志指令 SAHF ;Flag 的低位字节<--AH


注:该指令影响标志位 Z、A、P、C、S

(3)标志寄存器入栈指令 PUSHF ;stack<-- Flag
将标志寄存器 Flag 的内容压入堆栈保存。

(4)标志寄存器出栈指令 POPF ;Flag<-- stack
把栈中内容弹出至标志寄存器 Flag。
注:该指令影响标志位 O、S、Z、A、P、C 。

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.