【汇编语言】3. 8086指令系统
8086 全部指令功能可分成六大类:
- 数据传送指令
- 算术运算指令
- 逻辑指令
- 串操作指令
- 控制转移指令
- 处理器控制指令
1. 数据传送指令
负责将数据、地址或立即数传送到寄存器或存储单元中。
1.1. 通用数据传送指令
(1)MOV 传送指令
格式:
MOV DST,SRC
执行操作:
将 SRC 中的值赋给 DST
[(DST)=(SRC)
制约条件:
其中,\(DST\) 是 目的操作数,\(SRC\)
目的操作数(DST) | 源操作数(SRC) |
存储器 | 立即数 |
通用寄存器 | 立即数 |
存储器 | 通用寄存器 |
通用寄存器 | 存储器 |
通用寄存器 | 通用寄存器 |
存储器 | DS、ES、SS |
DS、ES、SS | 存储器 |
通用寄存器 | DS、ES、SS |
DS、ES、SS | 通用寄存器 |
CS | 存储器 |
CS | 通用寄存器 |
(2)XCHG 交换指令
格式:
XCHG OPR1,OPR2
执行操作:
OPR1 和 OPR2 中的值进行互换
[(OPR1)↔(OPR2)
制约条件:
- 两个操作数至少有一个为寄存器
- 不能使用段寄存器
- 两个操作数具有相同位数
1.2. 堆栈操作指令
(1)PUSH 进栈指令
格式:
PUSH SRC
执行操作:
移动指针 SP,将 SRC 的值压入栈顶
[(SP)=(SP)-2\\
((SP)+1,SP)=(SRC)
制约条件:
- SRC 不能为立即数
(2)POP 出栈指令
格式:
POP DST
执行操作:
将 栈顶 的值赋给 DST,移动指针 SP
[(DST)=((SP)+1,SP)\\
(SP)=(SP)+2
制约条件:
- DST 不能为立即数
- 不能使用 CS 寄存器
1.3. 标志传送指令
(1)LAHF 读标志指令
格式:
LAHF
执行操作:
将 FLAGS 的低八位赋给 AH
[(AH)=(FLAGS)_{1-8}
(2)SAHF 读标志指令
格式:
SAHF
执行操作:
将 AH 赋给 FLAGS 的低八位
[(FLAGS)_{1-8}=(AH)
(3)PUSHF 标志进栈指令
格式:
PUSHF
执行操作:
将 FLAGS 的值进栈
[(SP)=(SP)-2\\
((SP)+1,(SP))=(FR)
(4)POPF 标志出栈指令
格式:
PUSHF
执行操作:
将出栈值赋给 FLAGS
[(FR)=((SP)+1,(SP))\\
(SP)=(SP)+2
1.4. 地址传送指令
(1)LEA 取有效地址指令
格式:
LEA DST,SRC
执行操作:
[(DST)=(SRC)
制约条件:
- 源操作数必须是 存储器操作数
- 目的操作数必须是 16位寄存器(不能为段寄存器)
(2)LDS 传送偏移地址及数据段段基址指令
格式:
LDS DST,SRC
执行操作:
[(DST)=(SRC)\\
(DS)=((SRC)+2)
(3)LES 传送偏移地址及附加段段基址指令
格式:
LES DST,SRC
执行操作:
[(DST)=(SRC)\\
(ES)=((SRC)+2)
1.5. 输入/输出指令
(1)IN 输入指令
格式:
IN AL,PORT
IN AX,PORT
IN AL,DX
IN AX,DX
执行操作:
[(AL)=(PORT)\\
(AX)=(PORT+1,PORT)\\
(AL)=((DX))\\
(AX)=((DX)+1,(DX))
(2)OUT 输出指令
格式:
OUT PORT,AL
OUT PORT,AX
OUT DX,AL
OUT DX,AX
执行操作:
[(PORT)=(AL)\\
(PORT+1,PORT)=(AX)\\
((DX))=(AL)\\
((DX)+1,(DX))=(AX)