4微机原理第四章:指令系统.ppt_第1页
4微机原理第四章:指令系统.ppt_第2页
4微机原理第四章:指令系统.ppt_第3页
4微机原理第四章:指令系统.ppt_第4页
4微机原理第四章:指令系统.ppt_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 80X86 CPU的指令系统,内容提要:, 从指令寻址方式出发,介绍数据操作数、地址操作数的类 型和寻址方式、8086的指令格式和指令机器码的概念; 重点讲述8086中指令的功能和对标志位的影响等; 简单程序的编制。,学习要点:, 掌握8086 指令中操作数的类型、指令格式、寻址方式; 掌握常用指令的功能和使用方法 ; 掌握指令的助记符,操作数的正确书写法; 了解指令执行后对标志的影响。,本 章 主 要 内 容:,1了解:指令系统的一般概念 指令及指令系统 指令的格式 指令中的操作数类型 2掌握:对操作数的寻址方式 3掌握:六大类指令的操作原理 操作码的含义 指令对操作数的要求 指令执

2、行的结果,第四章 80X86 CPU的指令系统,基本概念,1指令:控制计算机完成某种操作的命令。 2指令系统:处理器所能识别的所有指令的集合。 3指令的兼容性:同一系列机的指令都是兼容的,不同系列 计算机有不同的指令系统。 4指令的符号:用规定的英文字母组成,称为助记符。 5指令系统的特点: 指令语言是面向机器的语言,与计算机硬件有对应关系; 用指令进行编程能充分开发计算机硬件资源,它产生的 程序目标代码短、运行速度快; 在运动控制、智能仪器仪表、监测等领域应用非常广泛。,4.1 8086 的寻址方式,有关寻址的基本概念:,1寻址方式:指令中用于说明求出操作数有效地址的方法; 2寻址操作:根据

3、寻址方式 求出操作数有效地址的过程; 3为满足程序设计需要,程序设计中可采用多种寻址方式: 指令中可直接写出操作数本身 指令中可给出操作数的地址 指令中可给出操作数所在地址的地址 48086 指令系统中,按操作数的类型大致分为三类: 数据操作数 (转移)地址操作数 I/O 操作数,4.1 8086 的寻址方式,一、数据操作数,指与数据有关的操作数,即指令中操作的对象是数据。 根据数据操作数在计算机中的不同位置可分为: 1立即数操作数:指令中要操作的数据包含在指令中 2寄存器操作数:指令中要操作的数据在指定的寄存器中 3存储器操作数:指令中要操作的数据在指定的存储单元中 4I/O操作数:指令中要

4、操作的数据来自或送到I/O端口。 本节着重讲解数据操作数寻址方式,4.1 8086 的寻址方式,二、地址操作数,地址操作数是与程序转移地址有关的操作数,即指令中 操作的对象不是数据,而是要转移的目标地址。 它也可以分为: 1立即数操作数:即要转移的目标地址包含在指令中 2寄存器操作数:转移的目标地址存放在寄存器中 3存储器操作数:转移的目标地址存放在存储单元之中, 在调用指令或转移指令中,这类操作数指出是:程序要 转移的目的地址。 地址操作数的寻址方式将在转移指令中介绍。,4.1 8086 的寻址方式,三、指令中操作数的个数, 对于数据操作数 一些指令只有一个操作数,或没有(或隐含)操作数 有

5、些指令具有两个操作数: 一个称为源操作数,在操作过程中其值不改变; 另一个称为目的操作数,操作后一般被操作结果代替。 对于地址操作数 指令中只有一个操作数,它是一个供程序转移的目标地址。,4.1 8086 的寻址方式,四、数据操作数寻址的方式:八种基本的寻址方式,1立即寻址:操作数在指令中 立即操作数 2寄存器寻址:操作数在寄存器中 寄存器操作数 3直接寻址 4寄存器间接寻址 5寄存器相对寻址 操作数在存储器中存储器操作数 6基址变址寻址 7相对基址变址寻址 8I /O 操作数寻址:操作数在I/O端口中 I/O 端口操作数 3 7 种寻址方式属于存储器寻址,需通过计算的方法 来确定操作数所在存

6、储单元的有效地址EA I /O 操作数寻址将在输入输出指令部分介绍,4.1.1 立即数的寻址方式, 立即寻址:即指令中直接给出操作数。操作数与指令代码 一起放在码段中。,例如:MOV AX,1234H; AX 1234H 源操作数的寻址方式为立即寻址。执行过程如下图所示:, 立即寻址通常用于二地址指令中,且只能是源操作数。 数据传送应理解为复制传送,源操作数不会因为传送而丢失。,4.1.2 寄存器数的寻址方式, 寄存器寻址:操作数在寄存器中,指令中给出寄存器名。,例如:MOV AX,1234H; 目的操作数采用寄存器寻址 MOV DX,AX; 目的和源操作数均采用寄存器寻址, 对 16 位操作

7、数,寄存器可用: AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、ES、SS; 对 8 位操作数,寄存器可用: AH、AL、BH、BL、CH、CL、DH、DL;,4.1.2 寄存器数的寻址方式,寄存器寻址特点:,1因操作数在寄存器中,指令执行时的操作就在 CPU 的 内部进行,不需要通过访问存储器来获得操作数,因而 执行速度快。 2寄存器代码符号比内存地址短,汇编后机器码长度最短。 3dst 和 SRC 均可采用寄存器寻址方式,也可以同时采用 寄存器寻址方式。 4当指令中的 dst 和 SRC 均为寄存器操作数时,必须采用 同样长度(字或字节)的寄存器; 5两个操作数不能同时为段寄

8、存器; 6目的操作数不能是代码段寄存器 CS。,4.1.3 存储器数的寻址方式,一、直接寻址, 当操作数在存储器中时,有下面 5 种寻址方式,统称为: 存储器寻址方式。 双操作数指令中的两个操作数不能同时为存储器操作数。, 指令中给出操作数所在存储单元的有效地址,默认为数据段。 为了区别于立即数,有效地址 EA 用方括号“ ”括起。 例如:MOV AX,2000H ; MOV 1200H,AX ; MOV ES:0100H,AL ;, 根据指令中给出的有效地址 EA,得到存储单元的物理地址: PADS16 EA,4.1.3 存储器数的寻址方式,直接寻址举例:,MOV AX, 2000H ,1指

9、令中给出:EA2000H 假设:DS4000H 物理地址:PA42000H 2字在内存中占两个单元: 低字节在前(低地址) 高字节在后(高地址) 3以低字节的地址作为字 的地址。 4把数据段中该内存单元中 的内容送到AX中;,4.1.3 存储器数的寻址方式,一、直接寻址, 也允许在附加段、堆栈段、代码段存取数据,称为“段跨越”。 如例 MOV ES: 0100H ,AL ; ES: 段前缀操作符 操作数物理地址:PAES 160100H 在汇编语言指令中,可以用符号地址代替数值地址 如例 VALUE DB 12H,67H,100 ; 数据定义 MOV AL,VALUE 寻址过程如图所示:,4.

10、1.3 存储器数的寻址方式,二、寄存器间接寻址,操作数的 EA 在 REG 中,指令中给出存放 EA 的寄存器名,1因为 EA 是16位,存放 EA 所使用的寄存器必须是16位的; 2用于间接寻址的寄存器有: 基址寄存器 BX、BP ;变址寄存器 SI、DI。 3为了区别于寄存器寻址,寄存器名用“ ”括起。 4不同的寄存器所隐含对应的段不同。 采用 SI、DI、BX 寄存器时,在数据段寻址; 采用 BP 寄存器时,在堆栈段寻址; 操作数的物理地址为: PADS 16SI / DI / BX PASS 10HBP,4.1.3 存储器数的寻址方式,二、寄存器间接寻址,例 MOV AX, SI MO

11、V BX ,1234H MOV BX, BP ,寄存器间接寻址 的过程如图所示,4.1.3 存储器数的寻址方式,三、寄存器相对寻址: EA 由两部分组成,例 MOV AL,8 BX MOV AX,COUNT SI ADD AX, BP 20H INC 1000H BP MOV BX 50 ,DI, 一部分存于指令中给出的寄存器中; 一部分以位移量的方式直接在指令中给出。, 位移量是符号数:如 8 、20H、50、1000H或符号常量 COUNT 位位移量的范围为:0H 0FFH(127 128) 16位位移量的范围为:0H 0FFFFH(32765 32768) 根据所用寄存器的不同,对应的段

12、不同。规律同寄存器寻址。,4.1.3 存储器数的寻址方式,三、寄存器相对寻址:,例: MOV AL, BX 8 设: DS3000H BX100H,寄存器相对寻址 过程如图所示,4.1.3 存储器数的寻址方式,四、基址变址寻址: EA 由两部分构成,1一部分在基址寄存器 BX 或 BP 中; 一部分在变址寄存器 DX 或 DI 中; 在指令中分别给出两个寄存器名。操作数的有效地址 EA 为: EA1BX SI / DI 或: EA2BP SI / DI 2当基址寄存器使用 BX 时,约定在数据段寻址; 3当基址寄存器使用 BP 时,约定在堆栈段寻址; 操作数的 物理地址 PA 为: PA1DS

13、 10H EA1 PA2SS 10H EA2,4.1.3 存储器数的寻址方式,四、基址变址寻址,例: MOV AX,ES: BX DI MOV AL, BP SI ,基址变址的寻址过程,设:SS 3000H BP 100H,SI 5,存储单元的 PA 为: SS16BPSI,内存单元中的数据 送到AL中,4.1.3 存储器数的寻址方式,五、相对基址加变址寻址: EA 由三部分构成,1一部分在基址寄存器 BX 或 BP中; 一部分在于变址寄存器 SI 或 DI 中; 一部分为位移量。 在指令中分别给出两个寄存器名及 8 位或 16 位的偏移量 操作数的 有效地址 EA 为: EA1BXSI /

14、DID8 / D16 或:EA2BPSI / DID8 / D16 2当基址寄存器选用 BX 时,数据隐含存于数据段中; 3当基址寄存器选用 BP 时,数据隐含存于堆栈段中, 操作数的 物理地址 PA为: PA1 DS 10 H EA1 PA2 SS 10 H EA1,4.1.3 存储器数的寻址方式,五、相对基址加变址寻址,例 MOV AX, BX + SI + 5 MOV AL,5 BP SI ,内存单元中的数据 送到AL中,存储单元的 PA 为 SS16BPSI5,设:SS 2000H BP 1000H SI 100H,相对基址变址 的寻址过程,4.1.3 存储器数的寻址方式 小结,1除立

15、即寻址和寄存器寻址外,其它五种寻址的操作数均 来自存储器,指令中提供了 EA 或 EA 的计算方法。 2只有 BX、BP、SI、DI 可以出现在方括号 中。 3BX 和 BP、SI 和 DI 不能同时出现在方括号 中。 4方括号 内包括多项内容时,它们只能做加法运算。 5若方括号 内包括有 BP 时,则约定在堆栈段寻址, 其余均在数据段内寻址。 6存储器操作数的物理地址 PA ,需通过地址加法器计算 才能获得。,4.1.3 存储器数的寻址方式 小结,说明:disp表示符号地址、8位或16位的位移量,4.2 8086 的指令格式,4.2.1 指令的基本格式与构成, 汇编语言的指令语句与机器指令一

16、一对应的,经汇编程序 将其翻译成指令代码(目标代码),让CPU 执行某种操作。 指令中应包含的信息: 执行的操作;运算数据的来源;运算结果的去向。,一、指令的基本格式 指令的编写必须满足一定格式,便于机器能够识别指令, 8086 的每条指令由1 4 个部分组成,格式如下: 标识符 指令助记符 操作数;注解 每部分之间用空格分开;方括号中的部分,可有可无。,4.2.1 指令的基本格式与构成,一、指令的基本格式,8086 指令的基本格式也可用下图来表示:,圆头方框表示是 语句中的关键字,重复项之间 用逗号隔开,由后向前的箭头 表示是重复项,由前向后的箭头 表示是可选项,4.2.1 指令的基本格式与

17、构成,一、指令的基本格式, 指令语句中的关键字,不可缺省;是指令操作类型的代表符号 指令助记符的前面可加上多个“前缀”,从而实现某些附加操作,1标识符,2指令助记符, 给指令或某一存储单元所在地址起的名字。由字母、数字、 下划线组成,首字符不能为数字,最长为 31 个字符 标识符后跟冒号时,表示是标号。代表该行指令的起始地址 标识符后不带冒号时,表示变量。伪指令前的标识符不加冒号,4.2.1 指令的基本格式与构成,一、指令的基本格式,3操作数,4注释, 是参加本指令运算的对象,有些指令不需要操作数,可以缺省; 有些指令需要两个操作数,这时必须用逗号将两个操作数分开; 有些操作数可以用表达式来表

18、示。, 是可选项,允许缺省;如果带注释则必须用分号开头; 注释用来对指令功能以说明,方便阅读程序,汇编程序不对它 做任何处理。,4.2.1 指令的基本格式与构成,二、指令的构成,指令系统通常由几十种或百余种指令组成,每种指令都是 由两个字段操作码字段和操作数字段所构成。, 指出指令执行操作所需要的操作数 操作数字段中,可以是操作数本身,也可以是操作数的地址或者 是操作数地址的计算方法。,1操作码字段, 指示计算机所要执行的操作类型 由一组二进制代码表示,在汇编语言中又用助记符代表。,2操作数字段,4.2.1 指令的基本格式与构成,二、指令的构成,2操作数字段: 指令中此字段通常可有一个或两个操

19、作数,或无操作数。 一个操作数称为:单操作数指令; 两个操作数称为:双操作数指令; 无操作数称为:零操作数指令。 双操作数又分别被称为: 目的操作数 dst(在前); 源操作数 src(在后)。 在指令执行之前, src 和 dst 均为参加运算处理的两个操作数, 指令执行后, dst 中存放的是运算处理的结果,源操作数不便。,4.2.2 通用指令代码格式, 8086 的指令长度可在 16 字节的范围,如下图所示, B1 、B2 为基本字节,B3 B6 根据不同指令作相应的安排,指令操作码,寻址方式,D1:REG为dst D0:REG为src,W1:字指令 W0:字节指令,当 MOD 11时,

20、有一个操作数位于存储器中: MOD 00时:存储器数无位移量 MOD 01时:存储器数有8位位移量 MOD 10时:存储器数有16位位移量,R/M 字段,4.2.2 通用指令代码格式,REG 字段,MOD11时:此字段给出指令中第二个操作数所在的寄存器编码; MOD11时:此字段指出指令中存储器操作数的 PA 的计算方法。,表示指令中的一个寄存器操作数的编码, 给出存储器操作数地址的位移量或立即操作数。 由MOD来决定位移量是 8 位,还是 16 位。 立即操作数位于位移量的后面。 若指令中无位移量,立即数就位于 B3B4 字节,B3B6字节,拥有133条基本指令,按功能分成六类: 1数据传送

21、指令 2算术运算指令 3逻辑运算指令 4串操作指令 5控制转移指令 6处理器控制指令,8086CPU 的指令系统,4.3 数据传送类指令, 功能:用以实现 数据传送:, 指令均含有两个操作数,该类指令按功能可分为 4 小类: 通用数据传送指令; 累加器专用传送指令; 标志操作指令; 地址传送指令。, 除 SAHF、POPF 指令外,其它指令均不影响状态标志位。,CPU 的内部寄存器之间; CPU 的内部寄存器和存储器之间; CPU 的内部寄存器和 I/O 端口之间的。,4.3.1 通用数据传送指令,1传送指令:MOV,格式:MOV dst,src 功能:dst src,src:源操作数; ds

22、t:目的操作数,寄存器操作数,立即操作数,段寄存器操作数,存储器操作数,4.3.1 通用数据传送指令,2堆栈操作指令,入栈格式:PUSH src; src: MEM,REG,SEG 功能:将 src 指示的字数据 压入当前栈顶。 出栈格式:POP dst ; dst: MEM,REG,SEG 功能:将当前栈顶的字 弹出到 dst 中,CS 除外。,3交换指令,格式:XCHG OPR1,OPR2; 功能:将两个操作数(字或字节)相互交换位置。,4.3.2 累加器专用传送指令,1输入/输出(I/O)指令, 只能使用 AL 或 AX 寄存器与 I/ O 设备进行数据交换。 该类指令分为直接寻址和寄存

23、器间接寻址两种格式。,4.3.2 累加器专用传送指令,1输入/输出(I/O)指令, 直接寻址的I/O指令,寻址外设的端口地址范围:0255, 间接寻址的I/O指令,寻址外设的端口地址范围:065535。,4.3.2 累加器专用传送指令,2换码指令,格式:XLAT ;AL DS16BX AL 功能:将累加器 AL中的一个值(码)转换为内存表格(Table) 中的某一个值后,再送回AL中。 BX 指向表首,AL 的值为表内指针; 隐含寻址 使用XLAT指令之前,要求BX寄存器指向表的首地址; AL中存放待查的码,它表示表中某一项与表首址的距离; 执行时,将 BX 和 AL 的值相加得到一个有效地址

24、,并将该 地址单元中的值取到 AL 中,这就是查表转换的结果。,4.3.3 标志操作指令, 此类指令共有 4 条,均为单字节指令; 源操作数和目的操作数都隐含在操作码中。,4.3.4 地址传送指令,该类指令传送 MEM的地址到16位 REG 中,而不是它的内容。,1有效地址EA传送指令 格式:LEA REG,MEM ;r src 的EA 功能:将MEM操作数的有效地址EA送到寄存器REG中 2数据段寄存器 DS 传送指令 格式:LDS REG,MEM ;REG MEM ; DS MEM2 功能:将MEM中的两个字分别送到REG和DS中,REG通常用SI。 3附加段寄存器传送指令 LES 格式:

25、LES REG,MEM ;REG MEM ; ES MEM2 功能:将MEM中的两个字分别送到REG和ES中,REG通常用DI。,4.4 算术运算类指令, 该类指令包括加、减、乘、除四种基本运算指令,以及为 适应进行 BCD 码运算而设置的各种校正指令共 20 条。, 五个类型: 加法指令; 减法指令; 乘法指令; 除法指令; 十进制调整指令, 数据形式:8/16位操作数;数据类型:无符号数/带符号数; 加/减法指令对无符号/带符号数可采用同一套指令; 乘/除法指令对无符号/带符号数则不能采用同一套指令。, 算术运算指令的特点有: 1除土1指令外,都有两个操作数;只有源操作数可为立即数; 必须

26、有一个寄存器操作数,单操作数指令不能使用立即数。 2执行后,对状态标志产生影响,但1指令不影响 CF 标志。,1不带进位位 CF 加法指令: ADD 格式:ADD dst, src ;dst dst src 2带进位位 CF 加法指令:ADC 格式:ADC dst, src ;dst dst src +CF 3加1指令:INC 格式:INC dst ;dst dst 1,4.4.1 加法和减法指令 (影响FR),一、加法类指令:( 3 条),4.4.1 加法和减法指令 (影响FR),二、减法类指令:( 5 条),1不带借位减: SUB 格式:SUB dst, src ;dst dst src

27、2带借位减: SBB 格式:SBB dst, src ;dst dst src CF 3求补指令: NEG 格式:NEG dst ;dst 0 dst 4减1指令: DEC 格式:DEC dst ;dst dst 1,4.4.1 加法和减法指令 (影响FR),二、减法类指令:( 5 条),5比较指令:CMP 格式:CMP dst, src ;dstsrc,不回送结果,只影响FR 该 指令常用在条件转移指令的前面,根据比较结果对 FR 中各 标志状态的影响,来判断程序的走向是否产生转移。, 有符号数比较:分两种情况来讨论 同符号数比较,相减时不会产生溢出, OF=0; 可判 SF 的状态: ds

28、t src 则 SF = 0 dst src 则 SF = 1, 无符号数比较: 直接判CF 状态 dst src 则 CF0 ; dst src 则 CF1 ;, 不同符号数比较 相减时可能产生溢出,要同时判 SF 和 OF 的状态 无溢出时 OF=0: dst src 则 SF = 0 dst src 则 SF = 1 有溢出时 OF=1: dst src 则 SF = 1 dst src 则 SF = 0 由此可以得出结论 当:dst src SFOF=0 当:dst src SFOF=1, 有符号数比较:分两种情况来讨论,有符号数比较条件转移指令 JG disp8 ;dst src J

29、L disp8 ;dst src JGE disp8 ;dst src JLE disp8 ;dst src,无符号数比较条件转移指令 JA disp8 ;dst src JB disp8 ;dst src JAE disp8 ;dst src JBE disp8 ;dst src,4.4.2 符号扩展指令,也称为有符号数扩展专用指令,为隐含操作数,共 2 条。,1字节扩展成字指令 CBW 格式:CBW 功能:将AL中的符号位扩展到 AH 中,AX为带符号的16位数。 2字扩展成双字指令 CWD 格式:CWD 功能:将 AX 中的有符号数的符号位扩展到 DX 中,DX,AX中 的数为带符号的双

30、字。,4.4.3 乘法和除法指令,一、乘法类指令, 分为无符号数乘法指令和带符号数的乘法指令; 有两个操作数,被乘数隐含在 AL或AX中,运算规则如下图所示,1无符号数乘法指令 MUL 格式: MUL src ;src 为 MEM,REG 运算结果只影响 OF 和 CF ;SF、ZF、AF 状态不定。,4.4.3 乘法和除法指令,一、乘法类指令, 分为无符号数乘法指令和带符号数的乘法指令; 有两个操作数,被乘数隐含在AL或AX中,运算规则如下图所示,2有符号数乘法指令 IMUL 格式:IMUL src ;src 为 MEM,REG 当:CFOF0 时: 积的高半部分是低半部分符号位的扩展,全“

31、0”或全“1”。 当: CFOF1时: 积大于8位或16位,AH 或 DX 也是乘积的有效值(含符号),4.4.3 乘法和除法指令,二、除法类指令, 分为无符号数除法指令和带符号数的除法指令; 两个操作数,被乘数隐含在AX或AX、DX中,运算规则如下图:, 除法指令的约定:除数只能是被除数的一半字长; 运算结果影响 FR寄存器的状态标志,但其状态是不定的。,1无符号数除法指令 DIV 格式:DIV src ;src 为 MEM, REG ,4.4.3 乘法和除法指令,二、除法类指令, 分为无符号数除法指令和带符号数的除法指令; 两个操作数,被乘数隐含在AX或AX、DX中,运算规则如下图:,2有

32、符号数除法指令IDIV 格式:IDIV src ;src为 MEM, REG 余数符号同商的符号 字节相除时:被除数应扩展为16位 字相除时:被除数应扩展成32位,无符号数:对 AH 清零 有符号数:有专用指令,无符号数:对 DX 清零 有符号数:有专用指令,4.4.4 十进制调整指令, 调整指令的约定:被调整的 BCD 码运算结果应放在 AL中, 调整后正确的 BCD 码自动返回AL中; 共有六种调整指令,均为隐含操作数。,1组合 BCD 码加法调整指令(不影响OF的状态) 格式:DAA ;应紧跟在 ADD、ADC、INC 指令之后 2组合 BCD 码减法调整指令(不影响OF的状态) 格式:

33、DAS ;应紧跟在 SUB、SBB、DEC 指令之后 3ASCII 码加法调整指令(只影响AF和CF的状态) 格式:AAA ;应紧跟在 ADD、ADC、INC 指令之后 调整后 AL 中高四位为零; 调整后,如果 AF = 1,则有 CF =1,并将:AH+1 AH,4.4.4 十进制调整指令, 调整指令的约定:被调整的 BCD 码运算结果应放在 AL中, 调整后正确的 BCD 码自动返回AL中;,4ASCII 码减法调整指令(影响 AF 和 CF ) 格式:AAS ;应紧跟在 SUB、SBB、DEC 指令之后 调整后 AL0,如果 AF1,则有:CF1,AH1 AH 5非组合 BCD 码乘法

34、调整指令(影响 SF,ZF,PF) 格式:AAM ;应紧跟在 MUL 指令之后 结果在 AX 中,AH 和 AL 中分别为高位和低位非组合的BCD码 6非组合 BCD 码除法调整指令(影响 SF,ZF,PF) 格式:AAD ;应放在 除法指令 DIV 之前 AX 中为两个非组合的 BCD 码(被除数) 商在 AL 中,余数在 AH 中。,4.5 位操作类指令(逻辑运算), 8 或 16 位数的逻辑运算与移位指令,操作是按 位 进行的; 由逻辑运算、移位、循环移位三小类指令组成,共 13 条。,4.5.1 逻辑运算指令,1逻辑非:NOT dst ;dst dst,但不影响 FR 2逻辑与:AND

35、 dst,src ;dst dst src 3逻辑或:OR dst, src ;dst dst src 4逻辑异或:XOR dst,src ;dst dstsrc 5测试指令:TEST dst,src ;dst src,只影响标志 其它指令影响 FR,但 AF 不定 例: NOT BYTE PTRBX NOT WORD PTRBX+SI INC BYTE PTR2100H PTR:属性操作符; BYTE/WORD:属性类型,4.5.2 移位指令, 目的操作数dst REG,MEM ; 可以是字,也可以是字节,1算术左移指令SAL 格式:SAL dst,CNT 2逻辑左移指令SHL 格式:SHL

36、 dst,CNT 3算术右移指令SAR 格式:SAR dst,CNT 4逻辑右移指令SHR 格式:SHR dst,CNT,4.5.3 循环移位指令, 移一位时,CNT = 1; 当移动多位时,CNT 应为 CL,CL中的数为移位位数。,1循环左移指令ROL 格式:ROL dst,CNT 2循环右移指令ROR 格式:ROR dst,CNT 3带CF循环左移指令RCL 格式:RCL dst,CNT 4带CF循环右移指令RCR 格式:RCR dst,CNT,4.6 串操作类指令, 串操作就是用一条指令实现对一串字符或数据的操作, 使用该类指令时,有如下约定: 源串在 DS 段中:SI 指示源串首元素

37、在数据段的有效地址; 目的串在 ES 段中:DI 指示目的串首元素在 ES 段的有效地址; 每做一次串操作:自动修改指针SI 和DI,使其指向下一个元素。 当 DF0 指针值增加 字节串操作时 字串操作时 用 CLD 指令使 DF0 SI1 SI SI2 SI DI1 DI DI2 DI 当 DF1 指针值减小 用 STD 指令使 DF1 SI1 SI SI2 SI DI1 DI DI2 DI 隐含使用了SI、DI;及AX,AL作为 dst 或 src。,4.6.1 基本串操作指令,4.6.1 基本串操作指令,3串搜索指令SCAS ( 影响 FR) 格式:SCASB ;AL(ESDI)且 DI

38、1 DI SCASW ;AX(ESDI)且 DI2 DI src 为 AL/AX,dst 为 MEM,在扩展段;B为字节,W为字。 4串装入指令LODS (不影响 FR) 格式:LODSB ;(DSSI) AL 且 SI1 SI LODSW ;(DSSI) AX 且 DI2 DI src 为MEM,在数据段,dst为AL/AX ;B为字节,W为字。 5串送存指令STOS (不影响 FR) 格式:STOSB ;AL (ESDI)且 DI1 DI STOSW ;AX (ESDI)且 DI2 DI src 为 AL/AX,dst 为 MEM,在扩展段; B为字节,W为字。,4.6.2 重复操作前缀,

39、 重复前缀用来控制紧跟在其后的字符串操作指令是否重复执行 CX 寄存器中的值为重复的次数 分为无条件重复和条件重复两类,共3条,1无条件重复前缀REP 格式:REP ;用在MOVS、STOS、LODS指令前 功能:对跟在REP后的串操作指令重复执行,执行一次串操作: CX1 CX, 当 CX 0 时,重复执行串操作; 当 CX 0 时,停止执行串操作,转向执行下一条指令。 用于存储器中数据块的搬家,4.6.2 重复操作前缀,2相等重复前缀REPE 格式:REPE ;用在CMPS、SCAS指令前 功能:对跟在REPE后的串操作指令按条件重复执行条件为: CX 0 且 ZF 1 串比较或扫描后,C

40、X1 CX,当满足上述条件,重复操作; 当 ZF 0 或 CX 0 时,停止重复操作,执行下一条指令。 用于比较两个串是否相同 或 串中的所有元素都相同。,4.6.2 重复操作前缀,3不相等重复前缀REPNE 格式:REPNE/REPNZ ;用在CMPS、SCAS指令前 功能:对跟在REPNZ后的串操作指令重复执行条件为: CX 0 且 ZF 0 串比较或扫描后,CX1 CX,当满足上述条件,重复操作; 当 ZF 1 或 CX 0 时,停止重复操作,执行下一条指令。 用于比较两个串中的元素都不相等 或在 串 中查找某个元素。,4.7 控制转移类指令, 控制转移(Control Jump)类指令

41、的功能是改善程序执行顺序。, 指令执行的顺序是由代码寄存器 CS 和指令指针 IP 的内容确定, 执行程序时,每取出、执行一字节指令,IP 的内容将自动加1, 指向下一指令字节,以实现程序的循序执行。如果改变 CS 和 IP 的值或仅改变 IP 的值,程序的执行循序就会发生改变。, 控制转移类指令就是通过改变CS、IP,从而实现对程序流向的 控制。因此,控制转移指令中要给出转移的目标地址。, 8086 指令系统共有五类转移指令: 无条件转移、条件转移、循环控制、过程调用和返回、中断。, 除中断类指令外,其它类指令均不影响标志位。,4.7 控制转移类指令转移地址的寻址方式, 控制转移指令的转移地

42、址寻址方式与操作数寻址方式是不同, 控制转移指令根据转移的目标地址处于当前段内或段外,可分为 段内转移和段间转移。 段内转移 称 “近转移”,目标地址为“NEAR”类型;需改变IP的值。 段间转移 称 “远转移”,目标地址为“FAR”类型。不但要改变IP的 值,同时还要给一个新的代码段值,即改变CS的值。, 段内和段间转移指令按转移地址的寻址方式,又可分为两种: “直接寻址” 和 “间接寻址”。, 控制转移指令的转移地址寻址方式有以下四种: 1段内直接寻址; 2段内间接寻址; 3段间直接寻址; 4段间间接寻址;,4.7 控制转移类指令转移地址的寻址方式,1段内直接寻址: 指令中给出了 8 /

43、16 位的相对位移量,指令转向的有效地址为: 当前 IP 的内容 8 / 16 位相对位移量 IP 当位移量为 8 位时,称段内直接短转移; 当位移量为 16 位时,称段内直接近转移。 2段内间接寻址: 指令中指定一个16 位寄存器 或 存储器字单元 的内容做为转移的 有效地址,直接取代 IP 的内容。 3段间直接寻址: 指令中直接给出了转向目标的段基址和段内偏移地址,用此地址 分别取代 CS 和 IP 中的内容,完成从当前段向另一个段的转移 4段间间接寻址: 指令中给出一个存储单元地址,用该地址所指的两个相邻字单元 的内容“32 位”来取代 CS 和 IP 中的内容, 从而实现段间转移。,4

44、.7.1 无条件转移指令, 无条件转移指令不影响标志位 根据转移距离的远近,JMP 指令又分成下面几种类型:,基本格式:JMP target ;target 转移的目标地址操作数 功能:无条件转移到指令给出的目标地址 去取指令并执行。,无条件转移指令应用举例,例:在存储器2002单元开始放有两个无符号的字A和B,比较其大小。 A B ,AX1; A B ,AX0; A B ,AX1;,2段内直接近转移,5段间间接转移,格式:JMP DWORD PTRMEM 功能:根据指令中的 MEM 寻址方式,将指定内存单元中的双字, 第一个字送 IP,第二个字送 CS,使程序运行发生转移。 以上三种转移指令

45、,均属绝对寻址(转移)方式。,例如:JMP DWORD PTRBXSI 若:当前CS3000H,DS2000H,BX1000H,SI0050H 内存单元:(21050H 21053H) 00H,66H,00H,40H 指令执行后:IP6600H,CS4000H,转移的目标地址 46600H,4.7.2 条件转移指令, 指令对状态标志位进行测试: 当满足要求的条件时,IP IPtarget ;则发生转移; 不满足要求的条件时, 则顺序执行下一条指令。, 条件转移指令共有四种类型: 1单个标志位的条件转移; 2无符号数比较的条件转移; 3有符号数比较的条件转移; 4测试 CX 0 的条件转移;,

46、属段内直接短转移指令,指令中的标号为 8 位带符号的偏移量。 目的地址在本指令的下一条指令地址的: 128 127 个字节的范围之内, 条件转移指令也都不影响标志位。, 如转移的范围超出此范围,可在条件转移指令后加一条无条件转 移指令来实现:即由条件转移指令转到跟在其后的无条件转移指 令,借助于无条件转移指令实现整个地址空间的转移。,4.7.2 条件转移指令,一单个标志位的条件转移指令, 当条件成立时,发生转移;即:IP IP disp8,1测试ZF: JZ/JE disp8 ;ZF1 结果为零,则转移 JNZ/JNE disp8 ;ZF0 结果不为零,则转移 2测试CF:JC disp8 ;

47、CF1 有进位/借位,则转移 JNC disp8 ;CF0 无进位/借位,则转移 3测试SF:JS disp8 ;SF1 结果为负,则转移 JNS disp8 ;SF0 结果为正,则转移 4测试OF:JO disp8 ;OF1 结果有溢出,则转移 JNO disp8 ;OF0 结果无溢出,则转移 5测试PF:JP disp8 ;PF1结果中1的个数为偶数,则转移 JNP disp8 ;PF0 结果中1的个数为奇数,则转移,4.7.2 条件转移指令,二两个无符号数比较转移指令:应紧跟在 CMP 指令后,1高于或不低于等于:JA / JNBE disp8 ;dst src 则转移 2高于等于或不低

48、于:JAE / JNB disp8 ;dst src 则转移 3低于或不高于等于:JB / JNAE disp8 ;dst src 则转移 4低于等于或不高于:JBE / JNA disp8 ;dst src 则转移,1大于或不小于等于:JG / JNLE disp8 ;dst src 则转移 2大于等于或不小于:JGE / JNL disp8 ;dst src 则转移 3小于或不大于等于:JL / JNGE disp8 ;dst src 则转移 4小于等于或不大于:JLE / JNG disp8 ;dst src 则转移,三两个有符号数比较转移指令:应紧跟在 CMP 指令后,四测试CX0的条

49、件转移指令,格式: JCXZ disp8 ;CX0,则转移, 对需要反复执行的某段程序“ 此段程序称为循环体”,可采用循环 程序结构来进行。 循环控制指令必须以CX作计数器,控制循环次数。并可根据设置 的循环条件,决定是否循环执行循环体。 该类指令一般放在循环体的尾部或首部。执行该指令时对设置的 循环条件进行判断:条件满足则转移到该指令中指明的标号地址 开始执行循环体;条件不满足,则顺序执行。 该类指令属段内直接短转移,指令中的标号地址为 disp8。 1计数循环指令LOOP 格式:LOOPdisp8 ;CX 0, IP IP + disp8 功能:CX 为循环次数计数器,循环次数置入 CX

50、中,执行一次 LOOP 指令,CX1 CX,并判断 CX 是否等于零, 当 CX 0 时,即产生转移;如果 CX 0,顺序执行。,4.7.3 循环指令,格式:LOOPNZdisp8 ;CX0 且 ZF0时,则转移 LOOPNEdisp8 ;CX0 且 ZF0时,则转移 功能:执行一次该指令,CX1 CX,判CX0且ZF0 时, 则产生转移, 即: IP IPdisp8 ZF0,说明前一条比较指令比较的结果不相等,其差不为零,格式:LOOPZ disp8 ;CX 0 且 ZF1时,则转移 LOOPEdisp8 ;CX 0 且 ZF1时,则转移 功能:执行一次该指令,CX1 CX,判CX0且ZF1

51、时, 则产生转移,即:IP IPdisp8 ZF1,说明前一条比较指令比较的结果相等,即其差为零。,2结果为零或相等循环指令:一般用在 CMP 指令后,3结果不为零或不相等时循环指令:一般用在 CMP 指令, 循环控制指令必须以CX作计数器,控制循环次数。,4.7.4 过程调用指令, 过程调用指令是为程序设计实现模块化而准备的。, 过程:把某些具有独立功能的程序编写成独立的程序模块,独立 的放在代码段中某一处,供一个或多个程序调用。 这个模块称为:“ 过程 ” 或 “子程序 ” 。 过程名:过程(子程序)的 标号地址。(也称子程序名) 调用过程:使用CALL指令,使程序的执行跳转到子程序运行。

52、 过程返回:子程序执行完毕后,要返回到调用指令的下一条指令 处去顺序执行,即“子程序返回”;因此在子程序的结尾处,要安 排子程序返回指令RET。 子程序返回指令REF 指令其核心也是一种转移。,4.7.4 过程调用指令,一、调用指令 CALL, 无条件转移 JMP 和过程调用 CALL 及过程返回 RET 指令都是 通过改变 CS 和 IP 值来改变程序执行的循序。 但是:CALL 指令要先将 IP 和 CS 的当前值压入堆栈保存,以备 返回时使用。 RET 指令则将执行 CALL 指令时压入堆栈的值弹回到CS和IP中, 以实现正确返回,CALL 和 RET 指令必须成对使用。, 根据子程序距离 CALL 指令位置的远/近,调用有四种格式。, 该指令的目的是转向目标地址所指的过程“子程序”,但要保证 子程序执行完毕后,返回到调用指令CALL 的下一条指令继续 执行原来的主程序。 CALL指令执行时的操作分两步进行: 第一步是将返回地址入栈,即CALL下面那条指令的地址入栈。 对于段内调用来说,执行的操作是 SP SP ;将当前 IP 的内容入栈。 对于断间调用来说,执行的操作是 SP SP ;将当前 CS 的内容入栈, SP SP ;将当前 IP 的内容入栈。 第二步是

温馨提示

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

最新文档

评论

0/150

提交评论