数据传送类指令可以实现CPU寄存器之间、寄存器与存储器之间、累加器与I/O之间的数据传送,可以按字或字节传送,数据传送类指令不影响标志位,可以分为以下6种情况。
1.通用数据传送指令(MOV)
通用数据传送指令可实现的传送方向如图3.1所示。
图3.1 通用数据传送指令传送方向示意图
从图3.1中可以看出,两个存储单元之间不能直接传送数据;两个段寄存器之间不能直接传送数据;立即数不能直接传送给段寄存器;立即数不可作为目的操作数。
2.交换指令(XCHG)
寄存器和寄存器(或者存储单元)的数据可以交换。
3.堆栈操作指令(PUSH、POP)
压入(PUSH)与弹出(POP)堆栈指令要记住操作过程,且每次操作都是16位的。
压入数据分两步执行:
·先SP-1→SP,然后把高字节数据送至SP所指单元;
·再次使SP-1→SP,把低字节的数据送到SP所指单元。
弹出数据也分两步执行:(www.daowen.com)
·先弹出栈顶数据(低字节),修改SP,即使SP+1→SP;
·再弹出栈顶数据(高字节),再修改SP,即使SP+1→SP。
4.地址传送指令(LEA、LDS、LES)
这3条指令的功能是将存储单元的地址送入指定的存储器中。
·LEA将指定存储器操作数的16位偏移地址送入指定的8个通用的16位寄存器之一中。
·LDS将指定内存中的4字节(32位)分别装入指定的寄存器和段寄存器DS中。
·LES将指定内存中的4字节(32位)分别装入指定的寄存器和段寄存器ES中。
5.累加器专用传送指令(IN、OUT、XLAT)
这类指令包括输入/输出指令与表格查找指令。这类指令只和累加器AL或AX有关,而与AH无关。若I/O端口是16位地址,则IN、OUT指令中的地址要用DX间接寻址,决不能在指令中直接出现16位I/O地址,而8位I/O地址可直接写在输入/输出指令中。
6.标志传送指令(LAHF、SAHF、PUSHF、POPF)
LAHF指令可以通过AH得到标志寄存器低8位的值;而SAHF指令可以通过AH改变FR低8位的值。
PUSHF可以将FR的内容压入堆栈保存;POPF可以把堆栈内容弹出到FR中,从而改变FR的值。用此方法可以使标志位TF=1或者TF=0。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。