第03章 指令格式及寻址方式_第1页
第03章 指令格式及寻址方式_第2页
第03章 指令格式及寻址方式_第3页
第03章 指令格式及寻址方式_第4页
第03章 指令格式及寻址方式_第5页
已阅读5页,还剩203页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章第三章 8086/88指令系统和寻址方式指令系统和寻址方式 概述概述数据寻址方式数据寻址方式指令格式及指令执行时间指令格式及指令执行时间8086/8088指令系统指令系统 3.1概述概述n21、指令、指令 计算机能够识别和执行的指挥计算机进行操作的计算机能够识别和执行的指挥计算机进行操作的命令。命令。指令的表示方式指令的表示方式 例:要将数据段例:要将数据段1234H单元中的内容传送到单元中的内容传送到AL中。中。 MOVAL,1234H 操作码操作码操作数操作数 操作码:说明指令的操作操作码:说明指令的操作 操作数:操作的数据或数据来源操作数:操作的数据或数据来源 2、操作数、操作数n

2、3源操作数源操作数:指明指令操作数据的来源。:指明指令操作数据的来源。目的操作数目的操作数:指明操作结果的保存地。:指明操作结果的保存地。操作数操作数:指令的操作对象。:指令的操作对象。举例:举例: NEXT:MOV AX,1234H ;AX(1234H) 将数据段将数据段1234H单元中的内容传送到单元中的内容传送到AX中。中。操作数类型操作数类型(关键:操作数的位置)(关键:操作数的位置)n4立即数立即数 数据在指令中,即存储器的代码段中,紧跟指令数据在指令中,即存储器的代码段中,紧跟指令操作码之后。操作码之后。 例如:例如: MOV DX,1234H MOV AL,05H .操作码操作码

3、05H05H代代码码段段05H05H.ALAL指指令令寄存器操作数寄存器操作数 数据在数据在CPU中的寄存器内中的寄存器内 n5例如:例如: MOV SS,AX SSSSAXAX3064H3064H3064H3064H1234H1234H3064H3064H指令执行前:指令执行前:指令执行后指令执行后: :n6存储器操作数存储器操作数 位置:内存操作数,即内存中的数。位置:内存操作数,即内存中的数。例如:例如: MOV AX,3100H 6000H6000H.操作码操作码00003131.50H50H30H30H.6 0 0 0 06 0 0 0 03 1 0 03 1 0 0+ +6 3 1

4、 0 06 3 1 0 063100H63100H30H30H50H50HAHAHALAL代代码码段段数数据据段段DSDSn7I/O端口操作数端口操作数 操作数位于操作数位于I/O端口中端口中 例如:例如: IN AX,1234H 从端口从端口1234H读入数据,送到读入数据,送到AX 3. 2 数据寻址方式数据寻址方式 指令中操作数所在位置的给出方式。指令中操作数所在位置的给出方式。 n8 MOV AL,12H 指令系统的寻址方式越多,指令系统的功能越强,灵活性越大。指令系统的寻址方式越多,指令系统的功能越强,灵活性越大。 MOV AL,BL MOV AL,1234H8086/8088操作数

5、地址寻址方式操作数地址寻址方式(一)立即寻址(一)立即寻址 (Immediate addressing)(二)寄存器寻址方式二)寄存器寻址方式 (Register addressing)(三)直接寻址三)直接寻址 (Direct addressing)(四)寄存器间接寻址方式(四)寄存器间接寻址方式(Register indirect addressing)(五)寄存器相对寻址方式(五)寄存器相对寻址方式(Register relative addressing) 或变址寻址(或变址寻址(Index Addressing)(六)基址加变址寻址方式(六)基址加变址寻址方式(Based index

6、ed addressing)(七)相对基址加变址寻址方式(七)相对基址加变址寻址方式(Relative based indexed addressing)学习寻址方式把握两点学习寻址方式把握两点: 1)操作数在指令中的格式。)操作数在指令中的格式。 这是编写、阅读程序时区别各种寻址方式的依据。这是编写、阅读程序时区别各种寻址方式的依据。n102)寻址到的操作数的位置。)寻址到的操作数的位置。 操作数位于代码段中操作数位于代码段中操作数位于寄存器中操作数位于寄存器中操作数位于代码段以外的存储区中操作数位于代码段以外的存储区中操作数位于操作数位于I/O端口中端口中1、操作数位于代码段中、操作数位于

7、代码段中 立即寻址(立即寻址(Immediate addressingImmediate addressing)11指令中的格式:指令中的格式: 直接以数字的形式出现。直接以数字的形式出现。寻址到的操作数位置:寻址到的操作数位置: 操作数就在指令中操作数就在指令中 ,也就是在代码段中。,也就是在代码段中。例:例: MOV AL,05H MOV AL,05H例:例: MOV AX,3064H MOV AX,3064H立即寻址方式立即寻址方式.操作码操作码64H64H30H30H代代码码段段64H64H.30H30HALALAHAH指指令令.操作码操作码05H05H代代码码段段05H05H.ALA

8、L指指令令指令执行后指令执行后: : ( (AL)=05HAL)=05H指令执行后指令执行后: : ( (AX)=3064HAX)=3064H注意:注意:(1)这种寻址方式只能用于源操作数)这种寻址方式只能用于源操作数 n13(2)由于可以直接从指令代码中获得操作数,所以)由于可以直接从指令代码中获得操作数,所以指令执行速度快指令执行速度快(3)立即数可是)立即数可是8位,也可以是位,也可以是16位(低字节存放位(低字节存放于低地址单元,高字节存放于高地址单元)。于低地址单元,高字节存放于高地址单元)。2 2、操作数位于寄存器中、操作数位于寄存器中 寄存器寻址方式寄存器寻址方式 (Regist

9、er addressing)指令中的格式:指令中的格式: 操作数所在的寄存器的寄存器号。操作数所在的寄存器的寄存器号。 寻址到的操作数位置:寻址到的操作数位置: 操作数在寄存器中,指令操作数位置指定寄存器操作数在寄存器中,指令操作数位置指定寄存器号号 。16位操作数位操作数:AX、BX、CX、DX、SI、DI、SP、BP、DS、ES、SS、CS8位操作数位操作数:AH、AL、BH、BL、CH、CL、DH、DL例:例:指令执行前指令执行前: :(AXAX)30643064 (SSSS)12341234 MOV SSMOV SS,AXAX指令执行前:指令执行前:指令执行后指令执行后: :寄存器寻址

10、方式寄存器寻址方式SSSSAXAX3064H3064H3064H3064H1234H1234H3064H3064H指令执行后指令执行后: :(SSSS)3064H 3064H (AXAX)保持不变。保持不变。 n16注意事项:注意事项:(1)不需要总线周期去取操作数,指令执行速度快。)不需要总线周期去取操作数,指令执行速度快。 (2)寄存器寻址方式既可用于源操作数,也可用于目)寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存器寻址方式。标操作数,还可以两者都用寄存器寻址方式。 (3)两个操作数不能同时为段寄存器,目标操作数不)两个操作数不能同时为段寄存器,目标操作数不能是

11、代码段寄存器。能是代码段寄存器。 (4)当两个操作数均为寄存器时,必须使用同样长度)当两个操作数均为寄存器时,必须使用同样长度的寄存器。的寄存器。3、操作数位于代码段以外的存储单元中操作数位于代码段以外的存储单元中 说明:说明:n17在指令中的操作数位置,以多种方式给出操作数所在在指令中的操作数位置,以多种方式给出操作数所在的存储单元的地址,从而找到操作数。的存储单元的地址,从而找到操作数。该操作数又称为该操作数又称为内存操作数内存操作数。有效地址有效地址EA (Effective Address) :操作数的偏移地操作数的偏移地址。址。 (只有位于存储单元的操作数才有偏移地址)(只有位于存储

12、单元的操作数才有偏移地址) 在指令中,必须既指明操作数的有效地址又指明所在的在指令中,必须既指明操作数的有效地址又指明所在的段,才能确定操作数的所在。段,才能确定操作数的所在。3 3、操作数位于代码段以外的存储单元中、操作数位于代码段以外的存储单元中 对于数据段、堆栈段或附加段中的存储器操作数,指令中对于数据段、堆栈段或附加段中的存储器操作数,指令中给出的是其存储单元的有效地址给出的是其存储单元的有效地址EA或产生或产生EA的计算方式。的计算方式。有效地址有效地址EA,是一个是一个16位无符号数,表示操作数所在单位无符号数,表示操作数所在单元距段首的距离(字节数),即逻辑地址中的偏移地址,元距

13、段首的距离(字节数),即逻辑地址中的偏移地址,取值范围取值范围064k-1。 该类寻址方式的执行过程如下:该类寻址方式的执行过程如下:1. CPU根据操作数字段提供的地址信息,由根据操作数字段提供的地址信息,由EU计算出计算出EA;2. BIU根据公式根据公式PA(段首地址段首地址16)EA,计算出物理计算出物理地址;地址;3. 执行总线周期,根据执行总线周期,根据PA取出操作数送给取出操作数送给EU,EU执行该执行该指令。指令。用存储器寻址的指令用存储器寻址的指令,执行速度相对较慢。,执行速度相对较慢。8086/8088的存储器分段组织(的存储器分段组织(64KB),),在存储器操作数在存储

14、器操作数寻址时通常使用默认规则确定当前段首位置。寻址时通常使用默认规则确定当前段首位置。如果指令中需要用到其他逻辑段中的存储器操作数,就应如果指令中需要用到其他逻辑段中的存储器操作数,就应在操作数地址前使用在操作数地址前使用段超越前缀段超越前缀指出段寄存器名。指出段寄存器名。在一条指令中,只能有在一条指令中,只能有一个一个操作数为存储器操作数,或源操作数为存储器操作数,或源或目的(串操作属特殊情况)。或目的(串操作属特殊情况)。访问存储器类型访问存储器类型默认段默认段可指定段可指定段段内偏移地址来源段内偏移地址来源取指令码取指令码CS无无IP堆栈操作堆栈操作SS无无BP串操作源地址串操作源地址

15、DSCS、ES、SSSI串操作目的地址串操作目的地址ES无无DIBP基址寄存器基址寄存器SSCS、DS、ES根据寻址方式求有效地址根据寻址方式求有效地址一般数据存取一般数据存取DSCS、ES、SS根据寻址方式求有效地址根据寻址方式求有效地址该类寻址方式共有五种该类寻址方式共有五种 直接寻址(直接寻址(Direct addressing)n20 寄存器间接寻址方式寄存器间接寻址方式 (Register indirect addressing) 寄存器相对寻址方式寄存器相对寻址方式 (Register relative addressing)基址加变址寻址方式基址加变址寻址方式 (Based in

16、dexed addressing)相对基址加变址寻址方式相对基址加变址寻址方式(Relative based indexed addressing)1)直接寻址()直接寻址(Direct addressing)n21p操作数在存储器中,操作数在存储器中,16位有效地址位有效地址EA由指令中直接由指令中直接给出(操作码之后)。给出(操作码之后)。p默认操作数在数据段,即默认操作数在数据段,即PA(DS16)EA。p注意:注意: 为了区别于立即数,书写汇编语言指令时,有效为了区别于立即数,书写汇编语言指令时,有效地址用方括号地址用方括号 括起来;如果有效地址是符号地址,括起来;如果有效地址是符号地

17、址,则不用加方括号。则不用加方括号。n22例:例:(DS)=6000H (63100H)=3050H 6000H6000H.操作码操作码00003131.50H50H30H30H.6 0 0 0 06 0 0 0 03 1 0 03 1 0 0+ +6 3 1 0 06 3 1 0 063100H63100H30H30H50H50HAHAHALAL代代码码段段数数据据段段DSDS MOV AX,3100H执行指令后执行指令后: : (AXAX)=3050H=3050H源操作数源操作数寻址方式为:寻址方式为: 直接寻址直接寻址物理地址物理地址 PA=63100HPA=63100H执行的操作是:执

18、行的操作是: (AXAX)(3100H3100H) 23【例】【例】寄存器和存储器内容为:(寄存器和存储器内容为:(AX)=1212H,BUF为数据段定义的变量,其偏移地址是为数据段定义的变量,其偏移地址是2000H,(DS)=3000H,(,(32000H)=4545H。执行指令:执行指令:MOV AX,BUF执行后:(执行后:(AX)=?图形表示:图形表示:执行:(执行:(32000H)AX执行后:(执行后:(AX)=4545H操作码操作码BUF(EA)段首址段首址注意:注意:(1)操作数默认段为数据段。即:)操作数默认段为数据段。即: 操作数的物理地址操作数的物理地址=16(DS)+ E

19、A24(2)可用段跨越前缀将数据存放于其它段。)可用段跨越前缀将数据存放于其它段。 例:例: MOV AL,ES:1000H。(3)在双操作数指令中,为了避免指令字节太长,)在双操作数指令中,为了避免指令字节太长,不能同时存在于存储器中。如:不能同时存在于存储器中。如: MOV 1234H,1000H ; 错误指令错误指令 2 2)寄存器间接寻址方式)寄存器间接寻址方式 (Register indirect addressingRegister indirect addressing)25指令中的格式:指令中的格式: 基址基址/变址寄存器变址寄存器 操作数地址:操作数地址: 操作数在存储单元中

20、操作数在存储单元中 有效地址有效地址在指令中所用的在指令中所用的BX、BP或或SI、DI中。中。段地址段地址由所用寄存器决定。由所用寄存器决定。 p操作数在存储器中,操作数在存储器中,16位有效地址位有效地址EA在指令中指在指令中指定的某个寄存器中,称该寄存器为定的某个寄存器中,称该寄存器为间址寄存器间址寄存器。p只有只有BX, BP, SI, DI能够用作间址寄存器,而操作数能够用作间址寄存器,而操作数可位于数据段或堆栈段中可位于数据段或堆栈段中 。寄存器间接寻址方式中寄存器与段的对应寄存器间接寻址方式中寄存器与段的对应26操作数物理地址为:操作数物理地址为:pBP 操作数在堆栈段中操作数在

21、堆栈段中pBX、DI、SI 操作数在数据段中操作数在数据段中PA=16D (DS)+ (BX)PA= 16D(DS)+ (SI)PA= 16D(DS)+ (DI)PA= 16D(SS)+ (BP)n27例例:MOV BXMOV BX,DI DI 寄存器间接寻址方式寄存器间接寻址方式 MOV BXMOV BX,DIDI6000H6000H2000H2000HDSDSDIDI6 0 0 0 06 0 0 0 02 20 00 00 0+ +6 2 0 0 06 2 0 0 0.AOHAOH50H50H.62000H62000H50H50HA0HA0HBLBLBHBH数数据据段段执行指令后:执行指令

22、后: (BX)=50A0H (BX)=50A0H执行的操作是:执行的操作是:(BXBX)(DIDI) 执行指令前执行指令前:(DSDS)=6000H=6000H(DIDI)=2000H =2000H PA=62000H PA=62000H 源操作数源操作数寻址方式为:寻址方式为: 寄存器间接寻址寄存器间接寻址28例例:MOV BP, AXMOV BP, AX1000H1000H3000H3000HSSSSBPBP1 0 0 0 01 0 0 0 03 30 00 00 0+ +1 3 0 0 01 3 0 0 0.34H34H12H12H.13000H13000H12H12H34H34HALA

23、LAHAH堆堆栈栈段段寄存器间接寻址方式寄存器间接寻址方式 MOV BP, AX执行指令前:执行指令前: ( (SS)=1000H , (BP)=3000H SS)=1000H , (BP)=3000H (AX)=1234H(AX)=1234HPA=13000HPA=13000H执行的操作是:执行的操作是:(BPBP)(AXAX)目的操作数目的操作数寻址方式为:寻址方式为: 寄存器间接寻址寄存器间接寻址执行指令后:执行指令后:(BPBP)= =(13000H)=1234H(13000H)=1234H注意:注意:(1)这种寻址方式的操作数存在于某个存储单元中,)这种寻址方式的操作数存在于某个存储

24、单元中,而不是在寄存器中。而不是在寄存器中。29 (2)可以通过指定段跨越前缀使操作数位于其它段。)可以通过指定段跨越前缀使操作数位于其它段。 例如:例如: MOV CX,ES:SI MOV BX,DI MOV BX,DI(BXBX)(DIDI) (BXBX) (DIDI) 3 3)寄存器相对寻址方式)寄存器相对寻址方式30指令中的格式:指令中的格式: disp8/16基址基址/变址寄存器变址寄存器 操作数地址:操作数地址: 操作数在存储单元中操作数在存储单元中有效地址有效地址 = disp8/16+(基址基址/变址寄存器)变址寄存器)段地址段地址由所用寄存器决定由所用寄存器决定 (与寄存器间

25、接寻址方式的情形相同)(与寄存器间接寻址方式的情形相同) p寄存器相对寻址方式是在寄存器间接寻址的基础上,寄存器相对寻址方式是在寄存器间接寻址的基础上,再增加一个指令中给定的再增加一个指令中给定的8位或位或16位的位移量位的位移量D(一个(一个用补码表示的带符号数)。用补码表示的带符号数)。p间址寄存器仍为间址寄存器仍为BX, BP, SI或或DI,使用规则同寄存器,使用规则同寄存器间接寻址。间接寻址。PA=16d (DS)+PA=16d (DS)+(BX)(BX)(SI)(SI)(DI)(DI)+ +8位位移量8位位移量16位位移量16位位移量PA=16d (SS)+PA=16d (SS)+

26、 (BP)(BP)+ +8位位移量8位位移量16位位移量16位位移量例例: MOV AX, 2040HBP MOV AX, 2040HBP 指令执行前指令执行前: (: (SS)=5000H,(BP)=3000H,SS)=5000H,(BP)=3000H, (AX)=1234H (AX)=1234H目的操作数目的操作数寻址方式为:寻址方式为:执行的操作是:执行的操作是: 注意:注意:(1)指令中的格式还可以是:)指令中的格式还可以是:disp8/16 + 基址基址/变址寄变址寄存器存器 例如:例如: MOV AX, 0500H+SI MOV AX, SI + 0500H33 (2)可以通过指定

27、段跨越前缀使操作数位于其它段。)可以通过指定段跨越前缀使操作数位于其它段。 例如:例如: MOV AL,ES:12HBP (3)可使用符号常量作为偏移量)可使用符号常量作为偏移量 例如:例如: MOV AX, COUNTSI(4)可用于表格处理,表格的首地址可设置为可用于表格处理,表格的首地址可设置为disp8/16,基址或变址寄存器作为表格指针基址或变址寄存器作为表格指针 1 0 1 1 1 0 0 00 0 1 1 0 1 0 01 0 0 1 0 0 1 0建立在存储器中建立在存储器中的数据表的数据表0 1 0 1 0 0 1 00 0 0 1 1 0 1 00 1 0 0 0 0 1

28、00 0 0 1 0 0 1 00 0 0 0 0 0 1 00100H0103H数数据据段段例:例:欲读取表中第欲读取表中第4 4个数个数据据, ,存放到(存放到(AL)AL)中。中。 MOV SI , 03H MOV SI , 03H MOV AL , 0100HSI MOV AL , 0100HSI 4 4)基址加变址寻址方式)基址加变址寻址方式35指令中的格式:指令中的格式: 基址寄存器基址寄存器变址寄存器变址寄存器 基址寄存器:基址寄存器:BX、BP变址寄存器:变址寄存器:SI、DI操作数地址:操作数地址: 操作数在存储单元中操作数在存储单元中有效地址有效地址 = (基址寄存器)(基

29、址寄存器)+(变址寄存器)(变址寄存器) 段地址段地址由所用由所用基址寄存器基址寄存器决定决定 36(BP)(BP)+ +(DI)(DI)(SI)(SI)EA=EA=(BX)(BX)+ +(DI)(DI)(SI)(SI)EA=EA=除有段跨越前缀之外,物理地址:除有段跨越前缀之外,物理地址:PA=16d(DSPA=16d(DS)+)+ (BX)(BX)+ +(DI)(DI)(SI)(SI)PA=16d(SPA=16d(SS S)+)+ (BP)(BP) + +(DI)(DI)(SI)(SI)38例例: MOV AX, BXSI指令执行前指令执行前: (: (DS)=3200H, (BX)=04

30、56H, (SI) DS)=3200H, (BX)=0456H, (SI) =1094H=1094H 目的操作数目的操作数寻址方式为:寻址方式为:基址加变址寻址基址加变址寻址PA=334EAHPA=334EAH执行的操作是:执行的操作是: (AXAX)(BXBX)+ + (SI) (SI) )EA= EA= (BX)+ (SI) =(BX)+ (SI) =14EAH14EAH39基址加变址寻址方式基址加变址寻址方式执行指令后:执行指令后:(AXAX)=4567H=4567H.67H67H45H45H存储器存储器32000H32000H334EAH334EAH45H45H67H67HALALAH

31、AH数数据据段段.注意:注意:(1)格式还可以是:)格式还可以是: 基址寄存器基址寄存器+变址寄存器变址寄存器 例:例: MOV AX, BX+SI n40 (2)段跨越前缀)段跨越前缀 例:例: MOV AL,ES:DIBP (3)必须是一个基址寄存器、一个变址寄存器的组合)必须是一个基址寄存器、一个变址寄存器的组合 例例: MOV AX,BXBP 错错 MOV AX,SIDI 错错 (4)可用于表格处理,表格的首地址可设置为基址寄可用于表格处理,表格的首地址可设置为基址寄存器,变址寄存器作为表格指针。存器,变址寄存器作为表格指针。41 1 0 1 1 1 0 0 00 0 1 1 0 1

32、0 01 0 0 1 0 0 1 0建立在存储器中建立在存储器中的数据表的数据表0 1 0 1 0 0 1 00 0 0 1 1 0 1 00 1 0 0 0 0 1 00 0 0 1 0 0 1 00 0 0 0 0 0 1 00100H0103H数数据据段段例:例:欲读取表中第欲读取表中第4 4个数个数据据, ,存放到(存放到(AL)AL)中。中。 MOV BX , 0100H MOV BX , 0100H MOV SI , 04H MOV SI , 04H MOV AL , BXSI MOV AL , BXSI 5)相对基址加变址寻址方式)相对基址加变址寻址方式42指令中的格式:指令中的

33、格式: disp8/16 基址寄存器基址寄存器变址寄存器变址寄存器 操作数地址:操作数地址: 操作数在存储单元中操作数在存储单元中有效地址有效地址 = disp8/16 +(基址寄存器)(基址寄存器)+(变址寄存器)(变址寄存器) 段地址段地址由所用由所用基址寄存器基址寄存器决定决定 43(BP)(BP) + +(DI)(DI)(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量EA=EA=(BX)(BX) + +(DI)(DI)(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量EA=EA=44除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物

34、理地址有二种方式:(DI)(DI)PA=16d(SSPA=16d(SS)+)+ (BP)(BP) + +(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量(DI)(DI)PA=16d(DSPA=16d(DS)+)+ (BX)(BX) + +(SI)(SI)+ +8位位移量8位位移量16位位移量16位位移量45例例: MOV AX, 1234HBXDI指令执行前指令执行前: (: (DS)=3000H (BX)=1346H (DI)=0500HDS)=3000H (BX)=1346H (DI)=0500H源操作数源操作数寻址方式为:寻址方式为:相对基址加变址寻址相对基址加变址寻址

35、PA= PA= 32A7AH32A7AH执行的操作是:执行的操作是: (AXAX)(1234H+1234H+(BXBX)+ + (SI) (SI) )EA= 1234H+EA= 1234H+(BX)+ (DI) =2A7A(BX)+ (DI) =2A7AH H注意:注意:(1)指令中的格式还可以是:)指令中的格式还可以是: disp8/16基址寄存器基址寄存器+变址寄存器变址寄存器 或者或者disp8/16+基址寄存器基址寄存器+变址寄存器变址寄存器。 例:例:MOV AX, 500HBX+SI MOV AX, 500H+BX+SI。 (2)可以通过指定段跨越前缀使操作数位于其它段。)可以通过

36、指定段跨越前缀使操作数位于其它段。 例如:例如: MOV AL,ES: 500HBX+SI 8086/88指令寻址方式指令寻址方式(小结)小结) 1、立即寻址、立即寻址 2、寄存器寻址、寄存器寻址 3、直接寻址、直接寻址 4、寄存器间接寻址、寄存器间接寻址 5、寄存器相对寻址、寄存器相对寻址 6、基址变址寻址、基址变址寻址 7、相对基址变址寻址、相对基址变址寻址3. 3 指令格式及指令执行时间指令格式及指令执行时间3. 3.1 指令格式指令格式3. 3.2 指令的执行时间指令的执行时间了解了解3.4 8086/88CPU指令系统指令系统按功能分类按功能分类1. 1. 数据传送数据传送( (Da

37、ta transfer)Data transfer)2 2 算术运算(算术运算(ArithmeticArithmetic)3 3 逻辑运算和移位指令逻辑运算和移位指令( (Logic&Shift)Logic&Shift)4 4 串操作串操作( (String manipulation)String manipulation)5 5 控制转移(控制转移(Control TransferControl Transfer)6 6 处理器控制(处理器控制(Processor ControlProcessor Control)8086/80888086/8088指令助记符表指令助记符表指令类别指令类别记

38、助符记助符数数据据传传送送通用传送通用传送输入输出输入输出目标地址传送目标地址传送标志传送标志传送算算术术运运算算加法加法减法减法乘法乘法除法除法转换转换MOV, PUSH, POP, XCHG, XLATMOV, PUSH, POP, XCHG, XLATIN, OUTIN, OUTLEA, LDS, LESLEA, LDS, LESLAHF, SAHF, PUSHF, POPFLAHF, SAHF, PUSHF, POPFADD, ADC, INC,ADD, ADC, INC, AAA, DAAAAA, DAASUB, SBB, DEC, NEG, CMP, SUB, SBB, DEC,

39、NEG, CMP, AAS, DAS,AAS, DAS,MUL, IMUL, MUL, IMUL, AAMAAMDIV, IDIV, DIV, IDIV, AADAADCBW, CWDCBW, CWD逻逻辑辑指指令令逻辑运算逻辑运算移位移位 循环移位 循环移位串串处处理理串操作串操作重复控制重复控制控控制制转转移移转转移移无条件转移无条件转移条件条件转移转移循环控制循环控制过程调用过程调用中断指令中断指令处理器控制处理器控制AND, OR, XOR, NOT ,TESTAND, OR, XOR, NOT ,TESTSHL, SAL, SHR, SARSHL, SAL, SHR, SARROL,

40、 ROR, RCL, RCRROL, ROR, RCL, RCRMOVS, CMPS, SCAS, LODS, STOSMOVS, CMPS, SCAS, LODS, STOSREP, REPE/REPZ, REPNE/REPNZREP, REPE/REPZ, REPNE/REPNZJMPJMPJA/JNBE,JAE/JNB,JB/JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS, JG/JA/JNBE,JAE/JNB,JB/JNAE,JBE/JNA,JC,JCXZ,JE/JZ,JNS,JO,JS, JG/JNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC

41、,JNE/JNZ,JNO,JNP/JPO,JP/JPEJNLE,JGE/JNL,JL/JNGE,JLE/JNG,JNC,JNE/JNZ,JNO,JNP/JPO,JP/JPELOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZLOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZCALL, RETCALL, RETINT, INTO, IRETINT, INTO, IRETCLC, STC, CMC, CLD, STD, CLI, STI, NOP, HLT, WAIT, ESC,LOCKCLC, STC, CMC, CLD, STD, CLI, STI, NOP, HLT

42、, WAIT, ESC,LOCK指令类别指令类别记助符记助符符号:符号:reg 通用寄存器通用寄存器Acc AL AL或或AX(AX(取决于操作数长度取决于操作数长度) )src , dst 源,目的操作数源,目的操作数 存储器单元的内容存储器单元的内容( (正常在数据段正常在数据段) )OPRD 操作数操作数seg 段寄存器(段寄存器(CSCS,DSDS,ESES,SSSS)imm 立即数立即数 3.4.1 数据传递指令数据传递指令1、通用数据传送指令、通用数据传送指令(1)基本传送指令)基本传送指令MOV 形式简单,使用频繁,实现寄存器之间,寄存形式简单,使用频繁,实现寄存器之间,寄存器和

43、存储器之间的字和字节的复制。器和存储器之间的字和字节的复制。 语句格式语句格式:MOV dst,src 功能功能:将源操作数(字和字节)传送到目的操作数:将源操作数(字和字节)传送到目的操作数中。其中,操作数可为中。其中,操作数可为8/16位通用寄存器、段寄存器位通用寄存器、段寄存器、存储单元、存储单元、8/16位的立即数;同时要注意用法位的立即数;同时要注意用法。 MOV指令的形式有如下几种:指令的形式有如下几种: 1)从通用寄存器到通用寄存器)从通用寄存器到通用寄存器 MOV reg1,reg22)立即数传送到通用寄存器)立即数传送到通用寄存器 MOV reg ,data 3)通用寄存器和

44、存储单元之间)通用寄存器和存储单元之间 MOV mem (reg),reg (mem)4)立即数传送到存储单元立即数传送到存储单元 MOV mem, data5)段寄存器与通用寄存器间的数据传送段寄存器与通用寄存器间的数据传送 MOV seg,reg 或或 MOV reg, seg 6)段寄存器与存储单元间的数据传送段寄存器与存储单元间的数据传送 MOV seg,mem 或或 MOV mem, seg 使用使用MOV命令,注意以下几点命令,注意以下几点: p 双操作数指令,源和目的操作数类型必须一致;双操作数指令,源和目的操作数类型必须一致;p 源和目的操作数不能同为存储器操作数,如需传送通过

45、通源和目的操作数不能同为存储器操作数,如需传送通过通用寄存器中转;用寄存器中转;p CS和和IP的内容不能随意修改,均不可以作目的操作数;的内容不能随意修改,均不可以作目的操作数;p 不允许在段寄存器之间直接传送数据;不允许在段寄存器之间直接传送数据;p 不允许用立即数作为目的操作数;不允许用立即数作为目的操作数;p 不允许直接向段寄存器传送立即数,如果需要,用通用寄不允许直接向段寄存器传送立即数,如果需要,用通用寄存器或存储单元中转,例如:存器或存储单元中转,例如: MOV AX, DATA; MOV DS, AX。【例】存储器与寄存器间数据传送【例】存储器与寄存器间数据传送MOV AX,B

46、UF ;BUF是变量,源操作数为直接寻址是变量,源操作数为直接寻址MOV BH,DI ;源操作数为寄存器间接寻址源操作数为寄存器间接寻址MOV DI,ES:SI ;源操作数为变址寻址,使用跨段前缀源操作数为变址寻址,使用跨段前缀MOV BP,BX+SI;源操作数为基址加变址寻址源操作数为基址加变址寻址MOV BUFA,DL;BUFA是一字节变量是一字节变量MOV BP,AX;使用使用SS段寄存器段寄存器MOV DS:BP,DL ;使用跨段前缀使用跨段前缀MOV BUF,DS;BUF是个字变量是个字变量MOV ES ,BUF(2)栈操作指令:)栈操作指令:堆栈是用来保护数据和地址的一个存储区域,

47、位于堆堆栈是用来保护数据和地址的一个存储区域,位于堆栈段中,由栈段中,由SS, SP共同负责完成共同负责完成“先进后出先进后出”的工作方的工作方式,只有一个出入口,式,只有一个出入口,SP任何时刻指向栈顶;堆栈总任何时刻指向栈顶;堆栈总是字操作。是字操作。调用子程序或中断处理时,返回地址或断点地址以及调用子程序或中断处理时,返回地址或断点地址以及主程序中一些数据(保护现场主程序中一些数据(保护现场););子程序返回或中断子程序返回或中断处理完毕,恢复现场返回主程序的一系列工作均由堆处理完毕,恢复现场返回主程序的一系列工作均由堆栈实现。栈实现。 1)进栈指令)进栈指令PUSH 2)出栈指令)出栈

48、指令POPn59 进栈指令:进栈指令: PUSH SRC ; (SP) (SP) 2 ( (SP)+1, (SP) ) (SRC) 出栈指令:出栈指令: POP DST ; (DST) ( (SP)+1, (SP) ) (SP) (SP) + 2 80868086堆栈:设于内存堆栈段中的一段存储区域,访问堆栈:设于内存堆栈段中的一段存储区域,访问方式按方式按“先进后出,后进先出先进后出,后进先出”顺序(顺序(Last In First Last In First Out Out 简称简称LIFO)LIFO)。 80868086用用SPSP作为堆栈指针,始终指向栈顶。即作为堆栈指针,始终指向栈顶

49、。即 (SPSP)始终为栈顶单元的偏移地址;始终为栈顶单元的偏移地址; (SSSS)为栈顶单元段地址。为栈顶单元段地址。栈顶栈顶:堆栈中存放信息的最后一个单元。:堆栈中存放信息的最后一个单元。 栈底栈底:堆栈中存放信息的最开始的一个单元。:堆栈中存放信息的最开始的一个单元。 对堆栈的操作对堆栈的操作:入栈和出栈。为字操作。:入栈和出栈。为字操作。向上生成方式向上生成方式:栈底设在高地址,入栈使(:栈底设在高地址,入栈使(SPSP)减小减小1)进栈指令)进栈指令PUSH语句格式语句格式: PUSH src 功能功能:将:将src压入堆栈,压入堆栈,src可为可为16位通用寄存器、段位通用寄存器、

50、段寄存器或字存储单元。寄存器或字存储单元。PUSH指令操作过程指令操作过程:1. 修改栈顶指针,修改栈顶指针,SP=SP-2;2. (SP)=操作数的低八位,操作数的低八位, (SP)+1)=操作数的高八位。操作数的高八位。2)出栈指令)出栈指令POP语句格式语句格式: POP dst 功能功能:将当前:将当前SP所指的栈顶字数据弹出并送到所指的栈顶字数据弹出并送到dst所指所指的的16位通用寄存器、段寄存器(位通用寄存器、段寄存器(CS除外)或字存储单除外)或字存储单元。元。 POP指令操作过程指令操作过程:1.栈顶单元的内容送入栈顶单元的内容送入dst指定位置;指定位置;(SP)=操作数的

51、低八位,操作数的低八位, (SP)+1)=操作数的高八位。操作数的高八位。 2.修改栈顶指针,修改栈顶指针,SP=SP+2。 使用堆栈命令,注意以下几点使用堆栈命令,注意以下几点:立即数不能作为堆栈操作指令的操作数,立即数不能作为堆栈操作指令的操作数,CS可作可作源、但不能为目的操作数;源、但不能为目的操作数;执行执行PUSH,SP值自动减值自动减2,向低端移动,高字节,向低端移动,高字节先入栈;先入栈;执行执行POP,弹出一个字,弹出一个字,SP自动加自动加2,向高端移动,向高端移动,指向新栈顶;指向新栈顶;利用堆栈进行多个内容的保存或恢复时,注意利用堆栈进行多个内容的保存或恢复时,注意“先

52、进后出先进后出”的原则,搞清顺序。的原则,搞清顺序。n64例:例: MOV SP,3678H MOV SP,3678H3000030000H H3FFFFH 3FFFFH 设:设:( (SS)=3000HSS)=3000H堆栈段的物理地址范围为:堆栈段的物理地址范围为: 当前栈顶的物理地址为:当前栈顶的物理地址为:3367833678H H图 4 . 1 ( a )2 21 00 01 1( S P )3 0 0 0 : 3 6 7 8栈 顶栈 底0 50 00 00 8n65 例:例:(SP)=3678H、(、(SS)=3000H、(AX)=0CDABH依次执行下列指令后的结果依次执行下列指

53、令后的结果 。PUSH AXPOP BXPOP CX当前堆栈当前堆栈图 4 . 1 ( a )2 21 00 01 1( S P )3 0 0 0 : 3 6 7 8栈 顶栈 底0 50 00 00 8栈 底0 0图 4 . 1 ( b )A B2 21 13 0 0 0 : 3 6 7 8C D1 00 80 0P U S H S I ( ( S I ) ) = 0 C D A B H栈 顶( S P )3 0 0 0 : 3 6 7 6PUSH AX(AX)=0CDABH( B X ) = 0 C D A B H0 0栈 底图 4 . 1 ( c )3 0 0 0 : 3 6 7 6A B

54、1 12 2C D1 00 00 8P O P B X( S P )3 0 0 0 : 3 6 7 8栈 顶( C X ) = 2 2 1 0 H0 0图 4 . 1 ( d )栈 底3 0 0 0 : 3 6 7 6A B2 21 11 0C D0 80 0P O P C X3 0 0 0 : 3 6 7 A( S P )栈 顶3 0 0 0 : 3 6 7 8例例: :压入堆栈的内容与弹出内容顺序相反压入堆栈的内容与弹出内容顺序相反 PUSH PUSH AX AX PUSH BX PUSH BX PUSH CX PUSH CX POP CX POP CX POP BX POP BX POP

55、 AX POP AX3)交换指令)交换指令:n69语句格式语句格式:XCHG dst,src 功能功能:源与目的操作数(字或字节)交换数据。:源与目的操作数(字或字节)交换数据。注意注意:可在通用寄存器之间,通用寄存器和存储单元:可在通用寄存器之间,通用寄存器和存储单元之间交换数据,不能在两个存储单元之间进行;段寄之间交换数据,不能在两个存储单元之间进行;段寄存器和立即数不能用于交换指令。存器和立即数不能用于交换指令。【例】寄存器与存储器之间数据交换例】寄存器与存储器之间数据交换。MOV AX,5678H ;(;(AX)=5678HMOV BX,0FFFFH ;(;(BX)=0FFFFHXCH

56、G AX,BX;(;(AX)=0FFFFH ,(,( BX)=5678H4)代码转换指令)代码转换指令n70 src表格符号地址(首地址),表格符号地址(首地址), 只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。语句格式语句格式:XLAT src 或或 XLAT功能功能:根据:根据AL中的值从内存表格中查得表元素值后,送回中的值从内存表格中查得表元素值后,送回AL中。中。注意注意: 该指令完成一个字节的查表转换,隐含规定用基址寄存器该指令完成一个字节的查表转换,隐含规定用基址寄存器BX和累加器和累加器AL的内容之和(的内容之和(BX+AL)作为偏移地址访问存作为

57、偏移地址访问存储单元。其中,储单元。其中,BX内放入表首地址,内放入表首地址,AL为表元素的序号,查为表元素的序号,查找范围找范围256个字节;个字节;两种格式两种格式:带表首址的,一般用符号地址表示;省略表首值。:带表首址的,一般用符号地址表示;省略表首值。常用于通过查表进行代码转换常用于通过查表进行代码转换 n71XLATXLAT指令使用方法指令使用方法: 建立一个表格;建立一个表格;表格首偏移地址存入表格首偏移地址存入BXBX;需要转换代码的序号(相对与表格首地址位移量)需要转换代码的序号(相对与表格首地址位移量)存入存入AL;AL;(表中第一个元素的序号为表中第一个元素的序号为0 0)

58、执行执行XLATXLAT指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于ALAL中。中。 XLATXLAT指令应用举例指令应用举例: 内存的数据段中有一张内存的数据段中有一张十六进制数字的十六进制数字的ASCIIASCII码表。码表。首地址为:首地址为:Hex_table ,Hex_table ,欲查出表中第欲查出表中第1010个元素个元素(A A) )3030H H3131H H3232H H.3939H H4141H H4242H H.4646H H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2He

59、x_table+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FH FF BB AA9911220016进制数的进制数的ASCII码表码表MOV BX,OFFSET Hex_tableMOV AL,0AH XLAT Hex_table假设:假设:(DSDS)=0F000H=0F000H, Hex_table=0040H Hex_table=0040H(ALAL)=0AH=0AH执行执行XLATXLAT以后:以后: (ALAL)=41H=41H=(0F004AH0F004AH)即即“A A”的的ASCIIASC

60、II码。码。3030H H3131H H3232H H.3939H H4141H H4242H H.4646H H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_table+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FH FF BB AA9911220016进制数的进制数的ASCII码表码表2、I/O数据传递指令数据传递指令 n741)输入指令)输入指令IN 输入指令用来从指定的外设寄存器(端口)取信输入指令用来从指定的

温馨提示

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

评论

0/150

提交评论