一、通用数据传送指令
1、MOV 传送指令(双操作数指令)
格式:MOV DST,SRC
操作:(DST)<-(SRC),将源操作数传送到目的操作数
其中,DST位目的操作数,SRC位源操作数
规定:(1)源操作数与目的操作数的长度必须明确且一致,即必须同时为8位或16位。
(2)目的操作数与源操作数不能同时为存储器,不允许在两个存储单元之间直接传送数据
(3)目的操作数不能为CS或IP,因为CS:IP指向的是当前要执行的指令所在的地址。
(2)目的操作数不可以是立即数。
注:寄存器需通过寄存器得到段地址,不能直接由符号地址、段寄存器、立即数得到。
2、PUSH 进栈指令段地址
格式:PUSH SRC
操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC)
(1)目的操作数地址由SS:SP指定,SP总是指向栈顶(大地址)。
(2)入栈时,先将栈顶指针SP减2(2表示2个字节,16位机器字长),以便指向新的内存地址接受16位源操作数,同时指向新的栈顶。
(3)堆栈操作以字为单位进行操作。
3、POP出栈指令
格式:POP DST
操作:(DST)<-((SP)+1,(SP)) (SP)<-(SP)+2
4、XCHG 交换指令
格式:XCHG OPR1,OPR2
操作:(OPR1)<- ->(OPR2)【把两个操作数互换位置】
均为目的操作数,除了遵循双操作数指令的规定,也不能用立即数寻址。
二、累加器专用传送指令【只限于AX、AL】
1、IN 输入指令
把端口号PORT或由DX指向的端口的数据输入到累加器。
(1)长格式:IN AL,PORT(字节) IN AX,PORT(字)
其中PORT为端口号,端口号的范围为00~FFH(256),机器指令长度为2个字节(端口号占1个字节)。
(2)短格式:IN AL,DX(字节) IN AX,DX(字)
其中PORT为端口号,端口号的范围为0000~FFFFH(65536),机器指令长度为1个字节,端口号存放在DX寄存器中。
2、OUT 输出指令
把累加器的数据输出到端口PORT或由DX指向的端口。
(1)长格式:IN PORT,AL(字节) IN PORT,AX(字节)
(2)短格式:IN DX,AL(字节) IN DX,AX(字节)
3、XLAT 换码指令
格式:XLAT
操作:AL<-(BX+AL)
三、地址传送指令
1、LEA 有效地址送寄存器指令
格式:LEA REG,SRC
操作:REG<-SRC
把源操作数的有效地址EA送到指定的寄存器。
2、LDS 指针送寄存器和DS指令
格式:LDS REG,SRC
操作:REG<-(SRC) (DS)<-(SRC+2)
把源操作数SRC所指向的内存单元中2个字送到指定的寄存器REG和DS。
3、LES 指针送寄存器和ES指令
格式:LES REG,SRC
操作:REG<-(SRC) ES<-(SRC+2)
把源操作数SRC所指向的内存单元中的2个字送到指定的寄存器REG和ES。