目录
一、传送类指令
1.MOV 传送指令
2.XCHG 传送指令
二、LEA 有效地址传送指令
三.堆栈操作指令
(1)入栈指令:PUSH
(2)出栈指令:POP
四、输入输出指令
(1)IN 输入指令
(2)OUT输出指令
一、传送类指令
1.MOV 传送指令
格式:MOV 目的操作数,源操作数
功能:该指令用于将源操作数传送到目的操作数
目的操作数可以是寄存器(除CS、IP外)、存储器,不能是立即数。
源操作数可以是寄存器、存储器和立即数。
不允许向段寄存器送立即数(需要中转)
两个操作数不能同为存储器/段寄存器。
注意:不能实现存储器与存储器之间的数据传送,如果需要把存储单元AREA2的内容传送到存储单元AREA2,要通过寄存器来中转。
例如:MOV BL,AREA1
MOV AREA2,BL
注意:在使用传送类指令时要保证源操作数和目的操作数的长度要相等,否则错误。
2.XCHG 传送指令
格式:XCHG 目的操作数,源操作数
功能:该指令用于将源操作数和目的操作数交换数值
注意:段寄存器和IP和立即数不能作为交换指令的操作数。操作数为寄存器和存储器。不能同为存储器。不能为立即数。
二、LEA 有效地址传送指令
格式:LEA 目的操作数,源操作数
功能:把源操作数的偏移地址(EA)送到目的操作数。
注意:源操作数必须是一个存储器操作数(带【】),目的操作数必须是一个16位通用寄存器。
MOV DI,OFFSET WVAR == LEA DI,WVAR
OFFSET :取有效地址
三.堆栈操作指令
堆栈是一块特殊的存储器区域,这块区域以先进后出的方式工作,系统为此提供了特殊的指针SP和段寄存器SS。
(1)堆栈是以字为单元操作的
(2)不能用立即数作操作数,该指令不影响标志位。
(3)CS不能用于POP,能用于PUSH
(1)入栈指令:PUSH
格式:PUSH 操作数
第一步:先修改指针SP <- SP -2
第二步:再存入一个字。操作数的高位字节->(SP + 1)单元中, 操作数的低位字节->(SP)
功能:该指令为数据入栈指令,即将操作数指定的一个字的内容传送至SP所指的栈顶。寻址方式有寄存器寻址(SS除外)和存储器寻址,
(2)出栈指令:POP
格式:POP 操作数
第一步:先弹出一个字
第二步:修改指针SP <- SP + 2。首先堆栈(SP + 1)单元字节->操作数的高位字节,(SP)单元字节->操作数的低位字节,
功能:将SP所指的栈顶的内容传送至操作数指定的一个字。寻址方式有寄存器寻址(SS除外)和存储器寻址。
四、输入输出指令
(1)IN 输入指令
格式:IN AL/AX,PORT;
例如:IN AX,PORT; (PORT+1 : PORT)—>AX
IN AX,DX; (DX+1 :DX)—>AX
注意:上面的IN指令,不是把PORT(或DX)的内容送AL或AX,而是以PORT(或DX)的内容为端口地址,把该端口的内容(一个字或一个字节)读入指定的累加器AL或AX,这条指令不影响标志位。
(2)OUT输出指令
该指令可把AL中的一个字节的内容或AX中的一个字的内容输出至端口,寻址方式与IN指令相同,它不影响标志位。
例如:OUT 52H,AL; 将AL的内容送端口52H的单元中
OUT 60H,AX; 将AX的内容送60H和61H端口地址的单元中
注意:在汇编语言程序中,端口地址小于256(即十六进制范围00H~FFH)时,可以直接在指令中写出端口地址。如果端口地址大于或等于256时,应先将端口地址送DX寄存器中,然后再IN或OUT指令中用DX代表端口地址。