常见的汇编指令可以分为以下六类
数据传送指令
算术运算指令
逻辑运算和移位指令
串操作指令
转移指令
处理器控制指令
数据传送类指令
包括:
通用传送指令; 累加器专用传送指令
地址传送指令; 标志传送指令;
1、通用传送指令
①基本传送指令(MOV)
指令格式:MOV DST,SRC;
源操作数和目的操作数可用前述6种寻址方式的任何一种。
操作:将SRC内容付给、、赋给DST。
所有通用传送指令都不影响标志位。
注意:不能用MOV指令实现以下传递
(1)储存器操作数之间不能直接传送
MOV [1000H],[DI]; 错
应该为
MOV AX,[DI];
MOV [1000H],AX;
(2)立即数不能直接送段寄存器
MOV DS,2000H; 错
应该为
MOV AX,2000H
MOV DS,AX
(3)段寄存器之间不能直接传送
MOV ES,DS; 错
应该为
MOV AX,DS;
MOV ES,AX
(4)CS只可以作为源操作数
MOV CS,AX; 对
MOV AX,CS; 错
(5)源操作数和目的操作数的宽度必须相同
他们之间的相互传递关系
②堆栈指令(PUSH、POP)
堆栈(STACK)的概念
数据的存储按后进先出(Last In First Out—LIFO)原则组织的一段内存区域。
SS(堆栈段)
SP(指向堆栈段的段顶)
入栈指令(PUSH)
格式:PUSH src
操作过程分两步完成:
Ⅰ.(SP)<-(SP)-2 (栈顶位置向上移2个字)
Ⅱ.((SP)+1,(SP))<-(src) (把src放到新空出的两个字)
功能:把一个字压入由SP指向的堆栈区
如:PUSH AX
出栈指令(POP) *即弹栈*
格式:POP dst ;
操作:
(dst)<-((SP)+1,(SP))
(SP)<-(SP)+2
功能:把SP所指向的堆栈顶部的一个字送入目的地址,同时进行修改堆栈指针。
如:POP BX;
POP AXL
堆栈的用途如下表
断电信息:程序断点地址、标志寄存器及其他被子程序使用和改变的寄存器。
应注意的问题
①堆栈操作都按字操作;
②PUSH,POP指令的操作数可以是CPU内部寄存器或存储单元;
③PUSH CS 合法,POP CS 非法
④执行PUSH指令,(SP)-2->(SP),低字节放在低地址,高字节放在高地址;
⑤SP总是指向栈顶;
⑥堆栈最大容量即为SP的初值与SS之差。
③交换指令(XCHG)
格式: XCHG dst,src ; (dst)<->(src)
可以实现: 寄存器之间
寄存器和存储器之间
注意:
存储器之间不能直接交换;
段寄存器不能作为操作数;
允许字或字节操作。
2、累加器专用传送指令
(1)输入指令(IN)
功能:用于CPU从外设端口接收数据。
具体形式有四种:
IN AL,data8; 从端口地址输入一个字节
IN AX,data8; 从8位端口地址输入一个字
IN AL,DX; 从16位端口地址输入一个字节
IN AX,DX; 从16位端口地址输入一个字
(2)输出指令(OUT)
功能:用于CPU像外设端口发送数据
具体形式有四种:
OUT data8,AL; 从端口地址输入一个字节
OUT data8,AX; 从8位端口地址输入一个字
OUT DX;AL; 从16位端口地址输入一个字节
OUT DX,AX; 从16位端口地址输入一个字
3、目的地址传送指令
8086提供了三条指令:
LEA
LDS
LES
(1)LEA
格式: LEA reg16,mem
reg16——16位通用寄存器;
mem——存储单元;
功能:将源操作数的偏移地址传送到目的操作数;
注意:
源操作数必须以 寄存器 间接寻址、变址寻址、基址加变址寻址
等方式表示的存储器操作数;
目的操作数为一个16位的通用寄存器。
例如:
设(DI) = 1005H
执行LEA AX,[DI], 有(AX) = 1005H.
(2)LDS
格式: LDS reg16,mem
功能:把源操作数指定的4个相继字节的数据分别送到
指令指定的寄存器及DS寄存器种。
(reg16)<-(mem)
(DS)<-((mem)+2)
例如:LDS SI,[0010H]
设(DS) = 0C000H
指令执行后:
(SI) = 0180H
(DS) = 2000H
4、标志传送指令
8086有四条标志传送指令:
(1)LAHF (Load AH into flags)
格式:LAHF ;
功能:标志寄存器低八位 ->(AH)
(AH)<-(PSW的低字节)
(2)SAHF(Store AH into Flags)
格式:SAHF
功能:(AH)送标志寄存器低八位。
(PSW的低字节)<-(AH)
(3)PUSHF(Push Flags)
格式:PUSHF ;
功能: 标志进栈。
(SP)<-(SP)-2
((SP)+1,(SP))<-(PSW)
(4)POPF(Pop Flags)
格式:POPF;
功能:标志出栈。
(PSW)<-((SP)+1,(SP))
(SP)<-(SP)+2