第03章-微型计算机指令系统课件1.ppt

上传人(卖家):三亚风情 文档编号:3407475 上传时间:2022-08-28 格式:PPT 页数:229 大小:3.55MB
下载 相关 举报
第03章-微型计算机指令系统课件1.ppt_第1页
第1页 / 共229页
第03章-微型计算机指令系统课件1.ppt_第2页
第2页 / 共229页
第03章-微型计算机指令系统课件1.ppt_第3页
第3页 / 共229页
第03章-微型计算机指令系统课件1.ppt_第4页
第4页 / 共229页
第03章-微型计算机指令系统课件1.ppt_第5页
第5页 / 共229页
点击查看更多>>
资源描述

1、第三章第三章 微型计算机指令系统微型计算机指令系统 3.1 指令的构成与操作数的类型 3.2 寻址方式 3.3 8086/8088指令系统 3.4 80286、80386扩充与增加的指令指令指令控制计算机完成指定操作控制计算机完成指定操作的的命令命令机器指令机器指令指令的二进制代码形式。例如:指令的二进制代码形式。例如:CD21H汇编指令汇编指令助记符形式的指令。例如:助记符形式的指令。例如:INT 21H指令系统指令系统CPU所有指令及其使用规则的集合所有指令及其使用规则的集合 8088/8086指令系统指令系统:(1)指令向后兼容(指令向后兼容(x86系列)系列)(2)应用广泛,资料易于寻

2、找应用广泛,资料易于寻找指令指令按按功能分为功能分为六大类六大类(9292种)种)(1)数据传送数据传送类;类;(2)算术运算算术运算类;类;(3)逻辑运算逻辑运算和和移位移位;(4)串)串操作操作;(5)控制转移控制转移类;类;(6)处理器控制处理器控制。3.1 指令的构成与操作数的类型指令的构成与操作数的类型操作码操作码操作数操作数(操作的性质)(操作的性质)表示指令应完成的具体操作 以的形式表示(操作的对象)(操作的对象)表示指令的操作对象(参与操作的对象)源操作数、目的操作数有些指令不需要操作数,通常的指令都有一个或两有些指令不需要操作数,通常的指令都有一个或两个操作数,也有个别指令有

3、个操作数,也有个别指令有3个甚至个甚至4个操作数个操作数 每种指令的每种指令的操作码操作码:用一个助记符表示(指令功能的英文缩写)用一个助记符表示(指令功能的英文缩写)对应着机器指令的一个或多个二进制编码对应着机器指令的一个或多个二进制编码 指令中的指令中的操作数操作数:可以是一个具体的数值可以是一个具体的数值 可以是存放数据的寄存器可以是存放数据的寄存器 或指明数据在主存位置的存储器地址或指明数据在主存位置的存储器地址 双操作数 OPRDEST,SRC 单操作数 OPRDEST 无操作数 OPR(隐含操作数)寻址方式及操作数类型 寻找指令中所需操作数的方法 所需的操作数 寄存器操作数 存储器

4、操作数 立即数操作数 输入/输出端口操作数汇编语句格式汇编语句格式说明要执行的说明要执行的是什么操作是什么操作操作对象,可以操作对象,可以有有0个、个、1个或个或2个个目的目的源源指令举例:ADD AX,SI+6MOV AX,BX操作码 操作数INC BXHLT3.1.2 8086/8088的通用指令格式字节数为16个字节一、无操作数指令(一、无操作数指令(一般属于控制类指令,一般属于控制类指令,CPU指令)指令)例如:HLT (0F4H)NOP (00H)二、单操作数指令二、单操作数指令(指令中仅含有一个操作数)(指令中仅含有一个操作数)例如:例如:三、双字节操作数指令01:8位disp/1

5、0:16位dispD Op-codeW1 7 20REGMODR/M5 4 37 6B12 1 0B2B3B4B5B6DISP-L或DATA-LDISP-H 或DATA-HDATA-LDATA-H指令操作码寄存器为D=1 DSTD=0 SRC寄存器为W=1 WORDW=0 BYTE寻址方式Reg编码Reg编码/EA计算方法Reg编码Reg编码00:无偏移量11:两个寄存器Reg编码Reg编码EA计算方法EA计算方法地址位移量或立即数立即数3.1.3 8088/8086的操作数分为3类 1 1、立即数(常数)立即数(常数)取值范围如下表:8位16位无符号数00H-FFH(0-255)0000H-

6、FFFFH(0-65535)带符号数80H-7FH(-128127)8000H-7FFFH(-3276832767)MOV AX,0FA00H;正确正确MOV 8000H,DX;错误错误 2 2、寄存器操作数寄存器操作数放在放在8个个通用寄存器通用寄存器或或4个个段寄存器段寄存器中的操作数中的操作数1 6 位位B XB HB L1 6 位位C XC HC L1 6 位位D XD HD L只能存放字操作数只能存放字操作数段段寄存器存放寄存器存放当前操作数当前操作数的的段基段基地址地址不不允许允许将将立即立即数数传送传送到段到段寄存器寄存器不能由用户赋值,不能由用户赋值,段段寄存器寄存器不可互传不

7、可互传SIDIBPSPCSDSESSS 3 3、存储器操作数存储器操作数存储器操作数存储器操作数字节字节字字双字双字124类型类型 存储单元个数存储单元个数一般不一般不允许允许两个两个操作数同时操作数同时为为存储器操作数存储器操作数存储单元的存储单元的物理地址物理地址=段基段基地址地址+偏移地址偏移地址若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。存储器操作数存储器操作数的的偏移地址偏移地址(也称(也称有效地址有效地址)可以通过可以通过不同不同的的寻址方式寻址方式由由指令指令给出。给出。例如,若例如,若(BX)=2000H,(SI)=0A00H,(DI)=2

8、A00H,则以下指令,则以下指令的结果是一样的:的结果是一样的:MOV AL,2A00HMOV AL,BX+0A00HMOV AL,BXSIMOV AL,DI就是用来表示程序中所用的内存操作数。就是用来表示程序中所用的内存操作数。标号:标号:标号是一条指令目标代码的符号地址,它常作为转标号是一条指令目标代码的符号地址,它常作为转移指令或调用指令的操作数。移指令或调用指令的操作数。变量:变量:(1)段属性)段属性SEG 它表示变量存放在哪一个逻辑段中。它表示变量存放在哪一个逻辑段中。(2)偏移量属性)偏移量属性OFFSET 表示变量在逻辑段中离段起始点的字节距离。表示变量在逻辑段中离段起始点的字

9、节距离。(3)类型属性类型属性TYPE表示变量占用存储单元的字节数,它由类型助记符表示变量占用存储单元的字节数,它由类型助记符DB、DW、DD、DQ来规定。来规定。指令中有寄存器操作数,指令中有寄存器操作数,由寄存器操作数决定类型由寄存器操作数决定类型。指令操作数中无寄存器,则由内存操作数的类型决定。指令操作数中无寄存器,则由内存操作数的类型决定。指令中无类型的依据,需对存储器操作数加类型说明。指令中无类型的依据,需对存储器操作数加类型说明。指令中有寄存器操作数,由寄存器操作数决定类型。指令中有寄存器操作数,由寄存器操作数决定类型。例例:MOV BX,AL ;字节操作字节操作,BX AL MO

10、V BX,AX ;字操作字操作,BX AL,BX+1 AHD:DEBUG ;进入进入DEBUG-A ;汇编指令汇编指令1693:0100 MOV BX,AL1693:0102 MOV BX,AX1693:0104-U 100 ;返汇编指令返汇编指令 1693:0100 8807 MOV BX,AL1693:0102 8907 MOV BX,AX、在在DEBUG下查看指令对应的机器码:下查看指令对应的机器码:两条指令的机器码不同两条指令的机器码不同:一个是一个是0788H,另一个是另一个是0789H 指令操作数中无寄存器,则由内存操作数的类型决定。指令操作数中无寄存器,则由内存操作数的类型决定。

11、value 00H.内存内存value 00H00H例例 value 是一个变量是一个变量(即内存操作数即内存操作数);若定义若定义value 为字节类型为字节类型:则则 MOV value,0 是字节操作。是字节操作。若定义若定义value 为字类型为字类型:则则 MOV value,0 是一个字操作是一个字操作。例例 MOV BX,0 指令中无类型的依据,需对存储器操作数加类型说明。指令中无类型的依据,需对存储器操作数加类型说明。用用 PTR 属性伪操作说明类型。属性伪操作说明类型。MOV byte PTR BX,0 字节操作,字节操作,BX 0 MOV word PTR BX,0 字操作

12、,字操作,BX 0,BX+1 0 2标号的三个属性:标号的三个属性:(1)段属性)段属性:表示这条指令的目标代码在表示这条指令的目标代码在哪个逻辑段中;哪个逻辑段中;(2)偏移量属性)偏移量属性:表示这条指令目标代码表示这条指令目标代码的首字节在段内离段起始点的字节距离;的首字节在段内离段起始点的字节距离;(3)距离属性(或类型属性)距离属性(或类型属性)段段寄存器使用寄存器使用的的一些基本约定一些基本约定 一条一条指令指令的的执行时间执行时间=3.1.指令的执行时间取取指令指令取取操作数操作数执行指令执行指令传送结果传送结果单位单位用用时钟周期时钟周期数数表示表示结论:结论:1)尽量使用寄存

13、器作为操作数)尽量使用寄存器作为操作数 2)若有可能,用移位代替乘除法)若有可能,用移位代替乘除法 3)尽量使用简单的寻址方式)尽量使用简单的寻址方式对同一类型指令,执行速度:对同一类型指令,执行速度:寄存器操作数寄存器操作数 立即数操作数立即数操作数 存储器操作数存储器操作数快快 慢慢例例 mov AL,BL 快快 mov AL,0 mov AL,BX 慢慢.8086/8088的寻址方式的寻址方式 寻址方式:寻址方式:就是指令中用于说明操作数所在地址就是指令中用于说明操作数所在地址的方法,或者说是寻找操作数有效地址的方法。的方法,或者说是寻找操作数有效地址的方法。8086/8088的寻址方式

14、的寻址方式1 1立即寻址方式立即寻址方式 (Immediate Addressing)(Immediate Addressing)2 2寄存器寻址方式寄存器寻址方式 (Register Addressing)(Register Addressing)3 3直接寻址方式直接寻址方式 (Direct Addressing)(Direct Addressing)4 4寄存器间接寻址方式寄存器间接寻址方式(Register Indirect Addressing)(Register Indirect Addressing)5 5变址寻址方式变址寻址方式(Indexed Addressing)(Inde

15、xed Addressing)6 6基址寻址方式基址寻址方式(Based Addressing)(Based Addressing)7基址加变址寻址方式基址加变址寻址方式(Based Indexed Addressing)(Based Indexed Addressing)后后5种与内存单元有关的寻址种与内存单元有关的寻址(存储器操作数存储器操作数)以数据传送指令以数据传送指令MOV为例介绍寻址方式。为例介绍寻址方式。指令指令 MOV dst,src 执行执行 (dst)(src)即:即:源操作数的内容不变,源操作数的内容不变,目的操作数目的操作数 源操作数源操作数1.1.立即数寻址立即数寻址

16、(Immediate Addressing)(Immediate Addressing)操作数在指令中,取来指令立即可得到操作数。操作数在指令中,取来指令立即可得到操作数。称该操作数为立即数。称该操作数为立即数。(立即数可以是立即数可以是8位或位或16位位)立立即数常用来给寄存器或内存单元赋初值。即数常用来给寄存器或内存单元赋初值。l立即寻址只能用于源操作数立即寻址只能用于源操作数 例:例:MOV AX,1C8FH MOV BYTE PTR2A00H,8FH MOV AH,-40 MOV AX,OFFSET TABLE 错误例:错误例:MOV 2A00H,AX ;错误!错误!立即数立即数操作码

17、操作码低低8位位高高8位位存储器存储器MOV操作码操作码02H01HAHAL代码段代码段立即寻址指令在存立即寻址指令在存储器中的存放形式储器中的存放形式AX指令操作例:指令操作例:MOV AX,0102H ;AX 0102H 执行后,执行后,(AH)=01H,(AL)=02H立即数寻址方式2.2.寄存器寻址方式寄存器寻址方式(Register Addressing)(Register Addressing)l 操作数在寄存器中,指令中指定寄存器名操作数在寄存器中,指令中指定寄存器名.l 源操作数与目的操作数字长要相同源操作数与目的操作数字长要相同,l寄存器寻址与段地址无关寄存器寻址与段地址无关

18、l 8 位操作数,位操作数,用用 8 位寄存器位寄存器:AH、AL、BH、BL、CH、CL、DH、DLl 16 位操作数,用位操作数,用 16 位寄存器位寄存器:AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES 例:例:MOV AX,BX MOV 3F00H,AX MOV CL,AL 错误例:错误例:MOV AX,BL ;字长不同字长不同 MOV ES:AX,DX ;寄存器与段无关寄存器与段无关BXAX1234H1234H指令操作例:指令操作例:MOV AX,BX ;SI (AX)指令执行前:(BX)=1234H 指令执行后:(AX)=1234H,(SI)=1234HAX

19、是累加器,结果存放在是累加器,结果存放在AX的话,执行时间要短些。的话,执行时间要短些。通用寄存器是处理器的一部分,采用寄存器寻址方式可通用寄存器是处理器的一部分,采用寄存器寻址方式可以提高效率。以提高效率。寄存器寻址方式立即数寻址、寄存器寻址的操作数,立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。不用在取完指令后再到内存中取数。以下的以下的 5 5 中寻址方式,中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。指令中给出的是该操作数的地址,包括段地址和偏移地址。DS

20、ESSSCSIP数据暂存器数据暂存器PSW标志标志寄存器寄存器执行部件控制电路执行部件控制电路指令译码器指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组寄存器组指指令令队队列列总线总线接口接口控制控制电路电路运运算算器器地地址址加加法法器器、指令指令1指令指令2指令指令3指令指令4、数据数据1数据数据2数据数据3、地址总线地址总线AB数据总线数据总线DB控制总线控制总线CB地地址址译译码码器器例例 编程将编程将CL寄存器的内容传送到寄存器的内容传送到21000H单元中。单元中。MOV AX,2000HMOV DS,AX ;(DS)=2000HMOV DI,10

21、00H ;(DI)=1000H MOV DS:DI,CL ;(21000H)=(CL)地址地址 21000H2000:1000H 编程时,编程时,DS 存放段地址存放段地址2000H DI 存放偏移地址存放偏移地址1000H如指令如指令 MOV DS:DI ,CL 完成将完成将CL寄存器中的内容传送到以寄存器中的内容传送到以DS为段值,为段值,DI为偏移值的内存单元中为偏移值的内存单元中3直接寻址方式直接寻址方式(Direct Addressing)l 指令指令中中直接直接给出给出操作数操作数的的16位位偏移地址偏移地址 偏移地址也称为有效地址偏移地址也称为有效地址(EA,Effective

22、Address)默认的段寄存器为默认的段寄存器为DS,操作数所在内存单元的物理地址为:操作数所在内存单元的物理地址为:PA=(DS)10H+EA 但也可以显式地指定其他段寄存器但也可以显式地指定其他段寄存器称为段超越前缀称为段超越前缀l 偏移地址也可用偏移地址也可用符号地址符号地址来表示,如来表示,如ADDR、VARl 例:例:MOV AX,2A00H MOV DX,ES:2A00H MOV ES:2A00H,DX MOV SI,TABLE_PTR例:例:MOV AX,1000 H 若若(DS)=2000H 内存操作数的物理地址为:内存操作数的物理地址为:PA=(DS)10H+EA =2000

23、H 10H+1000H =21000H 执行后执行后 (AX)=3040H 注意注意 指令指令 MOV AX,1000H 与与指令指令MOV AX,1000H有什么不同?有什么不同?l在汇编语言程序中,不直接用数值在汇编语言程序中,不直接用数值 表示偏移地址,表示偏移地址,用符号代替数值表示地址,称用符号代替数值表示地址,称符号地址符号地址(变量名变量名)。buffer 0A 0B例例 符号符号buffer表示一个地址。表示一个地址。MOV AX,buffer或写成或写成 MOV AX,buffer 源操作数为源操作数为buffer指向的内存单元的内容指向的内存单元的内容符号地址符号地址(变量

24、名变量名)经汇编连接后,与一个确定的数值地址相对应经汇编连接后,与一个确定的数值地址相对应可用操作符可用操作符Offset 获取变量的偏移地址。获取变量的偏移地址。故故 PA=(DS)10H+Offset buffer 指令执行结果指令执行结果 (AX)=0B0A H指令操作例:指令操作例:MOV AX,2000H AL (00H),AH (20H)如果(DS)=1492H,(16920H)=78H,(16921H)=90H则操作数的物理地址为:14920H+2000H=16920H指令执行后:(AX)=9078HMOV操作码操作码00H20HAHAL16920H78H90H存储器存储器代码段

25、数据段.直接寻址方式4.寄存器间接寻址l 操作数操作数的的偏移地址偏移地址(有效地址有效地址EA)放在放在寄存器寄存器中中l 只有只有SISI、DIDI、BXBX和和BPBP可作间址寄存器可作间址寄存器l l 例:例:MOV AX,BXl MOV CL,CS:DIl 错误例错误例:MOV AX,DX MOV CL,AXEA=(BX)(BP)(SI)(DI)(1)EA=BXSIDI若没有前缀指明具体的段寄存器,若没有前缀指明具体的段寄存器,则操作数在数据段中则操作数在数据段中(2)EA=BP 若没有前缀指明具体的段寄存器,若没有前缀指明具体的段寄存器,则操作数在堆栈段。则操作数在堆栈段。例:例:

26、MOV AX,DI 若若(DS)=3000H (DI)=2000H 则内存操作数的物理地址为:则内存操作数的物理地址为:PA=(DS)10H+(DI)=32000H 执行后执行后(AX)=(32000H)=400BH 32000 0B 058B指指 令令 40注意注意 指令指令 MOV AX,DI 与指令与指令MOV AX,DI有什么不同?有什么不同?例:例:MOV AX,BP 若若(SS)=4000H (BP)=3000H 则内存操作数的物理地址为:则内存操作数的物理地址为:PA=(SS)10H+(BP)=43000H 指令执行后指令执行后(AX)=(43000H)=0102H43000 0

27、2 468B指指 令令 01、变址寻址方式、变址寻址方式(indexd addressing)l操作数的有效地址由一个变址寄存器(操作数的有效地址由一个变址寄存器(SI、DI)与一个偏移量相加得到偏移量(相对量)在指令中给与一个偏移量相加得到偏移量(相对量)在指令中给出,范围在出,范围在0000 FFFFHl可用的寄存器有可用的寄存器有 DI、SI,与寄存器间接寻址相同与寄存器间接寻址相同 如:如:MOV AL,SI+06H;隐含在数据段中;隐含在数据段中 MOV DH,40H DI;隐含在数据段中隐含在数据段中相对寻址方式6、基址寻址方式、基址寻址方式(based addressing)l操

28、作数的有效地址由一个变址寄存器(操作数的有效地址由一个变址寄存器(BX、BP)与一个偏移量相加得到偏移量(相对量)在指令中给与一个偏移量相加得到偏移量(相对量)在指令中给出,范围在出,范围在0000 FFFFHl 默认段寄存器的关系与寄存器间接寻址相同默认段寄存器的关系与寄存器间接寻址相同使用使用BXBX、SISI、DIDI,默认段寄存器为,默认段寄存器为DSDS PA=(DS)PA=(DS)10H+10H+(BX)(BX)+偏移量偏移量 使用使用BPBP,默认段寄存器为,默认段寄存器为SSSSPA=(SS)PA=(SS)10H+(BP)+10H+(BP)+偏移量偏移量 例例:MOV AX,B

29、X+30H 若若(DS)=2000H (BX)=1000H 则内存操作数的物理地址为:则内存操作数的物理地址为:PA=(DS)10H+(BX)+30H =21030H 指令执行后:指令执行后:(AX)=(21030H)=8976H 例:例:MOV AX MOV AX,60H BP 60H BP 若若 (SS)=3000H(SS)=3000H (BP)=200H (BP)=200H 则内存操作数的物理地址为:则内存操作数的物理地址为:PA=(SS)PA=(SS)10H+(BP)+60H 10H+(BP)+60H =30260H =30260H 指令执行后:指令执行后:(AX)=(30260H)=

30、0ABCH (AX)=(30260H)=0ABCH 30260 BC 6046指指 令令 0A8B7.相对基址加变址寻址相对基址加变址寻址(Based Indexed Addressing)操作数的有效地址由操作数的有效地址由基址寄存器、变址寄存器、偏移量基址寄存器、变址寄存器、偏移量三者之和给出。三者之和给出。l可用的寄存器与基址加变址寻址方式相同可用的寄存器与基址加变址寻址方式相同 基址寄存器有基址寄存器有 BX、BP 变址寄存器有变址寄存器有 SI、DI如如 MOV AL,BX+SI+10H MOV AX,20H BXDI MOV DL,BP+SI+30H MOV DX,40H BPDI

31、 l 默认段寄存器由基址寄存器决定默认段寄存器由基址寄存器决定。基址寄存器为基址寄存器为BX,默认段寄存器为,默认段寄存器为DS (SI)PA=(DS)10H+(BX)+(DI)基址寄存器为基址寄存器为BP,默认段寄存器为,默认段寄存器为SS (SI)PA=(SS)10H+(BP)+(DI)基址变址寻址方式相对基址变址寻址方式使用相对的基址使用相对的基址-变址寻址方式可以很方便地访变址寻址方式可以很方便地访问二维数组问二维数组。基址寄存器基址寄存器数组首地址数组首地址变址寄存器变址寄存器数组元素数组元素行行址址位移量位移量数组元素数组元素列列址址(偏移地址)(偏移地址)8.隐含寻址l 指令操作

32、数是隐含的,在指令中未显式地指明。指令操作数是隐含的,在指令中未显式地指明。l 例:例:MUL BL(AL)()(BL)AX 指令隐含指令隐含了了被乘数被乘数AL及及乘积乘积AXl 类似的指令还有:类似的指令还有:DIV、CBW、MOVS等等2偏移量可用符号地址给出偏移量可用符号地址给出 例:例:MOV AX,mask BX 若若(DS)=1000H (BX)=300H OFFSET mask=2000H PA=(DS)10H+(BX)+OFFSET mask =12300H 执行后执行后 (AX)=6B5A H12300 5A 3322mask12000 6B113.段跨越前缀的使用段跨越前

33、缀的使用(自学自学)l 段跨越前缀段跨越前缀 在指令中出现的指定内存单元段地址的段寄存器符号。在指令中出现的指定内存单元段地址的段寄存器符号。表示方法为表示方法为 段寄存器名段寄存器名:例:例:MOV AX,ES:BX ES:MOV AX,BX (DEBUG下格式)下格式)为减小指令长度,为减小指令长度,CPU采用默认关系获取段地址。采用默认关系获取段地址。但,使用段跨越前缀可强行改变这种默认关系。但,使用段跨越前缀可强行改变这种默认关系。使用段跨越前缀的指令比不使用的指令要多占一个字节。使用段跨越前缀的指令比不使用的指令要多占一个字节。8B 07指指 令令 MOV AX,ES:BX26指指

34、令令 MOV AX,BX8B 07l使用段跨越前缀的物理地址计算使用段跨越前缀的物理地址计算例:例:MOV AX,ES:BX 使用段跨越的前缀后,段地址由指定的段寄存器给出使用段跨越的前缀后,段地址由指定的段寄存器给出,不再遵循默认关系。不再遵循默认关系。PA=(ES)10H +(BX)而不等于而不等于(DS)10H +(BX)l 只有存储器操作数需用段跨越的前缀只有存储器操作数需用段跨越的前缀 ES:MOV SI,CX DS:MOV AL,BP MOV ES:AX,0 CS:MOV CX,22H3.3 8086/8088指令系统q数据传送指令数据传送指令(Data transfer Inst

35、ruction)(Data transfer Instruction)q算术运算指令(算术运算指令(Arithmetic InstructionArithmetic Instruction)q逻辑运算和移位指令逻辑运算和移位指令(Logic&Shift Instruction)(Logic&Shift Instruction)q串操作指令串操作指令(String manipulation Instruction)(String manipulation Instruction)q控制转移指令(控制转移指令(Control Transfer InstructionControl Transfer

36、 Instruction)q中断指令(中断指令(Interrupt Instruction)Interrupt Instruction)q处理器控制指令(处理器控制指令(Processor Control InstructionProcessor Control Instruction)3.3.1数据传送指令数据传送指令(Data transfer Instruction)可实现可实现存储器存储器寄存器寄存器I/O 数据传送指令又可分为如下四种:数据传送指令又可分为如下四种:通用数据传送指令(MOV、PUSH、POP、XCHG)累加器专用传送指令(IN、OUT、XLAT)地址传送指令(LEA、

37、LDS、LES)标志寄存器传送指令(LAHF、SAHF、PUSHF、POPF)1.1.基本传送指令基本传送指令MOVMOV(Movement)Movement)(1)(1)MOV MOV destdest,srcsrc;destsrcdestsrc(字或字节)(字或字节)一、通用数据传送指令一、通用数据传送指令(MOV、PUSH、POP、XCHG)reg reg memmemreg reg mem mem immimmMOVMOV指令使用规则:指令使用规则:1)IP不能作目的寄存器,CS不能做为DST2)不允许memmem3)不允许segseg4)IMM不允许作为DST5)不允许seg立即数6

38、)SRC与DST类型要一致7)可进行8、16位的操作,且适合于各种寻址方式MOV dest,src MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2 指令中两操作数中至少有一个为寄存器 例:MOVCL,DL MOVAX,BXMOVSI,CXMOVCL,BX+5 MOV reg,imm ;立即数送寄存器立即数送寄存器 MOV mem,imm ;立即数送存储单元立即数送存储单元 MOV seg,mem/reg ;存储单元存储单元/寄存器送寄存器送 段寄存器段寄存器 MOV mem/reg,seg ;段寄存器送存储单段寄存器送存储单 元元/寄存器寄存器几个不能几个不

39、能传传送的解决办法:送的解决办法:用用AXAX作桥梁作桥梁l 存储器存储器:MOV AX,MEM1 MOV MEM2,AXl 段寄存器段寄存器:MOV AX,DS MOV ES,AXl 段寄存器立即数:MOV AX,DATA MOV DS,AXmov cl,4;cl4,字节传送mov dx,0ffh;dx00ffh,字传送mov si,200h;si0200h,字传送mov bvar,0ah;字节传送;假设bvar是一个字节变量,定义如下:bvar db 0mov wvar,0bh;字传送;假设wvar是一个字变量,定义如下:wvar dw 0mov ah,al;ahal,字节传送mov bv

40、ar,ch;bvarch,字节传送mov ax,bx;axbx,字传送mov ds,ax;dsax,字传送mov bx,al;bxal,字节传送 寄存器具有明确的字节和字类型寄存器具有明确的字节和字类型l应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。程序段如下:MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT上程序段存放在代码段代码段中,設(CS)=109EH,则各条指令存放地址如下:CS :IP 指令109E:0100 MOV DI,1000H109E

41、:0103 MOV CX,64H109E:0106 MOV AL,2AH109E:0108 MOV DI,AL109E:010A INC DI109E:010B DEC CX109E:010C JNZ 0108109E:010E HLT109E:0110 写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:1000DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010DS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020DS:1020 2A 2A

42、 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1030DS:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040DS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050DS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060DS:1060 2A 2A 2A 2A什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位以字为单位进行压入弹

43、出操作。为什么要设置堆栈?为什么要按“后进先出”方式工作?参见下图2 2 堆栈操作指令堆栈操作指令主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP执行子程序 2转子程序2返回子程序1IP(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图压栈弹出IP(下)规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。SPSS堆栈段堆栈段进栈方向退栈方向栈底栈底栈顶栈顶设(AX)=2036H,低地址存储区(SS段)执行

44、前(AX)=2036H(SP)存储区(SS段)进栈方向执行后3620(AL)(AH)(SP)高地址低地址高地址BX1234BX压栈指令的格式为:PUSH reg PUSH mem/reg PUSH segreg例如:PUSH AX PUSH BX PUSH DS 注意进栈方向是高地址向低地址发展。弹出指令 POP dest ;dest为reg、men例:POPBX;将栈顶内容弹至BX 执行操作:(BL)(SP)(BH)(SP)+1 (SP)(SP)+2低地址存储区(SS段)出栈方向执行前3620(SP)存储区(SS段)执行后(BX)=1020(SP)(SP)+1(SP)+2BX3620高地址低

45、地址高地址堆栈指令使用时应注意几点:堆栈指令使用时应注意几点:堆栈操作总是按堆栈操作总是按字字进行进行不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS堆栈指针为堆栈指针为SS:SPSS:SP,SPSP永远指向栈顶永远指向栈顶SPSP自动进行增减量(自动进行增减量(-2-2,+2+2)PUSH POPPUSH POP指令一般成对出现指令一般成对出现格式:XCHG reg,mem/reg功能:交换两操作数的内容。要求:两操作数中必须有一个在寄存器中;操作数不能为段寄存器和立即数;源和目地操作数类型要一致。举例:XCHG AX,BX XCHG 2000,CL3 3、交换指令、交换指令XCHGXC

46、HG1.1.输入输出(输入输出(I/OI/O)指令)指令 只限于用累加器AL或AX来传送信息。功能:(累加器)I/O端口(1)输入指令IN格式:IN acc,PORT;PORT端口号0255 IN acc,DX ;DX表示的端口范围达64K例例:IN AL,60H ;(AL)(80H端口端口)IN AX,20H;(AX)(80H端口端口)MOV DX,3F8H;IN AL,DX ;(AL)(DX)二、累加器专用指令在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如:MOV DX,3F8H OUT DX,AL ;将AL向220H端口输出(2)(2)输出指令输出

47、指令OUTOUT格式:格式:OUT port,accOUT port,acc OUT DX,acc OUT DX,acc2 2、查表指令、查表指令XLATXLAT格式:格式:XLATXLAT 执行的操作:AL(BX)+(AL)又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。42000H+042000H+0BH0129

48、ABEF十六进制数十六进制数ASCIIASCII码表码表303132.394142.4546.存储器则可用如下几则可用如下几条指令实现条指令实现:注意:转换表长度最大注意:转换表长度最大为为256256个表项个表项(字节字节)。三、地址传送指令三、地址传送指令共有三条:格式:LEA reg,mem;将指定存储器的16位偏移 地址送指定寄存器 LDS reg,mem32;DS:reg(mem开始的四 个内存单元)LES reg,mem32;同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。(1 1)LEA(Load Effective Address

49、)LEA(Load Effective Address)有效地址送寄存器指令有效地址送寄存器指令 格格 式式:LEA reg16LEA reg16,mem16mem16 执行的操作:(执行的操作:(reg16reg16)EA EA该指令把源操作数的有效地址装入指定的寄存器。通常用该指令把源操作数的有效地址装入指定的寄存器。通常用于加载有效地址,写近地址指针。于加载有效地址,写近地址指针。注意以下两点:注意以下两点:LEA LEA指令中的目标寄存器必须是指令中的目标寄存器必须是1616位的通用寄存器,位的通用寄存器,源操作数必须是一个存储器操作数。源操作数必须是一个存储器操作数。LEA LEA指

50、令与指令与MOVMOV指令注意比较使用指令注意比较使用.LEA(Load Effective Address)LEA(Load Effective Address)有效地址送寄存器指令有效地址送寄存器指令(2 2)LDS(Load pointer using DS)LDS(Load pointer using DS)地址指针送寄存器和地址指针送寄存器和DSDS指令指令 格格 式:式:LDS reg16,mem32LDS reg16,mem32 执行的操作:执行的操作:(reg16)(EA)(reg16)(EA)(DS)(EA)+2)(DS)(EA)+2)(3 3)LES(Load pointe

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第03章-微型计算机指令系统课件1.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|