【汇编语言】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) \]

猜你喜欢

转载自www.cnblogs.com/yznnnn/p/10627602.html
今日推荐