第3章指令系统和寻址方式 1.教学目的:掌握微机寻址方式和8086微处理器指令系统 2.教学要求 ①熟悉指令构成,了解指令执行时间。 ②掌握8种寻址方式 ③熟悉指令系统的六大类指令,要求结合上机实践熟练掌握常用指令。 ④结合指令举例逐步熟悉和掌握汇编语言程序的格式,以及典型程序段。 ⑤了解80x86和 PENTIUM CPU扩充和增加的指令 3.教学重点: ①寻址方式 ②8086微处理器指令系统 4.掌握难点 ①寄存器的应用 ②存储器的结构 5.教学进程安排:P42~101 6.教学方法 课堂讲授 7.教学内容摘要 3.1指令系统概述 每条指令由两部分组成:操作码字段和地址码字段。格式如图3.1所示 匚操作码操作数(地址码习 图3.1指令格式 操作码字段 地址码字段 称为寻址方式 (1)立即寻址 (2)寄存器寻址 (3)存储器寻址 3.28088/8086CPU的寻址方式 寻找和获得操作数或操作数存放地址或指令转移地址的方法称为寻址方式。8088/8086CPU 的寻址分为两类,即数据寻址和指令寻址
第3章 指令系统和寻址方式 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,OFFH 【例3-3】 MOV AX,1234H 2.寄存器寻址 【例3-4】 MOV AL, BI 3.存储器寻址方式 (1)直接寻址方式 【例3-5】假设 TABLE是在数据段定义的一个字节数组的首地址标号(变量名),其偏移地 址为100OH,则指令 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 X, [SI] 【例3-9】 MOV AX,[E 如果(DS)=3000H,(BX)=1010H,(31010H)=12H,(31011H)=24H。则操作数的20位物 理地址=30000H+1010H=31010H,操作的示意图如图3.4所示 指令执行完以后,(AX)=2412H 存储器 30000H 31010H 数据段 图3.4寄存器间接寻址操作图 【例3-10】 MOV AX,ES:[BX] (3)寄存器相对寻址 【例3-11】 TABLE是在数据段定义的一个字节数组的首地址标号(也称变量名),则 MOV AL, TABLE[SI] 可以写为:MVAL,[ 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.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)基址变址寻址 31010H 存储器 AX 30000H 12H 24H 数据段
【例3-13】 MOV AX, [BX] [SI] 或写为 MOV [BX+SII 【例3-14】 MOV AX,[BX][SI](或写为 MOV AX,[BX+SI]) 若(DS)=2000H,(BX)=0500H,(SI)=0010H 则偏移地址=0500H+0010H=0510H 20位物理地址=20000H+051OH 如(20510H)=12H,(20511H)=34H 操作的示意图如图3.5所示: 存储器 代码段 2000OH 20510H 34H 图35基址变址寻址操作示意图 (5)相对基址变址寻址 【例3-15】 MOv AL, TABLE[BX][SI] 【例3-16】ABLE是数据段中定义的一个符号地址,假设它在数据段中的偏移地址是1000H MOv AX, TABLE [BX] [DI] 若(DS)=2000H,(BX)=0100H,(DI)=0020H 则偏移地址=1000H+0100H+0020H=1120H 0位物理地址=20000+1120H=21120H 如(21120H)=12H,(21121H)=34H,操作的示意图如图3.6所示。 执行完指令以后,(AX)=3412H 存储器 位移量 TABLE 20000H 21120H 34H 数据段 图3.6相对基址变址寻址操作示意图 322指令寻址方式 指令寻址方式是指确定下一条要执行指令的地址的方法。这里只介绍有关转移指令及调用 指令的指令寻址方式 1.段内直接寻址 这种寻址方式的汇编格式有三种: ①指令名 SHORT转移目标地址标号 ②指令名转移目标地址标号 ③指令名 NEAR PTR转移目标地址标号
【例 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 =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 转移目标地址标号 20510H 存储器 AX 20000H 12H 34H 数据段 代码段 位移量 TABLE 数据段 代码段 21120H 存储器 AX 20000H OP 00H 10H 12H 34H OP
2.段间直接寻址 这种寻址方式的汇编格式有以下两种形式: ①指令名 FAR PTR转移地址标号 ②指令名段地址:段内偏移地址 3.段内间接寻址 这种寻址方式的汇编格式为 ①指令名16位寄存器名 ②指令名 WORD PTR存储器寻址方式 4.段间间接寻址 这种寻址方式的汇编格式为 指令名 DWORD PTR存储器寻址方式 3.380888086CPU的指令系统 3.3.1数据传送指令 8086/8088有4类传送指令,分别是:①通用传送指令,②累加器专用传送指令,③地址 传送指令,④标志传送指令 1.通用传送指令 PUSH XCHG H栈 标志压 (1)通用传送指令Mov ①从寄存器到寄存器 ②从寄存器到段寄存器 ③从寄存器到存储器 ④从段寄存器到寄存器 ⑤从存储器到寄存器 ⑥从段寄存器到存储器 ⑦从存储器到段寄存器 ⑧从立即数到寄存器 ⑨从立即数到存储器 通用寄存器 DS、SS、ES Ax、BX、CX、DX SI、DI、BP、SP 立即数 存储器数 图3.7M0V指令的九种形式 (2进栈指令PUSH及出栈指令POP ①PUSH指令
2. 段间直接寻址 这种寻址方式的汇编格式有以下两种形式: ①指令名 FAR PTR 转移地址标号 ②指令名 段地址:段内偏移地址 3. 段内间接寻址 这种寻址方式的汇编格式为: ①指令名 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 2000:0000H 2000:000lH 2000:000lH 2000:00FCH (SP)→2000:00FEH 图38压栈操作示意2000 (3)PUSHF 200 00: OOFFH 2000:00FEH (4)POPF 2000:00FFH 【例3-19】若想设 PUSHF 指安孰行醋如下 指令执行后情况 AH,O1H:修改TF位 PUSH A POPF (5)XCHG指令 2.累加器专用传送指令 (1)IN 输入指令 (2)OUT输出指令 (3)XLAT换码指令 3.地址传送指令 4.标志传送指令 Rswb叫平珍四 F叫z 3.3.2算术运算指令 1.加法指令 操作码 作功能 带进位加法 2.减法指令 3.乘法指令 (1)MUL无符号数乘法指令
②POP 指令 【例 3-18】MOV AX,1234H PUSH AX 设执行前(SS)=2000H,(SP)=00FEH 指令执行过程如图 3.8 所示。执行后(SS)=2000H,(SP)=00FCH 图 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 无符号数乘法指令 OF DF IF TF SF ZF AF PF CF SF ZF AF PF CF PSW AH (SP)→ 2000:0000H 2000:0001H 2000:00FEH 2000:00FFH 2000:00FCH 2000:00FDH ┋ (SP)→ 2000:0000H 2000:0001H 2000:00FEH 2000:00FFH 34H 12H 指令执行前情况 指令执行后情况