第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 指令执行前情况 指令执行后情况
汇编格式:MUL源操作数 执行的操作:若为字节操作:(AX)←(AL)×源操作数 若为字操作:(DX-AX)←(AX)×源操作数 (2)IMUL有符号数乘法指令 除法指令 (1)DIV无符号数除法指令 汇编格式:DIV源操作数 (2)IDIV有符号数除法指令 汇编格式:IDⅣV源操作数 5.符号扩展指令 (1)CBW:字节转换为字指令 (2)CWD:字转换为双字指令 6.十进制调整指令 (1)压缩的BCD码调整指令 ①DA ②DAS (2)非压缩的BCD码调整指令 ②AA 3.3.3逻辑运算和移位指令 1.逻辑运算指令 " 表3-1逻辑运算指令对标志位的影响 指令 SF AF 0或1 0或1 0或1 0或1 或1 0或1 0或1 0或1 0或1 无定义 TEST 0或1 0或1 0或 无定义 不影响 不影响 不影响 不影响 移位指令 MSB LSB (a逻辑左移指令操作示意图 (b逻辑右移指令操作示意图 MSB LSB MSB (c)算术左移指令操作示意图 (d)算术右移指令操作示意图 e)小循环左移指令操作示意图 (D小循环右移指令操作示意图 LSB LSB
汇编格式:MUL 源操作数 执行的操作:若为字节操作:(AX)←(AL)×源操作数 若为字操作:(DX-AX)←(AX)×源操作数 ⑵IMUL 有符号数乘法指令 4. 除法指令 ⑴DIV 无符号数除法指令 汇编格式:DIV 源操作数 ⑵IDIV 有符号数除法指令 汇编格式:IDIV 源操作数 5. 符号扩展指令 ⑴CBW:字节转换为字指令 ⑵CWD:字转换为双字指令 6. 十进制调整指令 ⑴压缩的 BCD 码调整指令 ①DAA ②DAS ⑵非压缩的 BCD 码调整指令 ①AAA ②AAS 3.3.3 逻辑运算和移位指令 1. 逻辑运算指令 操作码 AND OR NOT XOR TEST 操作功能 与 或 非 异或 测试 表 3-1 逻辑运算指令对标志位的影响 指令 OF CF SF PF ZF AF AND =0 =0 0 或 1 0 或 1 0 或 1 无定义 OR =0 =0 0 或 1 0 或 1 0 或 1 无定义 XOR =0 =0 0 或 1 0 或 1 0 或 1 无定义 TEST =0 =0 0 或 1 0 或 1 0 或 1 无定义 NOT 不影响 不影响 不影响 不影响 不影响 不影响 2. 移位指令 (a)逻辑左移指令操作示意图 CF 0 MSB LSB 0 CF MSB LSB (b)逻辑右移指令操作示意图 CF 0 MSB LSB (c)算术左移指令操作示意图 CF MSB LSB (d) 算术右移指令操作示意图 CF MSB LSB (e) 小循环左移指令操作示意图 CF MSB LSB (f) 小循环右移指令操作示意图 CF MSB LSB CF MSB LSB
图3.10循环移位指令操作 【例3-37】将(AX)乘以10 3.3.4串操作指令 有关串操作的指令有5条,分别为:①MOVS②LODS③STos④CMPs⑤SCA 1.串传送指令 (1)格式 REP MOVS/LODS/STOS (2)执行的操作: (3)MOS指令 (4)LODs指令 (5)ST0S指令 2.串比较指令 (1) REPE/REPZ CMPS/SCAS (2) REPNE/REPNZ CMPS/SCAS (3)CMPS指令 (4)SCAS指令 【例3-38】假设有一起始地址为 BLOCK,长度为100个字节的存储区,现要对这一存储区 进行测试,看其中是否有内容为0OH的存储单元。 3.3.5控制转移指令 1.无条件转移指令JMP (1)段内直接转移 ①段内直接短转移 ②段内直接近转移 (2)段内间接转 (3)段间直接转移 操作码 条件转移指令 F 共2个字节 表3-2简单条件转移16位寄存器编号 汇獷语言指令名 测试条件 Z(或J) 结果为零(或相等)则转移 JNZ(或JNE) 结果不为零(或不相等)则转移 结果为负则转移 结果为正则转移
图 3.10 循环移位指令操作 【例 3-37】将(AX)乘以 10 3.3.4 串操作指令 有关串操作的指令有 5 条,分别为:①MOVS ②LODS ③STOS ④CMPS ⑤SCAS 1. 串传送指令 (1)格式: REP MOVS/LODS/STOS (2)执行的操作: (3)MOVS 指令 (4)LODS 指令 (5)STOS 指令 2. 串比较指令 (1)REPE/REPZ CMPS/SCAS (2)REPNE/REPNZ CMPS/SCAS (3)CMPS 指令 (4)SCAS 指令 【例 3-38】假设有一起始地址为 BLOCK,长度为 100 个字节的存储区,现要对这一存储区 进行测试,看其中是否有内容为 00H 的存储单元。 3.3.5 控制转移指令 1. 无条件转移指令 JMP ⑴段内直接转移 ①段内直接短转移 ②段内直接近转移 ⑵段内间接转 ⑶ 段间直接转移 2. 条件转移指令 表 3-2 简单条件转移指令表 汇编语言指令名 测试条件 操作 JZ(或 JE) ZF=1 结果为零(或相等)则转移 JNZ(或 JNE) ZF=0 结果不为零(或不相等)则转移 JS SF=1 结果为负则转移 JNS SF=0 结果为正则转移 共 2 个字节 16 位寄存器编号 FF 操作码
结果溢出则转移 JNO 结果无溢出则转移 JP(或JPE 奇偶位为1则转移 JNP(或JPO) PF=O 奇偶位为0则转移 JC(或JNAE或JB) 有进位则转移 无进位则转移 表3-3无符号数比较条件转移指令表 汇编语言指令名 测试条件 操作 JB(或JNAE或JC) 低于,或不高于或等于,或进位位为1则转移 JNB(或JAE或JNC) CF=0 不低于,或高于或等于,或进位位为0则转移 JA(或JNBE) CFVZF=0高于,或不低于或等于则转移 JNA(或JBE) CF∨ZF=1不高于,或低于或等于则转移 表3-4有符号数比较条件转移指令 汇编语言指令名 测试条件 操作 几L(或JNGE) 小于,或不大于或等于则转移 JNL(或JGE) SFVOF=O 不小于,或大于或等于则转移 JG(或JNLE) (SF∨OF)VZF=0 大于,或不小于或等于则转移 JNG(或JLE) (SFVOF) VZF=l 不大于,或小于或等于则转移 3.子程序调用和返回指令 1CALL调用指令 ①段内直接调用 ②段间直接调用 ③段内间接调用 ④段间间接调用 2)RET返回指令 返回指令 段内返回 段间返回 段内带立即教返回 段间带立即数返回 执行操作|(P←(sP)+1,(P)-(sP)+,(sP)(P)-(s)+1,(sP)(IP)←(sp)+1,(sp) (SP)←(SP)+2 (SP)←(SP)+2 (CS)-(sP)+,(sP)(sP)-(sP)+16位表达式(Cs)-(sP)+1,(sP) (SP)←(SP)+2 (SP)←(SP)+2 (SP)(SP)+2 4.循环指令 (1)循环指令共有3条:L0OP、 LOOPZ/ LOOPE、 LOOPNZ/ LOOPNE, (2)汇编格式:指令名循环入口的地址标号 (3)执行的操作: ①(CX)←(CX)-1 ②判断测试条件,若条件成立,则: (IP)←(IP)+8位位移量 表3-5循环指令测试条件 指令名 测试条件 LOOP 无条件循环 LOOPNZ/LOOPNE (CX)≠0且ZF=1 当为零或相等时循环 LOOPNZ CX)≠0且Z 当不为零或不相等时循环 【例3-54】循环指令应用于软件延时 5.中断指令和中断返回指令 表3-6中断指令
JO OF=1 结果溢出则转移 JNO OF=0 结果无溢出则转移 JP(或 JPE) PF=1 奇偶位为 1 则转移 JNP(或 JPO) PF=0 奇偶位为 0 则转移 JC(或 JNAE 或 JB) CF=1 有进位则转移 JNC(或 JAE 或 JNB) CF=0 无进位则转移 表 3-3 无符号数比较条件转移指令表 汇编语言指令名 测试条件 操作 JB(或 JNAE 或 JC) CF=1 低于,或不高于或等于,或进位位为 1 则转移 JNB(或 JAE 或 JNC) CF=0 不低于,或高于或等于,或进位位为 0 则转移 JA(或 JNBE) CF∨ZF=0 高于,或不低于或等于则转移 JNA(或 JBE) CF∨ZF=1 不高于,或低于或等于则转移 表 3-4 有符号数比较条件转移指令 汇编语言指令名 测试条件 操作 JL(或 JNGE) SF∨OF=1 小于,或不大于或等于则转移 JNL(或 JGE) SF∨OF=0 不小于,或大于或等于则转移 JG(或 JNLE) (SF∨OF)∨ZF=0 大于,或不小于或等于则转移 JNG(或 JLE) (SF∨OF)∨ZF=1 不大于,或小于或等于则转移 3. 子程序调用和返回指令 ⑴CALL 调用指令 ①段内直接调用 ② 段间直接调用 ③ 段内间接调用 ④ 段间间接调用 ⑵RET 返回指令 返回指令 段内返回 段间返回 段内带立即数返回 段间带立即数返回 汇编格式 RET RET RET 表达式 RET 表达式 执行操作 (IP)←((S P)+ 1, (SP)) (SP)←(SP)+2 (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (CS)←((SP)+1,(SP)) (SP)←(SP)+2 (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (SP)←(SP)+16 位表达式 (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (CS)←((SP)+1,(SP)) (SP)←(SP)+2 (SP)←(SP)+16 位表达式 4. 循环指令 (1)循环指令共有 3 条: LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE, (2)汇编格式:指令名 循环入口的地址标号 (3)执行的操作: ①(CX)←(CX)-1 ②判断测试条件,若条件成立,则: (IP)←(IP)+8 位位移量 表 3-5 循环指令测试条件 指令名 测试条件 功能 LOOP (CX)≠0 无条件循环 LOOPNZ/LOOPNE (CX)≠0 且 ZF=1 当为零或相等时循环 LOOPNZ (CX)≠0 且 ZF=0 当不为零或不相等时循环 【例 3-54】循环指令应用于软件延时 5. 中断指令和中断返回指令 表 3-6 中断指令
INTO INTO IRET 执行操作(SP)←(SP)-2 若OF=1则 IP)←((SP)+1,(SP)) (SP)+1,($P))←(PSw)(SP)←(SP)-2 P)+2 IF=0, TF=0 (($P)+1,(SP)←(PSW)Cs)←(SP)+1,(SP) IF=0, TF=0 SP)←(SP)+2 (SP)+1,(SP))←(Cs)(SP)←(SP)-2 PSW)←((SP)+1,(SP)) (SP)←(SP)-2 (SP)+1,(SP)←(CS)lsP)←(sP)+2 (SP)+1,(sP))←(IP)(sP)←(sp)-2 ((SP)+1,(SP))←(IP) (CS)(n×4+2) (IP)←(0010H) (CS)←(0012H) 说明本条指令除把IF和T位置本条指令除把T和TF位置0 0外,不影响其余的标志位。〖外,不影响其余的标志位 3.3.6处理器控制指令 1.标志设置指令 表3-7标志设置指令 指令格式 指令功能 执行的操作 进位位置0指令 进位位置1指令 CMC 进位位求反指令 方向标志位置0指令 STD 方向标志位置1指令 DF←1 中断标志位置0指令 中断标志位置1指令 2.其它处理机控制指令 ()NOP无操作指令 (2)T停机指令 3)WAIT等待指令 (4)L0CK总线封锁指令 (5)ESC交权指令 480X86和 PENTIUM CPU扩充和增加的指令 3.4.1数据传送指令 1.通用传送类指令 (1)基本传送指令 ①80386~ PENTIUM指令系统中扩充了MOV指令功能,允许其传送双字 ②在80386~ PENTIUM PRO指令系统中,增加了两条传送指令: MOVSX和 MOVZX指令 MOVSX:将源操作数进行符号扩展后再传送。 MOVZX:将源操作数进行零扩展后再传送。 ③CMOV指令组
3.3.6 处理器控制指令 1. 标志设置指令 表 3-7 标志设置指令 指令格式 指令功能 执行的操作 CLC STC CMC 进位位置 0 指令 进位位置 1 指令 进位位求反指令 CF←O CF←1 CF←CF CLD STD 方向标志位置 0 指令 方向标志位置 1 指令 DF←0 DF←1 CLI STI 中断标志位置 0 指令 中断标志位置 1 指令 IF←0 IF←1 2. 其它处理机控制指令 ⑴NOP 无操作指令 ⑵HLT 停机指令 ⑶WAIT 等待指令 ⑷LOCK 总线封锁指令 ⑸ESC 交权指令 3.4 80X86 和 PENTIUM CPU 扩充和增加的指令 3.4.1 数据传送指令 1. 通用传送类指令 ⑴基本传送指令 ①80386~PENTIUM 指令系统中扩充了 MOV 指令功能,允许其传送双字。 ②在 80386~PENTIUM PRO 指令系统中,增加了两条传送指令:MOVSX 和 MOVZX 指令。 MOVSX:将源操作数进行符号扩展后再传送。 MOVZX:将源操作数进行零扩展后再传送。 ③CMOV 指令组 指令 INT INT0 IRET 汇编格式 INT n INTO IRET 执行操作 (SP)←(SP)-2 ((SP)+1,(SP))←(PSW) IF=0,TF=0 (SP)←(SP)-2 ((SP)+1,(SP))←(CS) (SP)←(SP)-2 ((SP)+1,(SP))←(IP) (IP)←(n×4) (CS)←(n×4+2) 若 OF=1 则: (SP)←(SP)-2 ((SP)+1,(SP))←(PSW) IF=0,TF=0 (SP)←(SP)-2 ((SP)+1,(SP))←(CS) (SP)←(SP)-2 ((SP)+1,(SP))←(IP) (IP)←(0010H) (CS)←(0012H) (IP)←((SP)+1,(SP)) (SP)←(SP)+2 (CS)←((SP)+1,(SP)) (SP)←(SP)+2 (PSW)←((SP)+1,(SP)) (SP)←(SP)+2 说明 本条指令除把 IF 和 TF 位置 0 外,不影响其余的标志位。 本条指令除把 IF 和 TF 位置 0 外,不影响其余的标志位
(2)入栈指令及出栈指令 ①80286 INM PRO指令系统增加了 PUSHA( PUSHALL)入栈指令,及POPA( POPALL) 出栈指令 ②80386~ PENTIUM PRO中增加了 PUSHAD和 POPAD两条堆栈指令。 (3)交换指令 在80386~ PENTIUM PRO中,XCHG指令允许交换双字数据 2.累加器专用传送指令 (1)输入类指令 (2)输出类指令 3.地址传送指令 3.4.2算术运算指令 1.加法指令 2.减法指令 3.乘法指令 4.除法指令 5.符号扩展指令 3.4.3逻辑运算和移位指令 1.逻辑运算类指令 ()BT指令 (2)BTC指令 (3)BTR指令 (4)BTS指令 2.移位指令 (1)SHD指令 (2)SHRD指令 3.位扫描指令 (1)BSF指令 (2)BSR指令 3.4.4串操作指令 1.扩充SCAS指令 2.扩充MVS指令 3.扩充LODS指令 4.扩充STOS指令 5.扩充CMPS指令 3.4.5控制转移指令 无条件转移和条件转移指令 (1)无条件转移指令
⑵入栈指令及出栈指令 ①80286~PENTINM PRO 指令系统增加了 PUSHA(PUSHALL)入栈指令,及 POPA(POPALL) 出栈指令。 ②80386~PENTIUM PRO 中增加了 PUSHAD 和 POPAD 两条堆栈指令。 ⑶交换指令 在 80386~PENTIUM PRO 中,XCHG 指令允许交换双字数据。 2. 累加器专用传送指令 ⑴输入类指令 ⑵输出类指令 3.地址传送指令 3.4.2 算术运算指令 1. 加法指令 2. 减法指令 3. 乘法指令 4. 除法指令 5. 符号扩展指令 3.4.3 逻辑运算和移位指令 1. 逻辑运算类指令 ⑴BT 指令 ⑵BTC 指令 ⑶BTR 指令 ⑷BTS 指令 2. 移位指令 ⑴SHLD 指令 ⑵SHRD 指令 3. 位扫描指令 ⑴BSF 指令 ⑵BSR 指令: 3.4.4 串操作指令 1.扩充 SCAS 指令 2.扩充 MOVS 指令 3.扩充 LODS 指令 4.扩充 STOS 指令 5.扩充 CMPS 指令 3.4.5 控制转移指令 1. 无条件转移和条件转移指令 ⑴无条件转移指令