第 三 章 指令系统.ppt

上传人:创****公 文档编号:1584913 上传时间:2019-10-18 格式:PPT 页数:195 大小:688KB
返回 下载 相关 举报
第 三 章 指令系统.ppt_第1页
第1页 / 共195页
第 三 章 指令系统.ppt_第2页
第2页 / 共195页
点击查看更多>>
资源描述

《第 三 章 指令系统.ppt》由会员分享,可在线阅读,更多相关《第 三 章 指令系统.ppt(195页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第8章 寻址方式与指令系统,8.1 8086/8088的寻址方式与指令系统,8.1.1 8086/8088 的寻址方式1. 寻址方式概述指令通常应提供的信息: (1) 做什么操作 (2) 操作数从哪里来 (3) 操作结果放在哪里 (4) 对于调用和转移指令,还要涉及转移或调用地址的提供方式,指令的组成,操作码字段(field) 标明计算机要执行什么操作操作数字段 指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地方),以及操作结果送到哪里,指令的一般格式,操作数字段可以有一个,二个或三个操作数,通常称为“一地址”,“二地址”或“三地址”指令,示例,加1指令 INC AX 只需要指出加

2、1的操作数,它是“一地址”指令。 双操作数指令 ADD AX, BX 大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:除给出参加运算的两个操作数外,还要指出运算结果的存放地址。,现代微型计算机中多采用二地址指令,两个操作数分别称为“源操作数”和“目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。指令的操作码在机器中的表示比较简单,只要对每一种操作指定相应的二进制代码即可;而指令的操作数字段的情形就比较复杂。,寻址方式,定义 :指令中如何提供操作数或操作数地址的方式称为寻址方式。 规定如何对地址字段作出解释以找到操作数 *程序转移时需提供转移地址,

3、这跟提供操作数地址在方法上没有本质区别,因此也归入寻址方式的范畴。,指令系统设计,一个指令系统能够提供哪些寻址方式,能否为编制程序提供方便,这是指令系统设计的关键。需要说明的是,在不同的计算机系统中,寻址方式的名称和分类并不统一,但基本可以归结为以下几种方式或它们的变型或组合:,寻址方式的名称和分类,立即寻址(立即数寻址)寄存器寻址直接寻址间接寻址变址寻址,例如,Z80系统:立即寻址 ;直接寻址立即扩展寻址;零页寻址隐含寻址;相对寻址寄存器寻址;变址寻址寄存器间接寻址;位寻址,两类寻址方式 数据的寻址方式 转移地址的寻址方式(我们重点讨论数据的寻址方式) 2. 数据的寻址方式,表81 数据的寻

4、址方式,(1) 立即寻址(Immediate addressing),指令中直接给出操作数,操作数紧跟在操作码之后,作为指令的一部分存放在代码段里,在取出指令的同时也就取出了操作数,立即有操作数可用,所以称之为立即寻址。,目的 源 example,MOV AL, 80H ; 低地址 存储器 AX MOV AX, 3064H ; 代 码 ADD AL, 20H ; 段 ADD AX, 1090H; 高地址,立即数可以为8位,也可以为16位。如果是16位数,则“高位字节存放在高地址中,低位字节存放在低地址中。” 立即寻址方式常用于给寄存器赋值,并且只能用于源操作数,而不能用于目的操作数。,例如,设

5、B为变量,下述4条指令都是正确的,源操作数的寻址方式都是立即寻址: A EQU 86H ; 这是定义常量的伪指令语句,它将A定义为常数86H MOV AL, 5 ; 该指令执行后,AL=05H MOV BL, A ; A是常量,其值为86H,该指令执行后,BL=86H MOV AX, 364H ;该指令执行后,AH=03H,AL=64H,AX=0364H MOV BX, OFFSET B ;该指令执行后,BX中存放的是变量B的偏移地址,下述各条指令源操作数的寻址方式也都是立即寻址,但这些指令都是错误的: MOV AL, 256 ; 256=100H,超过了AL能存放的数的范围 MOV AX,

6、-32769 ; -32769超过了AX能存放的带符号数(补码)范围 MOV 100H, AL ; 立即数不能作为目的操作数 DEC 20 ; 单操作数指令不能使用立即数 MOV DS, 1234H ; 源操作数是立即数,则目的操作数就不能是段寄存器,(2) 寄存器寻址(Register addressing),操作数在寄存器中,指令中指明寄存器号,这种寻址方式叫寄存器寻址。对于8位操作数,寄存器可以是 AH, AL,BH,BL, CH, CL, DH, DL .对于16位操作数,寄存器可以是AX, BX,CX, DX, SI, DI, SP ,BP,CS,DS,ES,SS (但CS 不能作目

7、的寄存器),EXAMPLE,INC AX ; MOV AX, BX ; DEC AX ; ROL AH , 1 ; 将AH中的内容循环左移一位,练习:MOV AX , BX ;正确。指令执行后,AXBX,但BX不变 MOV AX, BL ;错误。源和目的的位数不相同 MOV CS, AX ;错误。CS不能作为目的操作数 MOV ES, DS ;错误。两个操作数不能都是段寄存器,寄存器寻址的特点,(1) 操作数就在寄存器中,不需要访问存储器来取得操作数(指令执行时,操作就在CPU的内部进行),因而执行速度快。 (2)寄存器号比内存地址短 * 在编程中,如有可能,尽量使用这种寻址方式的指令。 *

8、寄存器寻址方式既可用于源操作数,也可用于目的操作数,还可以两者都用于寄存器寻址方式(如 MOV BX , AX ),除以上两种寻址方式外,下面各种寻址方式的操作数均在存储器中,通过采用不同的寻址方式取得操作数地址,从而取得操作数。,(3)直接寻址(Direct Addressing),说明:在讨论寻址方式时,通常把操作数的偏移地址称为有效地址EA (Effective Address) ,EA可通过不同的寻址方式来得到。在直接寻址方式中,指令中直接给出操作数的有效地址,或者说,有效地址EA就在指令中。它(操作数的有效地址,而不是操作数本身)存放在代码段中指令的操作码之后,但操作数一般存放在数据

9、段中。,例 1. MOV AX , DS:2000H; 如(DS)= 3000H, 则指令的执行情况如下图所示:,代 存储器 采用直接寻址方式,如果没 码 有用“段跨越前缀”标明操作 段 数在哪一段,就默认段寄存 为DS. 30000H AX 数 据 段 32000H 执行结果:(AX)=3050H,当然, 也允许数据存放在数据段以外的其它段(如附加段)。此时应在指令中给出 “跨越段前缀”。例 2: 如数据在附加段(扩展段)中,则应指明“段跨越缀” 。 MOV AX , ES : 3000H 或 ES: MOV AX , 3000H * 为了使指令字不要过长,规定双操作数指令不能两个操作数都用

10、直接寻址方式。 如( MOV 2000H , 3000H ),(4) 寄存器间接寻址(Register indirect Addressing),采用寄存器间接寻址方式时,指令中给 出寄存器号(寄存器为BX,BP,SI和DI之一), 被指定的寄存器中存放着操作数的有效地址,操作数在存储器中(以寄存器的内容为操作数的有效地址)。 BX.对应段寄存器为 DS EA= BP. SS SI .DS DI .DS,Example,MOV AX , BX ; 设 ( DS) = 2000H ,(BX) = 1000H 物理地址20000H 1000H =21000H *指令中也可以通过 AX . “段跨越

11、前缀”取得 数 其他段中的数据, 据 例如: 段 MOV AX,ES: BX 指令的执行结果为: (AX) = 50A0H,(5) 寄存器相对寻址(Register relative addressing),操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。 如下图所示:,BX 8位位移量EA = BP + SI 16位位移量 DI 若没有段跨越前缀,则对于寄存器BX,SI, DI的情况,段寄存器为DS;而对于寄存器为BP的情况,则段寄存器为SS.,Example,MOV AX, SI+3000H 操设(DS)4000H,(SI)=2000H 作物理地址 码40

12、000H+2000H+3000H 位 45000H 移指令的执行情况如 量右图 AX 40000H 43000H SI 数 45000H 据 段,这种寻址方式可用于表格的处理,通过位移量来设置表格的首地址;利用修改基址寄存器或变址寄存器的内容来获得表项的值。,(6)基址变址寻址(Based indexed addressing),操作数的有效地址是一个基址寄存器和一个变址寄存器内容之和,两个寄存器均由指令指定。 BX SI 若基址寄存器为BX,则段寄存器为DSEA + BP DI 若基址寄存器为BP,则段寄存器为SS,Example,例:MOV AX,BX+DI 设(DS)=2100H,(BX

13、)=0158H,DI=10A5H. 则 EA= 0158H+10A5H=11FDH 物理地址21000H+11FDH=221FDH BX 21000H 21158H AX 221FDH,这种寻址方式同样适用于表格(或数组)的处理,首地址可存放在基址寄存器中,而用变址寄存器来访问表格中的各项。由于两个寄存器都可以修改,使 用起来更灵活。,(7 )相对基址加变址寻址(Relative based indexed address),也称“带位移量的基址加变址寻址方式”. 操作数的有效地址是一个基址寄存器和一个变址寄存器内容与8位或16位位移量之和。 BX SI 用BX,则段寄存器为 DS EA= +

14、 + 位移量 BP DI 用BP,则段寄存器为 SS,例:MOV AX,BX+SI+0250H,设(DS)=3000H,(BX)=2000H,(SI)=1000H,则 代 EA 2000H+1000H+0250H=3250H 码物理地址30000H+3250H=33250H 段 BX 30000H AX 位移量 32000H 数 32250H 据 SI 33250H 段,数据的寻址方式的寻址过程(图示),.,指令,数据,寄存器,(1)立即寻址,数据,指令,寄存器,(2)寄存器寻址,图8.1 数据的寻址方式的寻址过程(1),EA,数据,指令,存储器,(3)直接寻址,寄存器,EA,指令,寄存器,(

15、4)寄存器间接寻址,数据,存储器,图8.1 数据的寻址方式的寻址过程(2),数据,存储器,地址,寄存器,寄存器,指令,位移量,+,EA,(5)寄存器相对寻址,图8.1 数据的寻址方式的寻址过程(3),图8.1 数据的寻址方式的寻址过程(4),数据,存储器,基地址,寄存器,基址寄存器,指令,变址寄存器,+,EA,(6)基址变址寻址,变址值,寄存器,图8.1 数据的寻址方式的寻址过程(5),数据,存储器,基址值,寄存器,基址寄存器,指令,变址寄存器,+,EA,(7)基址变址相对寻址,变址值,寄存器,位移量,端口号,数据,指令,端口,(8)直接寻址,DX,端口号,指令,DX,(9)间接寻址,数据,端

16、口,图8.1 数据的寻址方式的寻址过程(6),端口操作数,3 转移地址的寻址方式(*),有关术语和概念: 段内转移如果转移地址与该转移类指令在同一个代码段,这样的转移称为段内转移,也称近转移; 近转移时的转移地址只包含偏移地址部分,找到转移地址后,将转移地址送入IP即可实现转移(CS的内容不必改变);,段间转移如果转移地址与该转移类指令位于不同的代码段,这样的转移称为段间转移,也称远转移;远转移时的转移地址既包含偏移地址部分又包含段基值部分,找到转移地址后,将转移地址的段基值部分送入CS,将转移地址的偏移地址部分送入IP即可实现转移。,直接转移如果转移地址直接放在指令中,则这样的转移称为直接转

17、移,视转移地址是绝对地址还是相对地址(即地址位移量)又可分别称为绝对转移和相对转移,间接转移如果转移地址间接放在其他地方,则这样的转移称为间接转移,视转移地址是在寄存器中还是在存储器中又可分别称为寄存器操作数(寄存器寻址)和存储器操作数(存储器寻址)。 以JMP指令为例,可将转移地址的各种寻址方式列出,如表8-2所示。,表82 转移地址的寻址方式,(1) 段内直接转移(直接近转移),特点:转移地址(通常就是近标号)直接包含在汇编形式的转移指令中,转移指令的机器代码中存放的是该标号与当前IP值的差(标号-IP),此差称为位移量,该位移量与转移指令一起存于代码段: 位移量被放在转移指令的操作码之后

18、,也是“高字节放在高地址单元,低字节放在低地址单元”。在取转移指令时,此位移量即作为转移指令的一部分被取入CPU中。,执行转移指令时,将这个位移量加到IP上即可得到转移地址(标号的值),即 IP+(标号-IP)=标号=转移地址而不必为找这个转移地址再去访问寄存器或存储器。 例如,如果L是本段中的标号,则下述指令采用的是段内直接转移方式: JMP L; 机器指令中的位移量为L-IP,转移地址为L,(2) 段内间接转移(间接近转移), 寄存器操作数(也称寄存器寻址) 例: JMP BX ; BX的内容为转移地址 存储器操作数(也称存储器寻址)(i) 直接寻址 其特征是: 转移地址(偏移地址部分)在

19、数据存储单元中,数据存储单元的地址在指令中直接给出。例如,如果B为存储器数据段中的字变量,则下述两条指令采用的都是段内间接转移、存储器直接寻址方式:,JMP B ;数据存储单元(DS:B)的一个字为转移地址JMP WORD PTR DS:20;数据存储单元(DS:20)的一个字为转移地址,(ii) 寄存器间接寻址 其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单元的偏移地址在BX、BP、SI、DI之一中。例如,下述指令采用的就是段内间接转移、寄存器间接寻址方式: JMPBX ;数据存储单元(DS:BX)的一个字为转移地址 JMPBP ;数据存储单元(SS:BP)的一个字为转移址

20、 JMP DS:BP ;数据存储单元(DS:BP)的一个字为转移地址,(iii) 寄存器相对寻址 其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存单元的偏移地址是寄存器(BX、BP、SI、DI之一)的内容与位移量的和。例如,下述指令采用的就是段内间接转移、寄存器相对寻址方式: JMPBX+20 ;数据存储单元(DS:BX+20)的一个字为转移地址 JMPBP+20 ;数据存储单元(SS:BP+20)的一个字为转移地址JMP DS:BP+20 ;数据存储单元(DS:BP+20)的一个字为转移地址,(iv) 基址变址寻址 其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单

21、元的偏移地址是基址寄存器(BX、BP之一)的内容和变址寄存器(SI、DI之一)的内容之和。例如,下述指令采用的就是段内间接转移、基址变址寻址方式: JMPBX+SI ;数据存储单元(DS:BX+SI)的一个字为转移地址 JMPBP+SI ;数据存储单元(SS:BP+SI)的一个字为转移地址 JMP DS:BP+SI ;数据存储单元(DS:BP+SI)的一个字为转移地址,(v) 基址变址相对寻址 其特征是: 转移地址(偏移地址部分)在数据存储单元中,数据存储单元的偏移地址是基址寄存器(BX、BP之一)的内容、变址寄存器(SI、DI之一)的内容及位移量的和。例如,下述指令采用的就是段内间接转移、寄

22、存器间接寻址方式: JMPBX+SI+20 ;数据存储单元(DS:BX+SI+20)的一个字为转移地址JMPBP+SI+20 ;数据存储单元(SS:BP+SI+20)的一个字为转移地址 JMP DS:BP+SI+20 ;数据存储单元(DS:BP+SI+20)的一个字为转移地址,(3) 段间直接转移(直接远转移),转移地址(通常就是远标号)直接包含在汇编形式的转移类指令中,也直接存放在转移类指令的机器代码中,它是转移类指令不可分割的一部分,位于转移类指令的操作码之后: 高字存放转移地址的段基值部分,低字存放转移地址的偏移地址部分。在取转移类指令时,此段基值和偏移地址作为转移类指令的一部分被取入C

23、PU中,执行转移类指令时,不必为找转移地址再去访问寄存器或存储器。,例如,如果L是其他代码段中的标号,则下述指令采用的就是段间直接转移方式: JMP FAR PTR L ;在L左边通常要加上类型说明FAR PTR,(4) 段间间接转移(间接远转移),段间间接转移时的转移地址既包含偏移地址部分,又包含段基值部分,在数据存储器中占两个字: 低字单元存放偏移地址,高字单元存放段基值。 要在转移类指令中的地址表达式左边加上类型说明DWORD PTR。例如, JMP DWORD PTR B ;1 直接寻址JMP DWORD PTR DS:20 ;2 直接寻址JMP DWORD PTR BX ;3 寄存器

24、间接寻址JMP DWORD PTR BX+B ;4 寄存器相对寻址JMP DWORD PTR BX+20 ;5 寄存器相对寻址JMP DWORD PTR BX+SI ;6 基址变址寻址JMP DWORD PTR BX+SI+B ;7 基址变址相对寻址JMP DWORD PTR BX+SI+20 ;8 基址变址相对寻址,第1条指令中的B是变量,不是标号,因此是段间间接转移、存储器操作数的直接寻址方式,不是段间直接转移方式。在上述各种“相对”寻址方式中,“+B”加的都是B的偏移地址部分而非其内容。,例: 设W为数据段中的字变量,给出如下的指令序列: W DW L MOV SI, OFFSET W

25、MOV AX, W JMP L ; 或JMP AX ;或 JMP W ;或JMPSIL: ,则变量W的内容是标号L,即转移类指令的转移地址。参考表8-2可知: JMP L是段内直接转移(L为标号);JMP AX是段内间接转移、寄存器寻址(寄存器AX的内容是转移地址);JMP W是段内间接转移、存储器直接寻址(变量W的内容是转移地址);JMPSI是段内间接转移、寄存器间接寻址(SI的内容是数据存储单元的偏移地址,数据存储单元的内容才是转移地址)。 4条转移指令分别执行后,都会转移到相同的地址L处。,指令,转移地址,寄存器,(1)直接转移,转移地址,指令,寄存器,(2)寄存器间接转移,图8.2 转

26、移地址的寻址方式的寻址过程(1),EA,转移地址,指令,存储器,(3)直接寻址,寄存器,EA,指令,寄存器,(4)寄存器间接寻址,转移地址,存储器,图8.2 转移地址的寻址方式的寻址过程(2),转移地址,存储器,地址,寄存器,寄存器,指令,位移量,+,EA,(5)寄存器相对寻址,图8.2 转移地址的寻址方式的寻址过程(3),图8.2 转移地址的寻址方式的寻址过程(4),转移地址,存储器,基地址,寄存器,基址寄存器,指令,变址寄存器,+,EA,(6)基址变址寻址,变址值,寄存器,图8.2 转移地址的寻址方式的寻址过程(5),转移地址,存储器,基地址,寄存器,基址寄存器,指令,变址寄存器,+,EA

27、,(7)基址变址相对寻址,变址值,寄存器,位移量,8.1.2 8086/8088 指令系统,可以分为以下六类(四类): 传送指令 算术运算指令 逻辑运算和移位指令 运算类 串操作指令 转移指令 处理器控制指令,(一)传送指令,包括:通用传送指令和专用传送指令两类通用传送指令:,(1) MOV 指令,立即数,存储器,直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址基址变址相对寻址,通用寄存器,AX BX CX DXSI DI SP BPAL BL CL DLAH BH CH DH,段寄存器,DSESSS,CS,例: MOV AL, BL ; MOV DI, AX ; MOV CX, DS:100

28、0H ; MOV BL, 40 ; MOV WORD PTRSI,01H;WORD PTR 字长度标记;BYTE PTR 字节长度标记DWORD PTR 双字长度标记 (伪指令)标志:所有通用传送指令都不影响标志位。,例(错):下述各条指令都是错误的,其中,W1为数据段中的变量: MOV ES, 1234H ; 立即数不能直接送入段寄存器MOV 1AH, CL ; 立即数不能作为目的操作数。不要将1AH错看成AHMOV CS,BX ; CS不能作为目的操作数MOV W1,BX ; 两个内存操作数之间不能传送MOV ES, DS ; 两个段寄存器之间不能传送MOV AX, BL ; 两个操作数的

29、位数(类型)不相同,练习1,用MOV指令实现两内存字节单元内容的交换 2035H 2045H,用直接寻址方式实现,MOV BL, DS:2035 ; MOV CL, DS:2045H ; MOV DS:2045H, BL ; MOV DS:2035H,CL ; HLT,用寄存器间接寻址方式实现,MOV SI , 2035H; MOV DI, 2045H; MOV AH, SI; MOV AL, DI; MOV DS:2035H,AL; MOV DS:2045H,AH;,练习2,把数据块BLOCK1移到BLOCK2 2040H 2060H 把2040H地址开始的10个字节数据移到2060地址开始

30、的10个字节单元处。,ANSWER,START: MOV SI, 2040H ; MOV DI, 2060H ; MOV CX, 0AH; LOOP1: MOV BL, SI+09H; MOV DI+09H,BL ; DEC SI ; DEC DI ; DEC CX ; JNZ LOOP1; HLT ;,练习3,把2040H地址开始的10个字节单元的内容与2060H地址开始的10个字节单元内容互换。,(2)PUSH指令和POP指令,堆栈的图示: 压入:格式 PUSH SRC (SS) 先修改指针: SP SP-2 后压入:(SP+1,SP) SRC(SP) 弹出:格式 POP DST 栈顶 先

31、弹出:DST (SP+1,SP) 压 弹 后修改指针:SP SP+2 入 出高地址 栈底,练习: 设SS1000H,SP2000H,BX1234H,则依次执行完 PUSH AX、PUSH BX 和 POP CX 三条指令后,SS不变,SP ,栈顶单元的物理地址为 ,BXCX 。,(3)XCHG指令(交换指令),格式:XCHG OPR1, OPR2操作:OPTR1 OPTR2标志:O D I T S Z A P C - - - - - - - - -例:XCHG AL,BL; XCHG BX,CX; XCHG DS:2530H, CX;,XCHG指令允许的操作数及数据传送方向,存储器,直接寻址寄

32、存器间接寻址寄存器相对寻址基址变址寻址基址变址相对寻址,通用寄存器,AX BX CX DXSI DI SP BPAL BL CL DLAH BH CH DH,练习1,用XCHG指令改进前面的数据块交换程序: MOV BL , SI +09H XCHG BL , DI+09H MOV SI+09H , BL,练习2,设BX=1234H,DS=2000H,字单元(21234H)=5678H,指令 “XCHG BX, BX” 执行后,BX=5678H,字单元 (21234H)=1234H。由于交换后BX的内容被改变,所以 (DS:BX) 成为存储单元25678H的内容(不再是存储单元 21234H

33、的内容),是未知的。,2. 专用传送指令,专用传送指令有15条,可分为标志传送、查表、地址传送、符号扩展、输入/输出和串传送类共六种,它们的名称、书写格式、完成的操作及操作类型如下表所示。,专用传送指令 (1),专用传送指令 (2) 续表,专用传送指令 (3) 续表,专用传送指令 (4) 续表,(1)标志传送指令,标志传送指令共4条: PUSHF POPF LAHF ;AH Flag的低8位 SAHF ;Flag的低8位 AH例:将8086 标志寄存器的TF位置 “1”,(2)查表指令,查表指令XLAT将以BX+AL为偏移地址的内存单元中的一个字节送到AL中。 在使用XLAT指令前,应先在内存中建立一个字节数据表,表的首字节的偏移地址要事先存入BX,表中待查的数据相对于表开始处的位移量也要事先存入AL。 指令执行时,会将BX的内容与AL的内容相加,用得到的数作为偏移地址,以DS为段地址,将该地址处存储单元中的内容(字节)取到AL中。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 校园应用

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁