80X86指令系统和寻址方式

  • 格式:doc
  • 大小:200.00 KB
  • 文档页数:11

第3章 80X86指令系统和寻址方式 1.教学目的:掌握微机寻址方式和8086微处理器指令系统 2.教学要求: ①熟悉指令构成,了解指令执行时间。 ②掌握8种寻址方式。 ③熟悉指令系统的六大类指令,要求结合上机实践熟练掌握常用指令。 ④结合指令举例逐步熟悉和掌握汇编语言程序的格式,以及典型程序段。 ⑤了解80x86和PENTIUM CPU扩充和增加的指令 3.教学重点: ①寻址方式 ②8086微处理器指令系统 4.掌握难点: ①寄存器的应用 ②存储器的结构 5.教学进程安排:P42~101 6.教学方法: 课堂讲授 7.教学内容摘要:

3.1 指令系统概述 每条指令由两部分组成:操作码字段和地址码字段。格式如图3.1所示:

图3.1 指令格式 1.操作码字段 2.地址码字段 3.称为寻址方式 (1)立即寻址 (2)寄存器寻址 (3)存储器寻址

3.2 8088/8086 CPU的寻址方式 寻找和获得操作数或操作数存放地址或指令转移地址的方法称为寻址方式。8088/8086 CPU的寻址分为两类,即数据寻址和指令寻址。

3.2.1 数据寻址方式 1. 立即寻址方式 【例3-2】 MOV AL,0FFH 【例3-3】 MOV AX,1234H

操作码 操作数(地址码) 2. 寄存器寻址 【例3-4】 MOV AX,BX MOV AL,BL 3. 存储器寻址方式 (1) 直接寻址方式 【例3-5】假设TABLE是在数据段定义的一个字节数组的首地址标号(变量名),其偏移地址为1000H,则指令 MOV AL,TABLE 或 MOV AL,TABLE+2 或 MOV AL,[TABLE] 或 MOV AL,[TABLE+2] 或 MOV AL,[1000H] 或 MOV AL,[1000H+2] (2)寄存器间接寻址方式 【例3-8】 MOV AX,[BX] MOV AX,[SI] 【例3-9】 MOV AX,[BX] 如果(DS)=3000H,(BX)=1010H,(31010H)=12H,(31011H)=24H。则操作数的20位物理地址=30000H+1010H=31010H,操作的示意图如图3.4所示。 指令执行完以后,(AX)=2412H。

图3.4 寄存器间接寻址操作图 【例3-10】MOV AX,ES:[BX] (3)寄存器相对寻址 【例3-11】TABLE是在数据段定义的一个字节数组的首地址标号(也称变量名),则: MOV SI,5 MOV AL,TABLE[SI] ;可以写为:MOV AL,[TABLE+SI] ABC EQU 5 LEA SI,TABLE ;LEA是取偏址指令,本句是TABLE偏址→SI MOV AL,ABC[SI] ;可以写为:MOV AL,[ABC+SI] 如:[BX+6]、[BP-100H]、[SI+OFFSET TABLE]都是寄存器相对寻址方式。 【例3-12】TABLE是数据段中定义的一个变量,假设它在数据段中的偏移地址为0100H,有指令: MOV AX,TABLE[SI] (4)基址变址寻址 【例3-13】 MOV AX,[BX] [SI] 或写为: MOV AX,[BX+SI] 【例3-14】MOV AX,[BX] [SI](或写为MOV AX,[BX+SI]) 若(DS)=2000H,(BX)=0500H,(SI)=0010H 则偏移地址=0500H+0010H=0510H 20位物理地址=20000H+0510H

31010H 存储器 AX 30000H

12H 24H 数据段 =20510H 如(20510H)=12H,(20511H)=34H, 操作的示意图如图3.5所示:

图3.5 基址变址寻址操作示意图 (5) 相对基址变址寻址 【例3-15】 MOV AL,TABLE[BX][SI] 【例3-16】TABLE是数据段中定义的一个符号地址,假设它在数据段中的偏移地址是1000H。 MOV AX,TABLE[BX][DI] 若(DS)=2000H,(BX)=0100H,(DI)=0020H 则偏移地址=1000H+0100H+0020H=1120H 20位物理地址=20000H+1120H=21120H 如(21120H)=12H,(21121H)=34H,操作的示意图如图3.6所示。 执行完指令以后,(AX)=3412H。

图3.6 相对基址变址寻址操作示意图 3.2.2指令寻址方式 指令寻址方式是指确定下一条要执行指令的地址的方法。这里只介绍有关转移指令及调用指令的指令寻址方式。 1. 段内直接寻址 这种寻址方式的汇编格式有三种: ①指令名 SHORT 转移目标地址标号 ②指令名 转移目标地址标号 ③指令名 NEAR PTR 转移目标地址标号 2. 段间直接寻址 这种寻址方式的汇编格式有以下两种形式: ①指令名 FAR PTR 转移地址标号 ②指令名 段地址:段内偏移地址 3. 段内间接寻址 这种寻址方式的汇编格式为:

20510H 存储器 AX 20000H

12H 34H 数据段

代码段

位移量TABLE 数据段

代码段

21120H

存储器 AX 20000H

OP 00H 10H

12H 34H

OP ①指令名 16位寄存器名 ②指令名 WORD PTR 存储器寻址方式 4. 段间间接寻址 这种寻址方式的汇编格式为: 指令名 DWORD PTR 存储器寻址方式

3.3 8088/8086 CPU的指令系统

3.3.1 数据传送指令 8086/8088有4类传送指令,分别是:①通用传送指令,②累加器专用传送指令,③地址传送指令,④标志传送指令 1. 通用传送指令

操作码 MOV PUSH POP PUSHF POPF XCHG 操作功能 通用传送 入栈 出栈 标志压栈 标志出栈 交换 ⑴通用传送指令MOV ①从寄存器到寄存器 ②从寄存器到段寄存器 ③从寄存器到存储器 ④从段寄存器到寄存器 ⑤从存储器到寄存器 ⑥从段寄存器到存储器 ⑦从存储器到段寄存器 ⑧从立即数到寄存器 ⑨从立即数到存储器

CS DS、SS、ES 通用寄存器

AX、BX、CX、DX、 SI、DI、BP、SP

立即数 存储器数 图3.7 MOV指令的九种形式 ⑵进栈指令PUSH及出栈指令POP ①PUSH指令 ②POP指令 【例3-18】MOV AX,1234H PUSH AX 设执行前(SS)=2000H,(SP)=00FEH 指令执行过程如图3.8所示。执行后(SS)=2000H,(SP)=00FCH

(SP)→ 2000:0000H 2000:0001H

2000:00FEH 2000:00FFH

2000:00FCH

2000:00FDH

┋(SP)→

2000:0000H 2000:0001H

2000:00FEH 2000:00FFH

34H12H

指令执行前情况 指令执行后情况 图3.8 压栈操作示意图 ⑶PUSHF ⑷POPF 【例3-19】若想设置TF=1,程序段如下: PUSHF POP AX OR AH,01H ;修改TF位 PUSH AX POPF ⑸XCHG指令 2. 累加器专用传送指令 (1)IN 输入指令 (2)OUT 输出指令 (3)XLAT 换码指令 3. 地址传送指令 操作码 LEA LDS LES 操作功能 取偏址 取偏址和数据段值 取偏址和附加数据段值

4. 标志传送指令

3.3.2 算术运算指令 1. 加法指令 操作码 ADD ADC INC 操作功能 加法 带进位加法 增量 2. 减法指令

操作码 SUB SBB DEC NEG CMP 操作功能 减法 带借位减法 减1 求补 比较 3. 乘法指令

⑴MUL 无符号数乘法指令 汇编格式:MUL 源操作数 执行的操作:若为字节操作:(AX)←(AL)×源操作数 若为字操作:(DX-AX)←(AX)×源操作数 ⑵IMUL 有符号数乘法指令 4. 除法指令

⑴DIV 无符号数除法指令 汇编格式:DIV 源操作数 ⑵IDIV 有符号数除法指令 汇编格式:IDIV 源操作数

CF PF AF ZF SF TF IF DF OF CF PF AF ZF SF PSW

AH