【汇编语言】3. 8086指令系统

  8086 全部指令功能可分成六大类:

  1. 数据传送指令
  2. 算术运算指令
  3. 逻辑指令
  4. 串操作指令
  5. 控制转移指令
  6. 处理器控制指令

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. 不能使用段寄存器
  3. 两个操作数具有相同位数

1.2. 堆栈操作指令

(1)PUSH 进栈指令

  格式:

PUSH SRC

  执行操作:

移动指针 SP,将 SRC 的值压入栈顶

[(SP)=(SP)-2\\
((SP)+1,SP)=(SRC)

  制约条件:

  1. SRC 不能为立即数

(2)POP 出栈指令

  格式:

POP DST

  执行操作:

将 栈顶 的值赋给 DST,移动指针 SP

[(DST)=((SP)+1,SP)\\
(SP)=(SP)+2

  制约条件:

  1. DST 不能为立即数
  2. 不能使用 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)

  制约条件:

  1. 源操作数必须是 存储器操作数
  2. 目的操作数必须是 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)