数据传送类指令(微机原理笔记)
Posted 你要永远相信光z
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据传送类指令(微机原理笔记)相关的知识,希望对你有一定的参考价值。
数据传送类指令
数据传送指令的功能是把数据从一个位置传送到另一个位置。该类指令除标志操作指令外,其他均不影响标志位。
通用数据传送指令
这组指令是MOV、XCHG和XLAT,它们提供方便灵活的通用传送操作。
传送指令MOV
MOV指令把一个字节或字的操作数从源地址传送至目的地址。源操作数可以是立即数、寄存器或主存单元,目的操作数可以是寄存器或主存单元,但不能是立即数。
在包括传送指令的绝大多数双操作数指令中(除非特别说明),目的操作数与源操作数必须类型一致,或者同为字,或者同为字节,否则为非法指令。
字节和字的声明方式
为了区别是字节传送还是字传送,汇编语言用操作符byte ptr(字节类型)和word ptr(字类型)指定。
交换指令XCHG
交换指令用来将源操作数和目的操作数内容交换,操作数可以是字也可以是字节,可以在通用寄存器与通用寄存器或存储器之间交换数据,但不能在存储器与存储器之间交换数据。
换码指令XLAT
换码指令常用于将一种代码转换为另一种代码,使用前,首先在主存中建立一个字节表格,表格的内容是要转换成的目的代码,表格的首地址存放于BX寄存器,需要转换的代码存放于AL寄存器,要求被转换的代码应是相对表格首地址的位移量。设置好后,执行换码指令,即将AL寄存器的内容转换为目的代码。XLAT指令中没有显式指明操作数,而是默认使用BX和AL寄存器。这种采用默认操作数的方法称为隐含寻址方式,概括的讲就是把BX指定的缓冲区中的AL指定的位移处的数据取出赋给AL。
堆栈操作指令
堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址﹔堆栈只有一个出口,即当前栈顶,用堆栈指针寄存器SP指定栈顶的偏移地址。堆栈有两种基本操作,且操作的对象只能是字操作数,对应两条基本指令:进栈指令PUSH和出栈指令POP。
- 进栈指令PUSH先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部,数据的低字节存放于低地址,高字节存放在高地址。
- 出栈指令POP把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2,数据的低字节存放于低地址,高字节存放在高地址。
标志操作指令
尽管许多指令的执行都会影响标志,但标志操作指令能够直接读写标志寄存器的内容。标志位操作指令可以直接改变CF、DF、IF标志的状态:
CLC ;复位进位标志:CF<一0
STC ;置位进位标志:CF<一1
CMC ;求反进位标志:CF<一~CF
CLD ;复位方向标志:DF<一0,串操作后地址增大
STD ;置位方向标志:DF<一1,串操作后地址减小
CLI ;复位中断标志:IF<一0,禁止可屏蔽中断
STI ;置位中断标志:IF<一1,允许可屏蔽中断
标志寄存器低字节内容可以用LAHF指令传送到AH寄存器,或者用SAHF指令实现相反的传送。整个标志寄存器的内容可以用PUSHF指令压入堆栈,还可以用POPF指令将堆栈顶部一个字量数据弹出传送到标志寄存器。
地址传送指令
LEA指令将存储器操作数的有效地址(段内偏移地址)传送至16位通用寄存器中。操作符OFFSET,可以实现同样效果
指针传送指令LDS和LES能将主存连续4字节内容传送到DS或ES和16位通用寄存器中。
以上是关于数据传送类指令(微机原理笔记)的主要内容,如果未能解决你的问题,请参考以下文章