计算机组成原理xchg,8088数据传送指令-计算机组成原理与汇编语言-电子发烧友网站...

3.2.1 数据传送指令

1. MOVOPRD1,OPRD2

MOV是操作码,OPRD1和OPRD2分别是目的操作数和源操作数。该指令可把一个字节或一个字操作数从源地址传送到目的地址。

源操作数可以是累加器、寄存器、存贮器以及立即操作数,而目的操作数可以是累加器、寄存器和存贮器。数据传送方向的示意图,如图3.13所示。

90c3270576d7e6546b1cbcdd47e2b2ff.png

各种数据传送指令例举如下:

(1)在CPU各内部寄存器之间传送数据(除代码段寄存器CS和指令指针IP以外)。

MOV AL,BL

MOV DL,CH 8位数据传送指令(1个字节)

MOV AX,DX

MOV CX,BX

MOV DX,BX } 16位数据传送指令(1个字)

MOV DX,ES

MOV BX,DI

MOV SI,BP

(2)立即数传送至CPU的内部通用寄存器(即AX、BX、CX、DX、BP、SP、SI、DI),给这些寄存器赋值。

MOV CL, 4;8位数据传送(1个字节)

MOV AX,03FFH;16位数据传送

MOV S1,057BH; 16位数据传送(1个字)

(3)CPU内部寄存器(除了CS和IP以外)与存贮器(所有寻址方式)之间的数据传送,与前述一样可以传送一个字节也可以传送一个字。

·在CPU的通用寄存器与存贮器之间传送数据:

MOV AL, BUFFER

MOV AX,[SI]

MOV,[DI] CX

MOV SI, BLOCK[BP]

·在CPU寄存器与存贮器之间传送数据:

MOV DS,DATA[SI+BX]

MOV DEST[BP+DI],ES

例如,为了将在同一个段内的偏移地址为AREA1的数据传送到偏移地址为AREA2单元中去,就需要执行以下两条传送指令:

MOV AL,AREA1

MOV AREA2,AL

如果要求将内存中一个数据块搬移到另一个内存数据区中时,例如要将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中去,可以

用有循环控制的数据传送程序来实现。为此采用间接寻址方法,用SI存放源数据地址,DI存放目的数据地址,用CX作为循环计数控制单元。

其程序如下:

MOV SI,OFFSETAREA1

MOV DI,OFFSETAREA2

MOV CX,100

AGAIN: MOV AL,[SI]

MOV,[DI] AL

INC SI

INC DI

DEC CX

JNZ AGAIN

2. 交换指令

XCHG OPRD1,OPRD2

目的    源

交换指令把一个字节或一个字的源操作数与目的操作数相交换。这种交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存贮器之 间进行,

但是段寄存器不能作为一个操作数,例如:

XCHG AL,CL

XCHG AX,DI

XCHG BX,SI

XCHG AX,BUFFER

XCHG BX,DATA[SI]

3. 地址传送指令

8088有3条地址传送指令。

(1)LEA指令

例如:

LEA OPRD1,OPRD2

该指令把源操作数OPRD2的地址偏移量传送至目的操作 数OPRD1中。源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。

这条指令通常用来建立串指令操作所需的寄存器指针。

例如:LEA BX,BUFR是把变量BUFR的地址偏移量送到BX中。

(2) LDS指令

该指令完成一个地址指针的传送。地址指针包括段地址和地址偏移量。指令执行时,将段地址送入DS,地址偏移量送入一个16位的指针寄存器或变址寄存器。

例如:LDS SI,[BX]是把BX所指的32位地址指针的段地址送入DS,偏移地址送入SI。

(3) LES指令

这条指令除将地址指针的段地址送入ES外,其他操作与LDS的类似。

例如: LES DI,[BX+CONT]是把BX+CONT所指的32位地址指针的段地址送入ES,偏移地址送入DI4.堆栈操作指令

堆栈是内存中的一个特定区域,由SS的内容和SP的内容来决定。对堆栈的操作具有先入后出的特点。用于堆栈操作的指令主要是:

PUSH OPRD(压入堆栈指令)                                                  POP  OPRD(弹出堆栈指令)

堆栈操作指令中的操作数可以是段寄存器(除CS)的内容、16位的通用寄存器(标志寄存器有专门的出入栈指令)以及内存的16位字,例如,

MOV  AX,8000H

MOV  SS,AX

MOV  SP,2000H

MOV  DX,3E4AH

PUSH DX

PUSH AX

当执行完两条压入堆栈的指令时,堆栈中的内容如图3.14所示。

由图3.14可以解释压入堆栈的过程:

①SP-1→SP

②DH→(SP)

③SP-1→SP

④DL→(SP)

这就是把DX压入堆栈的过程。AX的压栈过程是一样的。

出堆栈的过程与此刚好相反,例如POPAX:

①(SP)→AL

②SP+1→SP

③(SP)→AH

④SP+1→SP

可见,SP的内容总是指向堆栈的顶。

f64635941b649fa09ed41dbb24665c1b.png

4. 字节、字转换指令

有一条指令能将AL的符号位(bit7)扩展到整个AH中,它就是CBW,即将字节转换成一个字。

例如,

MOV AL,4FH

CBW

在执行完CBW之后,AX=004FH。另一条指令是将AX的符号位(bit15)扩展到整个DX,它就是CWD,即将字转换成双字。

例如,

MOV AX,834EH

CWD

执行完CWD之后,DX=FFFFH,DXAX=FFFF834EH

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值