8086 指令系统概述

38
第 3 第 8086 第第第 第第 Intel 8086 指指指 指指 117 指指指指指指指指 6 指指指指 指指 指指指指 指指指指指指指 指指指指指指指指指指 指指指指指指 指指指指指指指 指指指指指指指指

description

8086 指令系统概述. Intel 8086 指令系统共有 117 条基本指令,可分成 6 个功能组 ① 数据传送类指令 ② 算术运算类指令 ③ 逻辑运算和移位类指令 ④ 串操作类指令 ⑤ 控制转移类指令 ⑥ 处理机控制类指令. 如何学习. 学习指令的注意事项. 指令的功能 —— 该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式 指令支持的寻址方式 —— 该指令中的操作数可以采用何种寻址方式 指令对标志的影响 —— 该指令执行后是否对各个标志位有影响,以及如何影响 - PowerPoint PPT Presentation

Transcript of 8086 指令系统概述

Page 1: 8086 指令系统概述

第 3 章第 3 章 8086 指令系统概述

Intel 8086 指令系统共有 117 条基本指令,可分成 6 个功能组① 数据传送类指令② 算术运算类指令③ 逻辑运算和移位类指令④ 串操作类指令⑤ 控制转移类指令⑥ 处理机控制类指令

Page 2: 8086 指令系统概述

第 3 章第 3 章 学习指令的注意事项

指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式

指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式

指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响

其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等

Page 3: 8086 指令系统概述

第 3 章第 3 章 指令操作数的表达( 1 )

r8—— 任意一个 8 位通用寄存器AH AL BH BL CH CL DH DL

r16—— 任意一个 16 位通用寄存器AX BX CX DX SI DI BP SP

reg—— 代表 r8 或 r16seg—— 段寄存器 CS/DS/ES/SS

Page 4: 8086 指令系统概述

第 3 章第 3 章 指令操作数的表达( 2 )

m8—— 一个 8 位存储器操作数单元(所有主存寻址方式)

m16—— 一个 16 位存储器操作数单元(所有主存寻址方式)

mem—— 代表 m8 或 m16

Page 5: 8086 指令系统概述

第 3 章第 3 章 指令操作数的表达( 3 )

i8—— 一个 8 位立即数i16—— 一个 16 位立即数imm—— 代表 i8 或 i16dest—— 目的操作数src—— 源操作数

Page 6: 8086 指令系统概述

第 3 章第 3 章 3.3 数据传送类指令

数据传送是计算机中最基本、最重要的一种操作

传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另

一个位置除标志寄存器传送指令外,均不影响

标志位 重点掌握

MOV XCHG PUSH POP LEA

Page 7: 8086 指令系统概述

第 3 章第 3 章 3.3.1 通用数据传送指令

提供方便灵活的通用传送操作有 3 条指令MOV

XCHG

XLAT

MOVMOV

XCHGXCHG XLATXLAT

Page 8: 8086 指令系统概述

第 3 章第 3 章 传送指令 MOV ( move )

把一个字节或字的操作数从源地址传送至目的地址

MOV reg/mem,imm

;立即数送寄存器或主存

MOV reg/mem,imm

;立即数送寄存器或主存

MOVMOV

例题 2.1例题 2.1

MOV reg/mem/seg,reg

;寄存器送(段)寄存器或主存

MOV reg/mem/seg,reg

;寄存器送(段)寄存器或主存

例题 2.2例题 2.2

MOV reg/seg,mem

;主存送(段)寄存器

MOV reg/seg,mem

;主存送(段)寄存器

例题 2.3例题 2.3

MOV reg/mem,seg

;段寄存器送寄存器或主存

MOV reg/mem,seg

;段寄存器送寄存器或主存

例题 2.4例题 2.4

Page 9: 8086 指令系统概述

第 3 章第 3 章 MOV 指令传送功能

MOV 也并非任意传送

立即数

段寄存器CS DS ES SS

通用寄存器AX BX CX DXBP SP SI DI

存储器

Page 10: 8086 指令系统概述

第 3 章第 3 章 非法传送种种

两个操作数的类型不一致 例如源操作数是字节,而目的操作

数是字;或相反两个操作数不能都是存储器

传送指令很灵活,但主存之间的直接传送却不允许

段寄存器的操作有一些限制 段寄存器属专用寄存器,对他们的

操作能力有限

示例示例

示例示例

示例示例

Page 11: 8086 指令系统概述

第 3 章第 3 章 交换指令 XCHG ( exchange )

把两个地方的数据进行互换

寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据

XCHGXCHG

XCHG reg,reg/mem

; reg reg/mem

XCHG reg,reg/mem

; reg reg/mem

例题 3.6例题 3.6

例题 3.5例题 3.5

Page 12: 8086 指令系统概述

第 3 章第 3 章 3.3.2 堆栈操作指令

堆栈是一个“后进先出FILO” (或说“先进后出 FILO” )的主存区域,位于堆栈段中;SS 段寄存器记录其段地址

堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器 SP 指定

栈顶是地址较小的一端(低端),栈底不变

. . .

. . .

偏移地址 物理地址00000H(低地址)

90000H

9E200H

9FFFFHFFFFH

(SP)=E200H

0000H

堆栈段

Page 13: 8086 指令系统概述

第 3 章第 3 章 堆栈的操作

堆栈只有两种基本操作:进栈和出栈,对应两条指令 PUSH 和 POP

PUSH;进栈指令先使堆栈指针 SP 减 2 ,然后把一个字操作数存入堆栈顶部

PUSH;进栈指令先使堆栈指针 SP 减 2 ,然后把一个字操作数存入堆栈顶部

POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针 SP加 2

POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针 SP加 2

Page 14: 8086 指令系统概述

第 3 章第 3 章 进栈指令 PUSH

push axpush

[2000h]

PUSH r16/m16/seg; SP←SP - 2; SS:[SP]←r16/m16/seg

PUSH r16/m16/seg; SP←SP - 2; SS:[SP]←r16/m16/seg

PUSHPUSH

Page 15: 8086 指令系统概述

第 3 章第 3 章 出栈指令 POP

pop dxpop [2000h]

POP r16/m16/seg; r16/m16/seg←SS:[SP]; SP←SP + 2

POP r16/m16/seg; r16/m16/seg←SS:[SP]; SP←SP + 2

POPPOP

Page 16: 8086 指令系统概述

第 3 章第 3 章 堆栈的特点

堆栈操作的单位是字,进栈和出栈只对字量 字量数据从栈顶压入和弹出时,都是低地址

字节送低字节,高地址字节送高字节 堆栈操作遵循先进后出原则,但可用存储器

寻址方式随机存取堆栈中的数据 堆栈常用来

临时存放数据 传递参数 保存和恢复寄存器

例题 3.8例题 3.8

Page 17: 8086 指令系统概述

第 3 章第 3 章 3.3.3 标志寄存器传送指令

标志寄存器传送指令用来传送标志寄存器 FLAGS 的内容,方便进行对各个标志位的直接操作

有 2 对 4 条指令 低 8 位传送: LAHF 和 SAHF16 位传送: PUSHF 和 POPF

Page 18: 8086 指令系统概述

第 3 章第 3 章 标志低字节进出 AH 指令

LAHF; AH←FLAGS 的低字节 LAHF 指令将标志寄存

器的低字节送寄存器 AH

SF/ZF/AF/PF/CF 状态标志位分别送入 AH 的第 7/6/4/2/0 位,而 AH 的第 5/3/1 位任意

SAHF; FLAGS 的低字节← A

H SAHF 将 AH 寄存器内容送 FLAGS 的低字节

用 AH 的第 7/6/4/2/0位相应设置 SF/ZF/AF/ PF/CF 标志

Page 19: 8086 指令系统概述

第 3 章第 3 章 标志寄存器进出堆栈指令

PUSHF; SP←SP - 2; SS:[SP]←FLAGS PUSHF 指令将标志寄

存器的内容压入堆栈,同时栈顶指针 SP 减 2

POPF; FLAGS←SS:[SP]; SP←SP + 2 POPF 指令将栈顶字单

元内容送标志寄存器,同时栈顶指针 SP 加 2

例题 3.9例题 3.9

Page 20: 8086 指令系统概述

第 3 章第 3 章 3.3.4 地址传送指令

地址传送指令将存储器单元的逻辑地址送至指定的寄存器 有效地址传送指令 LEA 指针传送指令 LDS 和 LES

注意不是获取存储器单元的内容

Page 21: 8086 指令系统概述

第 3 章第 3 章有 效 地 址 传 送 指 令 LEA ( load EA )

将存储器操作数的有效地址传送至指定的 16 位寄存器中

例题 3.9例题 3.9

LEA r16,mem; r16←mem 的有效地址 EA

LEA r16,mem; r16←mem 的有效地址 EA

LEALEA

Page 22: 8086 指令系统概述

第 3 章第 3 章 3.3.5 输入输出指令

8086 通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口( Port )即 I/O 地址

8086 用于寻址外设端口的地址线为 16条 , 端 口 最多为 216 = 65536 ( 64K )个,端口号为 0000H ~ FFFFH

每个端口用于传送一个字节的外设数据

Page 23: 8086 指令系统概述

第 3 章第 3 章 输入输出寻址方式

8086 的端口有 64K 个,无需分段,设计有两种寻址方式

直接寻址:只用于寻址 00H ~ FFH 前256 个端口,操作数 i8 表示端口号

间接寻址:可用于寻址全部 64K 个端口, DX 寄存器的值就是端口号

对大于 FFH 的端口只能采用间接寻址方式

Page 24: 8086 指令系统概述

第 3 章第 3 章 输入指令 IN

将外设数据传送给 CPU 内的 AL/AX

IN AL,i8;字节输入: AL←I/O 端口( i8 直接寻址)IN AL,DX;字节输入: AL←I/O 端口( DX 间接寻址)IN AX,i8;字输入: AX←I/O 端口( i8 直接寻址)IN AX,DX;字输入: AX←I/O 端口( DX 间接寻址)

IN AL,i8;字节输入: AL←I/O 端口( i8 直接寻址)IN AL,DX;字节输入: AL←I/O 端口( DX 间接寻址)IN AX,i8;字输入: AX←I/O 端口( i8 直接寻址)IN AX,DX;字输入: AX←I/O 端口( DX 间接寻址)

ININ

例题 3.10例题 3.10

演示演示

Page 25: 8086 指令系统概述

第 3 章第 3 章 输出指令 OUT

将 CPU 内的 AL/AX 数据传送给外设

OUT i8,AL;字节输出: I/O 端口← AL ( i8 直接寻址)OUT DX,AL;字节输出: I/O 端口← AL ( DX 间接寻址)OUT i8,AX;字输出: I/O 端口← AX ( i8 直接寻址)OUT DX,AX;字输出: I/O 端口← AX ( DX 间接寻址)

OUT i8,AL;字节输出: I/O 端口← AL ( i8 直接寻址)OUT DX,AL;字节输出: I/O 端口← AL ( DX 间接寻址)OUT i8,AX;字输出: I/O 端口← AX ( i8 直接寻址)OUT DX,AX;字输出: I/O 端口← AX ( DX 间接寻址)

OUTOUT

例题 3.11例题 3.11

演示演示

Page 26: 8086 指令系统概述

第 3 章第 3 章 3.4 算术运算类指令

四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算

请注意算术运算类指令对标志的影响 掌握: ADD/ADC/INC 、 SUB/SBB/DEC/CMP 熟悉: NEG/CBW/CWD 、 MUL/IMUL/DIV/IDI

V 理解: DAA/DAS 、 AAA/ AAS/AAM/AAD

Page 27: 8086 指令系统概述

第 3 章第 3 章 加法指令 ADD

ADD 指令将源与目的操作数相加,结果送到目的操作数

ADD 指令按状态标志的定义相应设置

ADDADD

ADD reg,imm/reg/mem; reg←reg + imm/reg/mem

ADD mem,imm/reg; mem←mem + imm/reg

ADD reg,imm/reg/mem; reg←reg + imm/reg/mem

ADD mem,imm/reg; mem←mem + imm/reg

例题 3.12例题 3.12

Page 28: 8086 指令系统概述

第 3 章第 3 章 带进位加法指令 ADC

ADC 指令将源与目的操作数相加,再加上进位 CF 标志,结果送到目的操作数

ADC 指令按状态标志的定义相应设置 ADC 指令主要与 ADD 配合,实现多精度加法运算

ADCADC

ADC reg,imm/reg/mem; reg←reg + imm/reg/mem + CF

ADC mem,imm/reg; mem←mem + imm/reg+ CF

ADC reg,imm/reg/mem; reg←reg + imm/reg/mem + CF

ADC mem,imm/reg; mem←mem + imm/reg+ CF

例题 3.13例题 3.13

Page 29: 8086 指令系统概述

第 3 章第 3 章 增量指令 INC ( increment )

INC 指令对操作数加 1 (增量)INC 指令不影响进位 CF 标志,按

定义设置其他状态标志

INCINC

INC reg/mem; reg/mem←reg/mem + 1

INC reg/mem; reg/mem←reg/mem + 1

inc bxinc byte ptr [bx]

Page 30: 8086 指令系统概述

第 3 章第 3 章 减法指令 SUB ( subtract )

SUB 指令将目的操作数减去源操作数,结果送到目的操作数

SUB 指令按照定义相应设置状态标志

SUBSUB

SUB reg,imm/reg/mem; reg←reg - imm/reg/mem

SUB mem,imm/reg; mem←mem - imm/reg

SUB reg,imm/reg/mem; reg←reg - imm/reg/mem

SUB mem,imm/reg; mem←mem - imm/reg

例题 3.14例题 3.14

Page 31: 8086 指令系统概述

第 3 章第 3 章 带借位减法指令 SBB

SBB 指令将目的操作数减去源操作数,再减去借位 CF (进位),结果送到目的操作数。

SBB 指令按照定义相应设置状态标志 SBB 指令主要与 SUB 配合,实现多精度减法

运算

SBBSBB

SBB reg,imm/reg/mem; reg←reg - imm/reg/mem - CF

SBB mem,imm/reg; mem←mem - imm/reg- CF

SBB reg,imm/reg/mem; reg←reg - imm/reg/mem - CF

SBB mem,imm/reg; mem←mem - imm/reg- CF

例题 3.15例题 3.15

Page 32: 8086 指令系统概述

第 3 章第 3 章 减量指令 DEC ( decrement )

DEC 指令对操作数减 1 (减量)DEC 指令不影响进位 CF 标志,按定义设置其他状态标志

DECDEC

DEC reg/mem; reg/mem←reg/mem - 1

DEC reg/mem; reg/mem←reg/mem - 1

dec cxdec word ptr [si]

INC 指令和 DEC 指令都是单操作数指令

主要用于对计数器和地址指针的调整

Page 33: 8086 指令系统概述

第 3 章第 3 章 比较指令 CMP ( compare )

CMP 指令将目的操作数减去源操作数,按照定义相应设置状态标志

CMP 指令执行的功能与 SUB 指令,但结果不回送目的操作数

CMP reg,imm/reg/mem; reg - imm/reg/mem

CMP mem,imm/reg; mem - imm/reg

CMP reg,imm/reg/mem; reg - imm/reg/mem

CMP mem,imm/reg; mem - imm/reg

例题 3.16例题 3.16

CMPCMP

Page 34: 8086 指令系统概述

第 3 章第 3 章 2.4.3 乘法指令

MUL r8/m8;无符号字节乘法; AX←AL×r8/m8MUL r16/m16;无符号字乘法; DX.AX←AX×r16/m

16

IMUL r8/m8;有符号字节乘法; AX←AL×r8/m8IMUL r16/m16;有符号字乘法; DX.AX←AX×r16/m

16

例题 3.17例题 3.17说明说明

Page 35: 8086 指令系统概述

第 3 章第 3 章 3.4.4 除法指令

DIV r8/m8 ;无符号字节除法:AL←AX÷r8/m8 的商, Ah←AX÷r8/m8 的余数DIV r16/m16 ;无符号字除法:; AX←DX.AX÷r16/m16 的商, DX←DX.AX÷r16/m16

的余数IDIV r8/m8 ;有符号字节除法:AL←AX÷r8/m8 的商, Ah←AX÷r8/m8 的余数IDIV r16/m16 ;有符号字除法:; AX←DX.AX÷r16/m16 的商, DX←DX.AX÷r16/m16

的余数

例题 3.18例题 3.18

说明说明

Page 36: 8086 指令系统概述

第 3 章第 3 章 3.4.5 符号扩展指令

CBW ; AL 的符号扩展至 AH;如 AL 的最高有效位是 0 ,则 AH = 00; AL 的最高有效位为 1 ,则 AH = FFH 。 A

L 不变CWD ; AX 的符号扩展至 DX;如 AX 的最高有效位是 0 ,则 DX = 00; AX 的最高有效位为 1 ,则 DX = FFFFH 。

AX 不变什么是符号扩展符号扩展指令常用于获得倍长的数据

不 影 响 标 志位

例题 3.19例题 3.19

例题 3.20例题 3.20

Page 37: 8086 指令系统概述

教学要求( 1 )

1. 熟悉 8086 的基本参数、堆栈工作原理、指令对标志的影响、符号扩展的含义、压缩和非压缩 BCD 的格式

2. 掌握基本指令: MOV / XCHG 、 PUSH /POP 、 LEA ; ADD / ADC / INC 、 SUB

/ SBB / DEC / CMP

Page 38: 8086 指令系统概述

教学要求( 2 )

3. 熟悉特色指令: NEG 、 CBW / CWD ; IN/ OUT ; MUL / IMUL 、 DIV / IDIV 、 DAA / DAS 、 AAA / AAS

4. 了解不常使用的指令: XLAT / LAHF / SAH

F / PUSHF / POPF 、 LDS / LES ; AA

M / AAD ;