数据传送指令

用来在存储器和寄存器、寄存器和输入输出端口之间传送数据。数据传输指令分通用数据传送指令、累加器专用传送指令、地址传送指令和标志寄存器传送指令。

1、通用数据传送指令
传送指令 MOV (Move)
指令的汇编格式:MOV DST,SRC
指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。
指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
指令的执行对标志位的影响:不影响标志位。
指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;
                目的操作数DST不能是CS,也不能用立即数方式。

进栈指令 PUSH (push onto the stack)
出栈指令 POP

指令的汇编格式:PUSH SRC ;POP DST
指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
                PUSH SRC   (SP)<-(SP)-2 ;(SP)<-(SRC)
                POP DST    (DST)<-((SP));(SP)<-(SP)
指令支持的寻址方式:push 和 pop指令不能不能使用立即数寻址方式。
指令对标志位的影响:PUSH 和 POP指令都不影响标志位。
指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者 -2;
                POP指令的DST不允许是CS寄存器;

交换指令 XCHG (exchange)
指令的汇编格式:XCHG OPR1,OPR2
指令的基本功能:(OPR1)<->(OPR2)
指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令对标志位的影戏:不影响标志位。
指令的特殊要求:不允许使用段寄存器。

2、累加器专用传送指令
输入指令 IN (input)
输出指令 OUT (output)

指令的汇编格式:IN ac,port  port<=0FFH
                IN ac,DX    port>0FFH
                OUT port,ac port<=0FFH
                OUT DX,ac   port>0FFH
指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。
                IN ac,port  port<=0FFH    (AL)<-(port)传送字节 或 (AX)<-(port+1,port)传送字
                IN ac,DX    port>0FFH     (AL)<-((DX))传送字节 或 (AX)<-((DX)+1,(DX))传送字
                OUT port,ac port<=0FFH    (port)<-(AL)传送字节 或 (port+1,port)<-(AX)传送字
                OUT DX,ac   port>0FFH     (DX)<-(AL)传送字节   或 ((DX)+1,(DX))<-(AX)传送字
指令对标志位的影响:不影响标志位。
指令的特殊要求:只限于在AL或AX与I/O端口之间传送信息。
                传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。

               
换码指令 XLAT (translate)
指令的汇编格式:XLAT opr 或 XLAT
指令的基本功能:这条指令根据AL寄存器提供的位移量,将BX指使的字节表格中的代码换存在AL中。
                (AL)<-((DS)*16+(BX)+(AL))
指令对标志位的影响:不影响标志位。
指令的特殊要求:所建字节表格的长度不能超过256字节,因为存放位移量的是8位寄存器AL。
                opr为表格的首地址,因为opr所表示的偏移地址已存入BX寄存器,所以opr在换码指令中可有可无,有则提高程序的可读性。


3、地址传送指令
有效地址传送器 LEA (load effective address)
指令的汇编格式:LEA reg,src
指令的基本功能:LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src选定的一种存储器寻址方式确定的。
指令支持的寻址方式:各种存储器寻址方式。
指令对标志位的影响:不影响标志位。
指令的特出要求:指令中reg不能是段寄存器;

指针送寄存器和DS LDS (load DS with point)
指针送寄存器和ES LES (load ES with point)

指令的汇编格式:LDS reg,src
                LES reg,src
指令的基本功能:LDS和LES指令把确定内存单元位置的偏移地址送寄存器,段地址DS或ES。这个偏移地址和段地址(也称地址指针)是由src指定的两个相继字单元提供的。
                LDS reg,src  (reg)<-(src)  (DS)<-(src+2)
                LES reg,src  (reg)<-(src)  (ES)<-(src+2)
指令支持的寻址方式:src必须为存储器寻址方式
指令对标志位的影响:不影响标志位。
指令的特殊要求:指令中REG不能是段寄存器;


4、标志寄存器传送指令
标志寄存器的低字节送AH LAHF (load AH with FLAGS)
指令的汇编格式:LAHF
指令的基本功能:(AH)<-(FLAGS)0-7
指令对标志位的影响:不影响标志位

AH送标志寄存器低字节 SAHF(store AH into FLAGS)
指令的汇编格式:SAHF
指令的基本功能:(FLAGS)0-7<-(AH)
指令对标志位的影响:由装入值来确定标志位的值。

标志进栈 PUSHF (push the flags)
指令的汇编格式:PUSHF
指令的基本功能:(SP)<-(SP)-2  ((SP)+1,(SP))<-(FLAGS)0-15
指令对标志位的影响:不影响标志位。

标志出栈 POPF (pop the FLAGES)
指令的汇编格式:POPF
指令的基本功能:(FLAGS)0-15<-((SP)+1,(SP))  (SP)<-(SP)+2
指令对标志位的影响:由装入值来确定标志位的值。

不傲才以骄人,不以宠而作威。——诸葛亮
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号