0010 第三章 86系列微型计算机的指令系统_第1页
0010 第三章 86系列微型计算机的指令系统_第2页
0010 第三章 86系列微型计算机的指令系统_第3页
0010 第三章 86系列微型计算机的指令系统_第4页
0010 第三章 86系列微型计算机的指令系统_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 80X86指令系统指令系统 3.1 指令格式与寻址方式指令格式与寻址方式 3.2 8086/8088指令系统指令系统 3.1 指令格式与寻址方式指令格式与寻址方式 3.1.1 指令格式指令格式 指令指令 操作码:指示计算机执行什么样的操作,如数据传送、算术运操作码:指示计算机执行什么样的操作,如数据传送、算术运 算等;算等; 操作数:指令执行操作的过程中所需要的数据,如加法指令中操作数:指令执行操作的过程中所需要的数据,如加法指令中 的加数和被加数等。的加数和被加数等。 指令的操作数:可以是参加操作的数的本身(立即数)指令的操作数:可以是参加操作的数的本身(立即数) 或是微处理器内

2、部寄存器的内容(寄存器操作数)或是微处理器内部寄存器的内容(寄存器操作数) 还可以是操作数在存储器中的地址。还可以是操作数在存储器中的地址。 如何寻址操作数就是寻址问题。如何寻址操作数就是寻址问题。 3.1.2 寻址方式寻址方式 一、寻址方式与有效地址的概念一、寻址方式与有效地址的概念 寻址方式寻址方式寻找操作数的方式。寻找操作数的方式。 操作数位置:操作数位置: 操作数在指令中,与代码存放在一起,称为立即操作数。 立即寻址立即寻址 操作数在Reg.中,指令中操作数部分是对应Reg.的编码。 Reg.Reg.寻址寻址 操作数在MEM中,指令中操作数部分是操作数所在的内存地址。 存贮器寻址存贮器

3、寻址 任何内存单元实际地址都由两部分组成:段基址和段内偏移地址任何内存单元实际地址都由两部分组成:段基址和段内偏移地址 有效地址有效地址EAEA: 存储器寻址时,指令的操作数部分给出的地址是段内偏移地址。 为了适应要处理的各种数据结构的需要,这个段内偏移量可以由 几个基本部分组合而成,所以也把它称作有效地址EAEA。 3.1.2 寻址方式寻址方式 有效地址的基本组成部分有效地址的基本组成部分 基址寄存器的内容;基址寄存器的内容;变址寄存器内容变址寄存器内容 位移量;位移量;比例因子比例因子 EAEA 基址基址RegReg( 变址变址RegReg比例因子)位移量比例因子)位移量 0,8,32 0

4、,8,16 位移量位移量 1,2,4,8 1 比例因子比例因子 除除ESP外任何外任何32位通用寄存器位通用寄存器 SI,DI 变址寄存器变址寄存器 任何任何32位通用寄存器位通用寄存器 BX,BP 基址寄存器基址寄存器 32位寻址位寻址 16位寻址位寻址 有效地址分量有效地址分量 表表3-1 16位和位和32位寻址时的四分量定义位寻址时的四分量定义 3.1.2 寻址方式寻址方式 二、各种寻址方式二、各种寻址方式 3.1.2 寻址方式寻址方式 1.立即数寻址(立即寻址)立即数寻址(立即寻址) 指令所用的操作数直接包含在指令中,指令所用的操作数直接包含在指令中,不需要运行总线周期不需要运行总线周

5、期,立即,立即 寻址主要用于给存储器或寄存器赋初值。寻址主要用于给存储器或寄存器赋初值。操作数与操作码一起存放操作数与操作码一起存放 在代码段中,与代码一起被取入在代码段中,与代码一起被取入CPU的指令队列,在指令执行时不的指令队列,在指令执行时不 需要再访问存贮器。需要再访问存贮器。 注意:注意: 立即操作数可以是立即操作数可以是8、16、32位,位, 若是若是16或或32位的,则存放时必须满足位的,则存放时必须满足低对低,高对高低对低,高对高的原则。的原则。 此指令中的立即数只能是此指令中的立即数只能是源源,不能是,不能是目的目的。 常用于给常用于给Reg.赋初值。赋初值。 3.1.2 寻

6、址方式寻址方式 操作码操作码 立即数低字节立即数低字节 立即数高字节立即数高字节 高址高址 0AH 08H AH ALAX 【例】【例】 MOV AXMOV AX,080AH080AH,其寻址如下图所示。,其寻址如下图所示。 立即寻址示意图立即寻址示意图 3.1.2 寻址方式寻址方式 3.1.2 寻址方式寻址方式 l举例:举例: MOV AX, 1234H MOV AL,12H MOV DH,34H 下列语句错误:下列语句错误: MOV AL,1234H MOV 1234H,AL 3.1.2 寻址方式寻址方式 2.寄存器寻址寄存器寻址 操作数在内部寄存器中。对操作数在内部寄存器中。对16位操作

7、数,寄存器可以是位操作数,寄存器可以是AX、 BX、CX、DX、SI、DI、SP或或BP;对;对8位操作数,寄存器可位操作数,寄存器可 以是以是AH、AL、BH、BL、CH、CL、DH、DL。 在一条指令中,可以对源操作数采用寄存器寻址方式,也可在一条指令中,可以对源操作数采用寄存器寻址方式,也可 以对目的操作数采用寄存器寻址方式,还可以两者都用寄存以对目的操作数采用寄存器寻址方式,还可以两者都用寄存 器寻址方式。器寻址方式。 该方式的操作在该方式的操作在CPU内部进行,不需要使用总线周期。内部进行,不需要使用总线周期。 3.1.2 寻址方式寻址方式 举例举例 3.1.2 寻址方式寻址方式 l

8、例例 2 注意下列语句错误:注意下列语句错误: MOV AX,BX MOV AX,BL MOV AH,BH MOV BL,AX MOV BL,AL MOV SI,AX l例例3 下列程序执行后,(下列程序执行后,(AX)=?,(?,(BX)=? MOV AX,1234H MOV BX,5678H 执行:执行: 1234HAX 5678HBX 3.1.2 寻址方式寻址方式 3.存储器寻址方式存储器寻址方式 对于各种存储器寻址方式,指令的操作数部分是此操作数的有效对于各种存储器寻址方式,指令的操作数部分是此操作数的有效 地址地址EA。 (1)直接寻址)直接寻址 操作数的有效地址(操作数的有效地址(

9、EA)直接包含在指令中,它与操作码一起存)直接包含在指令中,它与操作码一起存 放在代码段中。放在代码段中。 操作数一般在数据段中操作数一般在数据段中DS,这是默认方式,这是默认方式 操作数存放的物理地址操作数存放的物理地址=DS16 + 16位地址偏移量。位地址偏移量。 如果不在数据段中,则要增加段前缀,指出段寄存器名。如果不在数据段中,则要增加段前缀,指出段寄存器名。 例:例:MOV AXMOV AX,ESES:2000H2000H 3.1.2 寻址方式寻址方式 例例1: MOV AX,22A0H 执行过程如图所示执行过程如图所示 322A0H 322A1H 32H 48H 操作码操作码 偏

10、移量偏移量A0HA0H 偏移量偏移量22H22H 代码段代码段 数据段数据段 3 0 0 0 +) 2 2 A 0 3 2 2 A 0 H DS AX 48 32 3.1.2 寻址方式寻址方式 例例2 MOV AL,2000H; 4000H 56H A AX X D DS S 40000H 2000H 操作码 操作码 00H 20H 56H 42000H 3.1.2 寻址方式寻址方式 例例3 寄存器和存储器内容为:(寄存器和存储器内容为:(AX)=1212H, BUF为数据段定义的变量,其偏移地址是为数据段定义的变量,其偏移地址是2000H, (DS)=3000H,(,(32000H)=454

11、5H。 执行指令:执行指令:MOV AX ,BUF 执行后:(执行后:(AX)=? 执行:(执行:(32000H)AX 执行后:(执行后:(AX)=4545H 3.1.2 寻址方式寻址方式 直接寻址中直接寻址中EA可以以变量名的形式给出。可以以变量名的形式给出。 例:例:VALUE DB 12H MOV AL,VALUE 或或 MOV AL,VALUE ;VALUE又称为符号地址又称为符号地址 3.1.2 寻址方式寻址方式 (2)寄存器间接寻址寄存器间接寻址 寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址寄存器间接寻址方式中,寄存器的内容为操作数的偏移地址EAEA, 操作数在存储器中,寄

12、存器可以为操作数在存储器中,寄存器可以为BXBX,BPBP,SISI和和DIDI。 分成了两种情况:分成了两种情况: 若以若以SI、DI、BX间接寻址,操作数通常在现行数据段中,即间接寻址,操作数通常在现行数据段中,即DS中中 的值左移四位加上的值左移四位加上SI、DI或或BX中的有效地址即为操作数的物理中的有效地址即为操作数的物理 地址地址。见例子见例子1。 若以若以BP间接寻址,则操作数在堆栈段中,即操作数的物理地址为间接寻址,则操作数在堆栈段中,即操作数的物理地址为 堆栈段寄存器堆栈段寄存器SS中的值左移四位与中的值左移四位与BP相加。见例子相加。见例子2。 3.1.2 寻址方式寻址方式

13、 50 3.1.2 寻址方式寻址方式 B0 3.1.2 寻址方式寻址方式 寄存器间接寻址示意图寄存器间接寻址示意图 例例3:MOV AX, BX 设设DS4000H,BX=0100H 寄存器间接寻址示意寄存器间接寻址示意 图如下。图如下。 3.1.2 寻址方式寻址方式 (3)寄存器相对寻址寄存器相对寻址 操作数的有效地址:操作数的有效地址: EA(基址(基址RegReg)位移量,其中位移量在)位移量,其中位移量在 指令中给出,并与操作码一起放在代码段中。指令中给出,并与操作码一起放在代码段中。 16位寻址时 BPBP、BXBX作基址作基址RegReg,其中,其中BPBP默认在默认在SSSS段,

14、段,BXBX默认在默认在DSDS段段, 位位移量是8或16位,且跟在操作码之后存放在代码段中。 EA 位移量 BX BP 8位 16位 物理地址 DS16BX8位或16位位移量 SS16BP8位或16位位移量 3.1.2 寻址方式寻址方式 (MOV AL,BX+05) 3.1.2 寻址方式寻址方式 30 3.1.2 寻址方式寻址方式 (4)基址加变址,基址加变址加相对寻址)基址加变址,基址加变址加相对寻址 EA(基址(基址Reg)(变址)(变址RegReg ) 基址、变址寄存器的使用规定和段寄存器的默认规定与前面同,当基址、变址寄存器的使用规定和段寄存器的默认规定与前面同,当 一种寻址方式中基

15、址、变址寄存器默认段寄存器不同时,一般由一种寻址方式中基址、变址寄存器默认段寄存器不同时,一般由 基址寄存器来决定默认那一个段寄存器作为段基址指针,若在指基址寄存器来决定默认那一个段寄存器作为段基址指针,若在指 令中规定了段超越,则可用其他段寄存器作为段基地址。令中规定了段超越,则可用其他段寄存器作为段基地址。 3.1.2 寻址方式寻址方式 例:例:MOVAX,BXSI (或(或MOVAX,BXSI) 默认默认DS为段为段Reg 基址加变址寻址示意图基址加变址寻址示意图 3.1.2 寻址方式寻址方式 3.1.2 寻址方式寻址方式 三、存储器寻址时的段约定三、存储器寻址时的段约定 存储器操作类型

16、存储器操作类型默认段寄默认段寄 存器存器 允许超过的段寄存允许超过的段寄存 器器 偏移地址寄存偏移地址寄存 器器 取指令代码取指令代码 CS (E)IP 堆栈操作堆栈操作 SS (E)SP 源串数据访问源串数据访问 DSCS,ES,SS,FS, GS (E)SI 目的串数据访问目的串数据访问 ES (E)DI 通用数据访问通用数据访问 DSCS,ES,SS,FS, GS 偏移地址偏移地址EA 以(以(E)BP,(,(E) SP间接间接 寻址的指令寻址的指令 SSCS,ES,SS,FS, GS 偏移地址偏移地址EA 3. 2 8086/8088指令系统指令系统 8086/8088指令系统是指令系

17、统是80X86的基本指令集。的基本指令集。 指令的操作数宽度是指令的操作数宽度是8位或位或16位,偏移地址宽度是位,偏移地址宽度是16位。位。 数据传送类、算术运算类、逻辑运算与移位类、串操作数据传送类、算术运算类、逻辑运算与移位类、串操作 类、控制转移类、处理器控制类。类、控制转移类、处理器控制类。 共分为共分为6类类 指令的助记符指令的助记符 操作数的正确书写格式操作数的正确书写格式 指令执行后对标志位的影响。指令执行后对标志位的影响。 要求掌握要求掌握 16位立即数位立即数 imm16 8位立即数位立即数 imm8 立即数,长度可以是立即数,长度可以是8位或位或16位。位。 imm 16

18、位存储器位存储器 mem16 8位存储器位存储器 mem8 存储器,长度可以是存储器,长度可以是8位或位或16位。位。 mem 16位通用寄存器位通用寄存器 reg16 8位通用寄存器位通用寄存器 reg8 段寄存器段寄存器 Sreg 通用寄存器,长度可以是通用寄存器,长度可以是8位或位或16位。位。 reg 在多操作数指令中,在多操作数指令中,OPRD1为目标操作数,为目标操作数,OPRD2源操作数源操作数OPRD1,OPRD2 操作数操作数 OPRD 意义意义 符号符号 指令操作数符号说明指令操作数符号说明 3. 2 8086/8088指令系统指令系统 3.2.1 数据传送类指令数据传送类

19、指令 最基本、最重要、最常用的一类操作最基本、最重要、最常用的一类操作 存储器与寄存器存储器与寄存器 寄存器与寄存器寄存器与寄存器 3. 累加器与累加器与I/O端口端口 4. 立即数到立即数到Reg或存储器或存储器 源地址源地址指令中必须指明数据起始地址:源地址,指令中必须指明数据起始地址:源地址, 目标地址目标地址传送到什么地方:目标地址传送到什么地方:目标地址 共有共有14条指令,分为条指令,分为4组,见表组,见表3-4。 指令类型 指令功能 指令书写格式 通用数据通用数据 传送传送 字节或字传送字节或字传送 字压入堆栈字压入堆栈 字弹出堆栈字弹出堆栈 字节或字交换字节或字交换 字节翻译字

20、节翻译 MOV 目标,源目标,源 PUSH 源源 POP 目标目标 XCHG 目标,源目标,源 XLAT 地址传地址传 送送 装入有效地址装入有效地址 装入装入DS寄存器寄存器 装入装入ES寄存器寄存器 LEA 目标,源目标,源 LDS 目标,源目标,源 LES 目标,源目标,源 标志位标志位 传送传送 将将FR低字节装入低字节装入AH寄存器寄存器 将将AH内容装入内容装入FR低字节低字节 将将FR内容压入堆栈内容压入堆栈 从堆栈弹出从堆栈弹出FR内容内容 LAHF SAHF PUSHF POPF I/O数据数据 传送传送 输入字节或字输入字节或字 输出字节或字输出字节或字 IN 累加器,端口

21、累加器,端口 OUT 端口,累加器端口,累加器 除了 SAHF和 POPF指 令外,其 余指令执 行后对标 志位都没没 有有影响。 3. 2 8086/8088指令系统指令系统 一、通用数据传送指令一、通用数据传送指令 共5条,它们(除XCHG外)是唯一允许以段Sreg作为操作数的指令。 1、MOV 指令指令 指令格式:指令格式:MOV MOV OPRD1,OPRD2 指令功能:将源操作数传送到指令功能:将源操作数传送到 目的操作数中。目的操作数中。 OPRD1表示目的操作数,表示目的操作数, 可以是寄存器、存储器。可以是寄存器、存储器。 OPRD2源表示源操作数,源表示源操作数, 可以是寄存

22、器、存储器可以是寄存器、存储器 和立即数。和立即数。 通用寄存器通用寄存器 (AX,BX,CX,DX,BP SP,SI,DI) 存存 储储 器器 立立 即即 数数 段寄存器段寄存器 (CS,SS,DS,ES) 3. 2 8086/8088指令系统指令系统 例:例: MOVAL,CH ;通用寄存器之间传送字节数据通用寄存器之间传送字节数据 MOVDS,AX ;通用寄存器通用寄存器段寄存器(段寄存器(CS不能是目标)不能是目标) MOVAX,0FF3BH ;立即数立即数通用寄存器通用寄存器 MOVAL,BUFFER ;存储器存储器通用寄存器通用寄存器 MOVDATBP+DI,ES;段寄存器段寄存器

23、存储器存储器 MOV1000H,25H ;立即数立即数存储器存储器 MOVCX, 1000H ;存储器存储器通用寄存器通用寄存器 使用使用MOV指令传送数据时应该注意:指令传送数据时应该注意: 立即数和段寄存器立即数和段寄存器CS不能作为目标操作数;不能作为目标操作数; 立即数不能直接传送到段寄存器;(立即数不能直接传送到段寄存器;( MOVDS,1000H) 两个存储单元之间不能直接传送数据(两个存储单元之间不能直接传送数据(可通过Reg做中介);); 两个段寄存器之间不能直接传送数据(两个段寄存器之间不能直接传送数据( MOV DS,ES) 。 ( MOV AX,ES MOV DS,AX)

24、 3. 2 8086/8088指令系统指令系统 2、堆栈操作指令堆栈操作指令PUSH和和POP 堆栈是按照堆栈是按照FILO原则组织的一段原则组织的一段内存区域。内存区域。 80X86规定堆栈设置在堆栈段(规定堆栈设置在堆栈段(SS)内,用)内,用SP始终指向堆栈的顶部。始终指向堆栈的顶部。 堆栈用于在子程序调用或处理中断时,堆栈用于在子程序调用或处理中断时,保存当前的断点地址(在保存当前的断点地址(在 8086/8088中为中为CS和和IP)和现场数据)和现场数据,以便子程序执行完毕后,正确,以便子程序执行完毕后,正确 返回到主程序。返回到主程序。 断点地址的保存由断点地址的保存由子程序调用

25、指令子程序调用指令或中断响应来完成;现场数据保或中断响应来完成;现场数据保 存可存可通过堆栈操作指令通过堆栈操作指令来实现。来实现。 3. 2 8086/8088指令系统指令系统 指令格式:指令格式:PUSHOPRD2 POP OPRD1 堆栈操作时,一定是堆栈操作时,一定是16位操作。位操作。 压栈指令压栈指令PUSH 指令格式:指令格式:PUSH OPPUSH OP 指令功能:将寄存器或存储器单元的内容送入堆栈指令功能:将寄存器或存储器单元的内容送入堆栈 OPOP为为1616位的通用寄存器、段寄存器或存储器。位的通用寄存器、段寄存器或存储器。 操作过程:操作过程:1 1)SPSP-2 SP

26、SP-2 ;先;先SPSP减减 2 2 2 2)栈)栈内容内容 ;内容进栈,;内容进栈,低字节在低地低字节在低地 址,高字节在高地址址,高字节在高地址 3. 2 8086/8088指令系统指令系统 出栈指令出栈指令POP 指令格式:指令格式:POP OPPOP OP 指令功能:将指令功能:将SPSP所指向的堆栈栈顶的一个字弹到寄存器所指向的堆栈栈顶的一个字弹到寄存器 或存储单元中。或存储单元中。 OPOP为为1616位操作,可以是寄存器或存储器操作数。位操作,可以是寄存器或存储器操作数。 操作过程:操作过程:1 1)OPLSP OPLSP ;先栈顶内容;先栈顶内容 2 2)SPSPSPSP2

27、2 ;修改;修改SPSP,使,使SPSP加加2 2 3. 2 8086/8088指令系统指令系统 例例1: 建栈建栈 80868086通过赋值通过赋值SSSS和和SPSP建栈建栈 MOV AX MOV AX ,1050H1050H MOV SS MOV SS , AXAX MOV SP MOV SP ,000 EH 000 EH 3. 2 8086/8088指令系统指令系统 压栈操作:先压栈操作:先SPSP减减 2 2,再内容进栈,再内容进栈 PUSH AX PUSH AX (设(设 AX=1234HAX=1234H) PUSH BX PUSH BX (设(设 BX=5CF8HBX=5CF8H

28、) 3. 2 8086/8088指令系统指令系统 出栈操作:出栈操作:先栈顶内容出栈,再修改先栈顶内容出栈,再修改SP,使,使SP加加2。(字操作)。(字操作) POP CX POP DS 3. 2 8086/8088指令系统指令系统 例例2:设:设SS=0100 H, SP=0009H,AX=12C3H, BX = 5070 H PUSH AX ;1 SP SP-2 2 4100841007H AX SP(原栈顶原栈顶) SP - 2(新栈顶新栈顶)SP 0100 0009 SS SP 16 -2 C3 12 01006H 01007H 01008H 01009H 3. 2 8086/808

29、8指令系统指令系统 POP AX ;将栈顶两单元内容送;将栈顶两单元内容送AX ;SP SP+2 0100 0007 SS SP 16 +2 SP+2 (新栈顶新栈顶)SP 12C3AX SP(原栈顶原栈顶) C3 12 01006H 01007H 01008H 01009H 3. 2 8086/8088指令系统指令系统 例例 3 : PUSH AX PUSH BX . POP BX POP AX 注:注: 1 1)8086 8086 的堆栈操作是按字进行的。的堆栈操作是按字进行的。 2 2)每执行一条推入堆栈指令,每执行一条推入堆栈指令,SP SP 减减 2 2。执行弹出指令时,刚好相反,。

30、执行弹出指令时,刚好相反, 每弹出每弹出 1 1 个字,个字,SPSP的值加的值加 2 2。 3 3)堆栈中的内容是按后进先出的原则进行传的。堆栈中的内容是按后进先出的原则进行传的。 3. 2 8086/8088指令系统指令系统 3、交换指令、交换指令 交换可在交换可在CPU的内部寄存器之间进行,也可以在内部的内部寄存器之间进行,也可以在内部 寄存器和存储器之间进行。寄存器和存储器之间进行。 但是段寄存器不能作为本指令的操作数,而且两个存但是段寄存器不能作为本指令的操作数,而且两个存 储单元之间不能直接交换数据。储单元之间不能直接交换数据。 3. 2 8086/8088指令系统指令系统 例例1

31、: XCHG ALXCHG AL,BL BL ;ALAL与与BLBL进行字节互换进行字节互换 XCHG BXXCHG BX,CX CX ;BXBX与与CXCX进行字互换进行字互换 例例2 2: 寄存器与存储器之间数据交换寄存器与存储器之间数据交换。 MOVMOV AX AX,5678H5678H ;(;(AXAX)=5678H=5678H MOV MOV BX BX,FFFFHFFFFH ;(;(BXBX)=FFFFH=FFFFH XCHG AX XCHG AX,BXBX;(;(AXAX)=FFFFH =FFFFH ,(,( BXBX)=5678H=5678H 3. 2 8086/8088指令

32、系统指令系统 4、换码指令换码指令XLAT 格式:格式:XLAT (XLAT (无参数无参数) ) ;ALALBX+ALBX+AL 功能:使累加器中的一个值变换为内存表格中的某一个值。功能:使累加器中的一个值变换为内存表格中的某一个值。 用来实现编用来实现编 码制的转换。码制的转换。 要求:要求:BX 寄存器指向表的首地址,寄存器指向表的首地址,AL中为位移量。中为位移量。 将将 BX+AL做为有效地址做为有效地址EA,在一个表格中找出相应单元内容放,在一个表格中找出相应单元内容放 入入AL。此指令常用来将一种代码转换为另一种代码。此指令常用来将一种代码转换为另一种代码。 + BX AL BX

33、+AL BX+0 BX+1 3. 2 8086/8088指令系统指令系统 使用此指令时,应首先在数据段中预置一个表格。该表格使用此指令时,应首先在数据段中预置一个表格。该表格 的最大长度不能超过的最大长度不能超过256256字节。表的起始地址的偏移量应事先字节。表的起始地址的偏移量应事先 装入装入BXBX寄存器,寄存器,ALAL中存放查找对象在表中地址与表的起始地址中存放查找对象在表中地址与表的起始地址 相差的字节数,相差的字节数,指令执行后,指令执行后,BX+AL AL ,BX内容不变。内容不变。 例例1:P102 将数字09的BCD码转换为7段LED显示器的显示代码。 数字数字09的的BC

34、D码码对应的对应的7 7段段LEDLED显示代码为:显示代码为: 40H,79H,24H,30H,19H,12H,02H,78H40H,79H,24H,30H,19H,12H,02H,78H,00H,18H00H,18H。 十进制数十进制数 g f e d c b a 0 0 1 0 0 0 0 0 0 40H 1 0 1 1 1 1 0 0 1 79H 2 0 0 1 0 0 1 0 0 24H 3 0 0 1 1 0 0 0 0 30H a f g b e c d 3. 2 8086/8088指令系统指令系统 将它们依次存放在偏移地址为将它们依次存放在偏移地址为0800H0800H开始的内

35、存区域。开始的内存区域。 则实现则实现BCDBCD码码0100B0100B转换的程序段为:转换的程序段为: MOV BX,0800H MOV AL,4 XLAT ;AL19H 0800h 40 79 24 30 19 12 02 78 00 10 3. 2 8086/8088指令系统指令系统 通用数据传送类指令的总结通用数据传送类指令的总结 指令名称指令名称操作码(助记符)操作码(助记符)操作数操作数例子例子 最基本的传送指令最基本的传送指令MOV目标,源目标,源MOV ARRASI,AL 堆栈指令堆栈指令 把字压入栈把字压入栈PUSH源源PUSH AX 把字弹出栈把字弹出栈POP目标目标PO

36、P DX 交换指令交换指令XCHG目标,源目标,源XCHG AX,BX 换码指令换码指令XLAT存储器存储器XLAT 3. 2 8086/8088指令系统指令系统 二、地址传送指令二、地址传送指令 指令中的源操作数都必须是存储器操作数指令中的源操作数都必须是存储器操作数 (1)取有效地址指令()取有效地址指令(LEA) (2)将地址指针送将地址指针送DS和另一和另一 个寄存器指令(个寄存器指令(LDS) (3)将地址指针送将地址指针送ES和另一和另一 个寄存器指令(个寄存器指令(LES) 3. 2 8086/8088指令系统指令系统 (1 1)取有效地址指令)取有效地址指令(LEA) 格式:格

37、式:LEA OPLEA OP目,目,OPOP源源 功能:将源操作数的有效地址功能:将源操作数的有效地址EAEA送到目的操作数。送到目的操作数。 要求:要求:源操作数必须为内存单元的地址,目的操作数必须源操作数必须为内存单元的地址,目的操作数必须 为一个为一个1616位的通用寄存器位的通用寄存器。 例:例:LEA AX,2728H ;AX=2728H LEA BX,BP+SI ;BX=BP+SI的值。 LEA SP ,0482H ;SP=0482H 注:注:MOVMOV指令与指令与LEALEA的不同:的不同: 前者传送操作数的内容,后者传送操作数的地址。前者传送操作数的内容,后者传送操作数的地址

38、。 例:例:MOV DI ,TABLE ;DI TABLE LEA DI ,TABLE ; DI TABLE所在单元的所在单元的EA 3. 2 8086/8088指令系统指令系统 例:比较例:比较 LEA BX,BUFFER MOV BX, BUFFER 两指令的不同两指令的不同 存储单元内容如右图所示。存储单元内容如右图所示。 DS:093AH,BUFFER 物理地址物理地址 093C3H 则则 LEA BX,BUFFER后,后,BX=0023H MOV BX,BUFFER后,后,BX=0045H 093A0H 093C3H . 差23H 45H 00H 3. 2 8086/8088指令系统

39、指令系统 (2 2)将地址指针装到)将地址指针装到DSDS和另一个寄存器指令和另一个寄存器指令(LDS) 格式:格式: LDS OPLDS OP目,目,OPOP源源 功能:功能: 把把4 4个字节地址指针(包括一个段地址和一个个字节地址指针(包括一个段地址和一个 偏移地址)从源操作数指定的偏移地址)从源操作数指定的4 4个存储单元取出,个存储单元取出, 低地址的两字节送目的操作数,高地址的两字节送低地址的两字节送目的操作数,高地址的两字节送 DSDS段寄存器。段寄存器。 例例1: LDS DI,2100H 1C H 20 H 21 H B5 H DI=201CH DS=B521H 2100H

40、2101H 2102H 2103H 3. 2 8086/8088指令系统指令系统 例例2:LDS SI,10H 设指令执行前,设指令执行前, DS=C000H,C0010H=0180H,C0012H=2000H 则执行后,则执行后,SI=0180H,DS=2000H 例例3:LDS BX,DI+1008H 程序执行前,程序执行前, DS=2500H,DI=2400H, 28408H=3344H, 2840AH=1122H 执行后,执行后,BX=3344H,DS=1122H 3. 2 8086/8088指令系统指令系统 (2 2)将地址指针装到)将地址指针装到ESES和另一个寄存器指令和另一个寄

41、存器指令(LES) n 格式:格式: LES OPLES OP目,目,OPOP源源 n 功能:功能: 把把4 4个字节地址指针(包括一个段地址和一个个字节地址指针(包括一个段地址和一个 偏移地址)从源操作数指定的偏移地址)从源操作数指定的4 4个存储单元取出,个存储单元取出, 低地址的两字节送目的操作数,高地址的两字节送低地址的两字节送目的操作数,高地址的两字节送 ESES段寄存器。段寄存器。 3. 2 8086/8088指令系统指令系统 三、标志位传送指令三、标志位传送指令 标志位传送指令专门用于对标志寄存器(标志位传送指令专门用于对标志寄存器(FR)的保护和更新操)的保护和更新操 作。作。

42、指令的操作数隐含。指令的操作数隐含。 (1)读取标志指令)读取标志指令 (2)设置标志指令设置标志指令 (3)标志寄存器压栈指令标志寄存器压栈指令 (4)标志寄存器出栈指令)标志寄存器出栈指令 标志位传送指令标志位传送指令 3. 2 8086/8088指令系统指令系统 回顾标志寄存器回顾标志寄存器FR: 3. 2 8086/8088指令系统指令系统 (1)读取标志指令)读取标志指令LAHF(Load AH with Flag ) 格式:格式:LAHFLAHF 功能:将标志寄存器的低功能:将标志寄存器的低8 8位送入位送入AHAH寄存器,寄存器, 即(即(FLAGFLAG)7-0AH7-0AH。

43、该指令的执行对标志位无影响。该指令的执行对标志位无影响。 (2)设置标志指令)设置标志指令SAHF(Save AH into Flag ) 格式:格式:SAHFSAHF 功能:将功能:将AHAH的内容送入标志寄存器的低的内容送入标志寄存器的低8 8位,高位,高8 8位不变,位不变, 即(即(AHAH)(FLAGFLAG)7-07-0,从该指令功能可看出,从该指令功能可看出, SAHFSAHF为为LAHFLAHF的逆过程。的逆过程。 3. 2 8086/8088指令系统指令系统 (3)标志寄存器压栈指令标志寄存器压栈指令PUSHF 指令格式:指令格式:PUSHFPUSHF 指令功能:堆栈指针指令

44、功能:堆栈指针SPSP减减2 2,将,将1616位标志寄存器入栈,标志寄位标志寄存器入栈,标志寄 存器的值不变。存器的值不变。 (4)标志寄存器弹出堆栈指令标志寄存器弹出堆栈指令POPF 指令格式:指令格式:POPFPOPF 指令功能:将栈顶的一个字送标志寄存器,同时修改栈指针指令功能:将栈顶的一个字送标志寄存器,同时修改栈指针SPSP, SPSP2 2。 PUSHF POP AX OR AH,01H PUSH AX POPF 利用这两条指令还可以方便的利用这两条指令还可以方便的 修改修改FR中某一位。如,中某一位。如,86/8088 系统中无直接能修改系统中无直接能修改TF标志位标志位 的指

45、令,可用右边程序实现:的指令,可用右边程序实现: 在子程序调用或中断子程序中,常用此保护和恢复需要的标志位。在子程序调用或中断子程序中,常用此保护和恢复需要的标志位。 3. 2 8086/8088指令系统指令系统 四、输入四、输入/输出数据传送指令输出数据传送指令 IN/OUT 当端口地址当端口地址256(8根地址线)根地址线)时时,该地址直接出现在指令中。,该地址直接出现在指令中。 当端口地址当端口地址256(816根地址线)根地址线)时时,该地址置于,该地址置于DX并将并将DX 放在放在 指令中。指令中。 指令格式:指令格式: IN 累加器,累加器, 外设端口地址外设端口地址 OUT 外设

46、端口地址,外设端口地址, 累加器累加器 具体指令有:具体指令有: INAL,imm8 OUTimm8,AL INAX,imm8 OUTimm8,AX INAL,DX OUTDX, AL INAX,DX OUTDX, AX 3. 2 8086/8088指令系统指令系统 1 1、 IN IN 指令指令 IN指令的四种形式:指令的四种形式: 语句格式:语句格式:INAL,PORT 功能:(功能:(PORT)AL 语句格式:语句格式:INAX,PORT 功能:(功能:(PORT)AX 语句格式:语句格式:INAL,DX 功能:(功能:(DX)AL 语句格式:语句格式:INAX,DX 功能:(功能:(D

47、X)AL IN AL, 20H IN AX, 30H IN AL,DX IN AX,DX IN指令的例子:指令的例子: 3. 2 8086/8088指令系统指令系统 2 2、OUT OUT 指令指令 语句格式:语句格式:OUTPORT,AL 功能:(功能:(AL)PORT 语句格式:语句格式:OUTPORT,AX 功能:(功能:(AX)PORT 语句格式:语句格式:OUTDX,AL 功能:(功能:(AL)DX 语句格式:语句格式:OUTDX,AX 功能:(功能:(AX)DX OUT 46H,AL OUT 80H,AX OUT DX,AL OUT DX, AX OUT指令的四种形式:指令的四种形

48、式: OUT指令的例子:指令的例子: 3. 2 8086/8088指令系统指令系统 例:例: IN AX,20H ;从端口20H20H输入1616位数到AXAX MOV DX,3F0H IN AL ,DX ;从端口03F0H03F0H输入8 8位数到ALAL OUT 27H,AL ;将8 8位数从ALAL输出到端口27H27H OUT DX ,AX ;将1616位数从AXAX输出到DXDX指定的端口 3. 2 8086/8088指令系统指令系统 3.2.1 3.2.1 数据传送类指令小节数据传送类指令小节 指令类型指令类型指令功能指令功能指令书写格式指令书写格式 通用数据传送通用数据传送 字节

49、或字传送字节或字传送 字压入堆栈字压入堆栈 字弹出堆栈字弹出堆栈 字节或字交换字节或字交换 换码指令换码指令 MOV MOV 目标,源目标,源 PUSH PUSH 源源 POP POP 目标目标 XCHG XCHG 目标,源目标,源 XLATXLAT 目标地址传送目标地址传送 装入有效地址装入有效地址 装入装入DSDS寄存器寄存器 装入装入ESES寄存器寄存器 LEA LEA 目标,源目标,源 LDS LDS 目标,源目标,源 LES LES 目标,源目标,源 标志位传送标志位传送 将将FRFR低字节装入低字节装入AHAH寄存器寄存器 将将AHAH内容装入内容装入FRFR低字节低字节 将将FR

50、FR内容压栈内容压栈 从堆栈中弹出一个字给从堆栈中弹出一个字给FRFR LAHFLAHF SAHFSAHF PUSHFPUSHF POPFPOPF 输入输入/ /输出数据传送输出数据传送 从端口读入到从端口读入到ALAL或或AXAX 从从ALAL或或AXAX输出到端口输出到端口 IN AL/AXIN AL/AX,PORTPORT OUT PORTOUT PORT,AL/AXAL/AX 3. 2 8086/8088指令系统指令系统 3.2.2 3.2.2 算术运算类指令(共算术运算类指令(共2020条)条) 1.算术运算的数据类型算术运算的数据类型 加加 减减 乘乘 除除 ( (带 带 不带进位

51、加)不带进位加) ( (带 带 不带借位减)不带借位减) 加加 减减加加 减减 乘乘 除除 压缩压缩BCDBCD数数 ( (无符号)无符号) 非压缩非压缩BCDBCD数数 ( (无符号)无符号) 二进制数二进制数 ( (无、有符号)无、有符号) 压缩BCD数:一个字节 099 非压缩BCD数:一个字节 09 3. 2 8086/8088指令系统指令系统 2.2.算术运算指令与标志算术运算指令与标志 特征:特征:所有的算术类指令都影响所有的算术类指令都影响Flag,Flag,这些标志可用于测试,以决定这些标志可用于测试,以决定 程序的走向。程序的走向。 注:除注:除CBWCBW、CWDCWD 不

52、影响标志,不影响标志,INCINC、 DECDEC不改变不改变CFCF外。外。 3. 2 8086/8088指令系统指令系统 一、二进制算术运算指令一、二进制算术运算指令 1、不带进位的加法指令不带进位的加法指令 格式:格式: ADD OPADD OP目,目,OPOP源源 功能:功能: 将源操作数和目的操作数相加,结果保留在目的操作数将源操作数和目的操作数相加,结果保留在目的操作数 中,并根据结果设置标志。中,并根据结果设置标志。 源源(Reg,mem,imm),(Reg,mem,imm),目标目标(Reg,mem),(Reg,mem),且两个操作数不能同时为且两个操作数不能同时为mem.me

53、m. 例:求例:求 12345H+65400H,和存入,和存入DATA0中中 MOV AX,1234 ADD AX,65400 MOV DATA0,AX 3. 2 8086/8088指令系统指令系统 例例 设设AXAX65A0H65A0H,BX=B79EHBX=B79EH 执行执行 ADD BXADD BX,AX AX 具体执行情况如下:具体执行情况如下: 0110010110100000 +) 1011011110011110 1 0001110100111110 有进位,有进位,CF=1 最高位最高位0,SF=0 最高,次高位都有进位,最高,次高位都有进位, OF=0 CF=1,CF=1,

54、若若BX,AXBX,AX中存放的是无符号数,则结果中存放的是无符号数,则结果 65535 65535 OF=0,OF=0,若若BX,AXBX,AX中存放的是带符号数中存放的是带符号数, ,则结果在则结果在1616位补位补 码所能表示的范围码所能表示的范围(-32768(-3276832767)32767)内。内。 由以上结果知:由以上结果知: 结果非结果非0,ZF0 无进位,无进位,AF=0 低低8位位5个个1,PF=0 3. 2 8086/8088指令系统指令系统 2、 格式:格式: ADC OP目,目,OP源源 功能:功能: 将源操作数、目的操作数及将源操作数、目的操作数及CF的值相加,结

55、果保留在目的值相加,结果保留在目 的操作数中,并根据结果设置标志。的操作数中,并根据结果设置标志。 例:例:无符号双字加法运算。无符号双字加法运算。 MOVAX,4652H;(;(AX)=4652H ADDAX,F0F0H;(;(AX)=3742H,CF=1 MOVDX,0234H;(;(DX)=0234H ADCDX,F0F0H;(;(DX)=0F325H,CF=0 3. 2 8086/8088指令系统指令系统 例例:有两个:有两个4字节无符号数放在字节无符号数放在2000H和和3000H单元中,低位在单元中,低位在 前,高位在后,将两个数相加,结果放前,高位在后,将两个数相加,结果放200

56、0H开始的单元。开始的单元。 10008432H+20007F00H = ? 算法分析算法分析: 可以将两个可以将两个4字节无符号数相加字节无符号数相加 看成看成2个字相加个字相加; 两个数的低位字相加后,将可能两个数的低位字相加后,将可能 产生进位产生进位CF; 高位字相加,应再加上进位位高位字相加,应再加上进位位; 3000H 32 84 00 10 00 7F 00 20 SI DI 2000H 3. 2 8086/8088指令系统指令系统 程序程序: CLC ;清进位清进位 MOV SI , 2000H ;取第一个数的首地址取第一个数的首地址 MOV AX, SI ;第一个数的低第一个

57、数的低16位送到位送到AX MOV DI , 3000H ;取第二个字的首地址取第二个字的首地址 ADD AX , DI ;第一个数和第二个数相加第一个数和第二个数相加 MOV SI, AX ;送低送低16位结果倒位结果倒2000H单元单元 MOV AX, SI+2 ; 第二个数的高第二个数的高16位送位送AX ADC AX , DI+2 ;高高16位数据相加位数据相加 MOV SI+2,AX 3. 2 8086/8088指令系统指令系统 3、减指令减指令SUB(Subtraction) 格式格式:SUB OP目,目,OP源;(源;( OP目)目)( OP目)目)-( OP源)源) OP源:立

58、即数,寄存器,存储器。源:立即数,寄存器,存储器。 OP目:寄存器,存储器。目:寄存器,存储器。 源源(Reg,mem,imm),(Reg,mem,imm),目标目标(Reg,mem),(Reg,mem),且两个操作数不能同时为且两个操作数不能同时为mem.mem. 例:例: SUB AL,37H;寄存器寄存器-立即数立即数 SUB BX,DX;寄存器寄存器-寄存器寄存器 SUB CX, VAR1;寄存器寄存器-存储器存储器 SUB ARRAYSI, AX;存储器存储器-寄存器寄存器 3. 2 8086/8088指令系统指令系统 4、带进位减法指令带进位减法指令 SBB( Subtractio

59、n with borrow) 格式格式:SBB OP目,目,OP源;(源;(OP目)目)(OP目)目)-(OP源)源)-CF CF: 进位标志进位标志CF的现行值的现行值(上条指令上条指令CF值值) OP源:立即数,寄存器,存储器。源:立即数,寄存器,存储器。 OP目:寄存器,存储器目:寄存器,存储器。 用途用途:用于多字节数相加:用于多字节数相加 例:例:SBB BX,100H;寄存器寄存器-立即数立即数 -CF SBB CX,DX;寄存器寄存器-寄存器寄存器-CF SBB AL, DATA1SI;寄存器寄存器-存储器存储器-CF SBB DISPBP, BL;存储器存储器-寄存器寄存器-C

60、F 3. 2 8086/8088指令系统指令系统 5、 格式:格式: INC OPINC OP 功能:功能: 将操作数加将操作数加1 1,再送回该操作数。这条指令一般用于循环程,再送回该操作数。这条指令一般用于循环程 序的指针修改。操作数可以是序的指针修改。操作数可以是8 8位位/16/16位通过寄存器或存储位通过寄存器或存储 器,不能为立即数。器,不能为立即数。 此指令不影响此指令不影响CF.CF. 例:例: INC INC CXCX ;CXCX寄存器中的内容加寄存器中的内容加1 1 3. 2 8086/8088指令系统指令系统 6、减减 1 指令指令DEC (Decrement by 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论