最新微机原理与接口技术95PPT课件

上传人:鲁** 文档编号:568024125 上传时间:2024-07-23 格式:PPT 页数:297 大小:1.71MB
返回 下载 相关 举报
最新微机原理与接口技术95PPT课件_第1页
第1页 / 共297页
最新微机原理与接口技术95PPT课件_第2页
第2页 / 共297页
最新微机原理与接口技术95PPT课件_第3页
第3页 / 共297页
最新微机原理与接口技术95PPT课件_第4页
第4页 / 共297页
最新微机原理与接口技术95PPT课件_第5页
第5页 / 共297页
点击查看更多>>
资源描述

《最新微机原理与接口技术95PPT课件》由会员分享,可在线阅读,更多相关《最新微机原理与接口技术95PPT课件(297页珍藏版)》请在金锄头文库上搜索。

1、微机原理与接口技术微机原理与接口技术9595本章内容位于本章内容位于 书本书本P49P77,P82P1144、操作数的存放、操作数的存放操作数的存放不外乎三种情况:操作数的存放不外乎三种情况:()()操作数包含在指令中操作数包含在指令中即指令的操作数字段包含操作数本身。这种操作数为即指令的操作数字段包含操作数本身。这种操作数为立即数立即数。例:例:MOVAL,08H()操作数包含在的一个内部寄存器中()操作数包含在的一个内部寄存器中例:例:INCCX指令中的操作数字段是指令中的操作数字段是C内部寄存器的一个内部寄存器的一个编码编码。这种寻址方式称为这种寻址方式称为寄存器寻址寄存器寻址。()操作

2、数在内存数据区()操作数在内存数据区操作数在内存数据区,操作数字段包含着此操作数地址。操作数在内存数据区,操作数字段包含着此操作数地址。 在中,任何在中,任何内存地址是由两部分组成:内存地址是由两部分组成:段的基地址段的基地址:单元所在段的基地址:单元所在段的基地址(大部分情况是数据段寄存器中);(大部分情况是数据段寄存器中);段内偏移量段内偏移量:此单元与段基地址的距离。:此单元与段基地址的距离。有效地址(有效地址(EffectiveAddress):段内偏移量为适应各种数据结构的需要,可以有几个部分组段内偏移量为适应各种数据结构的需要,可以有几个部分组成,所以也把它称为有效地址。成,所以也

3、把它称为有效地址。寻址方式不同寻址方式不同EA的构成不同。的构成不同。归纳归纳EA可有多种情况构成:可有多种情况构成:直接寻址,寄存器间接寻址,寄存器相对寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址加变址寻址,相对基址加变址寻址。基址加变址寻址,相对基址加变址寻址。 寻址方式寻址方式如何寻找内存操作数。如何寻找内存操作数。不同寻址方式实质上是构成它不同寻址方式实质上是构成它段内的偏移量的方法段内的偏移量的方法不同不同。二、二、8086、8088寻址方式寻址方式(一)立即寻址(一)立即寻址(Immediateaddressing)(二)寄存器寻址方式(二)寄存器寻址方式(Register

4、addressing)(三)直接寻址(三)直接寻址(Directaddressing)(四)寄存器间接寻址方式(四)寄存器间接寻址方式(Registerindirectaddressing)(五)寄存器相对寻址方式(五)寄存器相对寻址方式(Registerrelativeaddressing)或变址寻址(或变址寻址(IndexAddressing)(六)基址加变址寻址方式(六)基址加变址寻址方式(Basedindexedaddressing)(七)相对基址加变址寻址方式(七)相对基址加变址寻址方式(Relativebasedindexedaddressing)(一)(一)立即寻址立即寻址(Im

5、mediateaddressing)操作数直接存放在指令中,紧跟在操作码之后操作数直接存放在指令中,紧跟在操作码之后,作为指令,作为指令的一部分,存放在代码段里,这种操作数称为立即数。的一部分,存放在代码段里,这种操作数称为立即数。立即数可以是位或立即数可以是位或16位的。位的。16位的立即数是高位字节放在高地址位的立即数是高位字节放在高地址,低位字节放在低地址低位字节放在低地址。使用场合:使用场合:经常用于给寄存器赋初值。经常用于给寄存器赋初值。注意:注意:只能用于源操作数字段只能用于源操作数字段,不能用于目的操作数字段。,不能用于目的操作数字段。例:例:MOVAL,05H指令执行后指令执行

6、后:(AL)=05H例:例:MOVAX,3064H指令执行后指令执行后:(AX)=3064H立即寻址方式立即寻址方式(二二)、 寄存器寻址方式寄存器寻址方式(Registeraddressing)操作数在寄存器中,指令指定寄存器号。操作数在寄存器中,指令指定寄存器号。对于位操作数,寄存器可以是对于位操作数,寄存器可以是:,,,。以及段寄存器。以及段寄存器。对于位操作数,寄存器可以是对于位操作数,寄存器可以是:,。,。这种寻址方式因为操作数在寄存器中这种寻址方式因为操作数在寄存器中不需要访问存储器的不需要访问存储器的运算速度较高运算速度较高。例:例:指令执行前指令执行前:(AX)3064(SS)

7、1234 MOVSS,AX指令执行后指令执行后:(SS)3064H(AX)保持不变。)保持不变。 指令执行前:指令执行前:指令执行后指令执行后:寄存器寻址方式寄存器寻址方式(三)直接寻址(三)直接寻址(Directaddressing)操作数操作数地址的位偏移量地址的位偏移量,直接包含在指令中直接包含在指令中,存放在代码段中指令操作码之后,存放在代码段中指令操作码之后,但但操作数一般存放在数据段中操作数一般存放在数据段中,必须先必须先求出操作数的物理地址求出操作数的物理地址,然后再访问存储器才能取得操作数。然后再访问存储器才能取得操作数。或(或(10H)物理地址物理地址:PA16d(DS)+E

8、AIBMPC机允许数据存放在数据段以外的其它段中。机允许数据存放在数据段以外的其它段中。此时应在指令中此时应在指令中指定段跨越(可以是指定段跨越(可以是CS,SS,ES)。)。例:例:MOVAX,3100H(DS)=6000H,(63100H)=3050H则则:(AX)=3050H又如:用符号地址代替数值地址。又如:用符号地址代替数值地址。MOVAX,VALUE或或MOVAX,VALUEVALUE有效操作数单元的有效操作数单元的符号地址。符号地址。如:如:VALUE在附加段中,在附加段中,则应指定段跨越。则应指定段跨越。MOVAX,ES:VALUE或或MOVAX,ES:VALUE直接寻址方式直

9、接寻址方式注意:注意:(1)直接寻址方式适用于处理单个变量。)直接寻址方式适用于处理单个变量。(2)直接寻址方式)直接寻址方式隐含的段寄存器是隐含的段寄存器是DS,8086/8088允允许许段段跨跨越越,即即允允许许使使用用CSSSES作作为为段段寄寄存存器器,这这时,必须在指令中特别标明。时,必须在指令中特别标明。(3)IBMPC机机中中规规定定双双操操作作数数指指令令必必须须有有一一个个操操作作数数使使用用寄寄存器存器方式,这就是常常先要把一个变量送到寄存器去的原因。方式,这就是常常先要把一个变量送到寄存器去的原因。例:例:要处理某存放在存储器里的变量,可以用直接寻址方式把变量要处理某存放

10、在存储器里的变量,可以用直接寻址方式把变量先取到一个寄存器中再作处理。先取到一个寄存器中再作处理。(四四)寄存器间接寻址方式寄存器间接寻址方式(Registerindirectaddressing)操作数在存储器中操作数在存储器中,操作数地址的操作数地址的16位偏移量包含在:位偏移量包含在:BP、BX、SI、DI寄存器寄存器中。中。1、若选择、若选择SI、DI、BX作为间接寻址作为间接寻址操作数一般在现行数据段区域中,用操作数一般在现行数据段区域中,用(DS)作为段地址。作为段地址。即操作数物理地址为:即操作数物理地址为:物理地址物理地址PA=16d(DS)+(BX)物理地址物理地址PA=16

11、d(DS)+(SI)物理地址物理地址PA=16d(DS)+(DI)例:例:MOVBX,DI(DS)=6000H(DI)=2000HPA=62000H(62000H)=50A0H(BX)=50A0H寄存器间接寻址方式寄存器间接寻址方式MOVBX,DI2、若选择、若选择BP寄存器作为间接寻址寄存器作为间接寻址操作数在堆栈段区域中,用操作数在堆栈段区域中,用SS寄存器的内容作为段地址。寄存器的内容作为段地址。操作数物理地址操作数物理地址:PA=16d(SS)+(BP)例:例:MOVBP,AX执行前:执行前:(SS)=1000H,(BP)=3000H,(AX)=1234H执行后:执行后:PA=1300

12、0H(13000H)=1234H寄存器间接寻址方式寄存器间接寻址方式MOVBP,AX3、用、用SI、DI、BX、BP作为间接寻址允许段跨越作为间接寻址允许段跨越指令中可以指定段跨越前缀来取得其他段中的数据。指令中可以指定段跨越前缀来取得其他段中的数据。例:例:MOVES:DI,AXMOVDX,DS:BP这种寻址方法可以用于表格处理。这种寻址方法可以用于表格处理。(五五)寄存器相对寻址方式(寄存器相对寻址方式(Registerrelativeaddressing)或变址寻址或变址寻址(IndexAddressing)操作数的操作数的有效地址是一个基址或变址寄存器的内容有效地址是一个基址或变址寄存

13、器的内容和指令中指定的和指令中指定的8位或位或16位位移量(位位移量(displacement)之和。)之和。8086/8088CPU中有中有两个变址寄存器两个变址寄存器:源变址寄存器源变址寄存器SI;目的变址寄存器目的变址寄存器DI。操作数一般在内存的数据段中,但允许段跨越。操作数一般在内存的数据段中,但允许段跨越。除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:例:例:MOVAX,COUNTBP或或MOVAX,COUNT+BP或或MOVAX,COUNT+BPCOUNT为为16位位移量。位位移量。指令执行前指令执行前:(SS)=5000H,(BP)=3

14、000H,COUNT=2040H,(AX)=1234H指令执行后指令执行后:EA=5040HPA=55040H(55040H)=5548H(AX)=5548H寄存器相对寻址方式寄存器相对寻址方式MOVAX,COUNTBP用途:这种寻址方式同样用于用途:这种寻址方式同样用于表格处理表格处理。表格首地址表格首地址COUNT修改基址或变址寄存器来取得表格中的值。修改基址或变址寄存器来取得表格中的值。例:某数据表的首地址为例:某数据表的首地址为COUNT欲读取表中第欲读取表中第10个数据个数据,存放到(存放到(AL)中。中。第第10个数据的有效地址个数据的有效地址:EA=COUNT+9MOVSI,09

15、HMOVAL,SI+COUNT*直接变址寻址方式也可以使用段跨越前缀直接变址寻址方式也可以使用段跨越前缀MOVDL,ES:STRINGSI(六六)基址加变址寻址方式基址加变址寻址方式 (Based indexed addressing)操作数的操作数的有效地址是一个基址寄存器和一个变址寄存器的有效地址是一个基址寄存器和一个变址寄存器的内容之和内容之和,基址寄存器名和变址寄存器名均有指令指定。,基址寄存器名和变址寄存器名均有指令指定。除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:例:例:MOVAX,BXSI或或MOVAX,BX+SI执行指令前执行指令前:

16、(DS)=3200H,(BX)=0456H,(SI)=1094H(334EAH)=4567H执行指令后执行指令后:EA=14EAHPA=334EAH(AX)=4567H基址加变址寻址方式基址加变址寻址方式MOVAX,BX+SI用途:这种寻址方式同样适用于数组或表格处理。用途:这种寻址方式同样适用于数组或表格处理。表格首地址表格首地址基址寄存器中基址寄存器中,用变址寄存器来访问数组中的元素。用变址寄存器来访问数组中的元素。二个寄存器都能修改,二个寄存器都能修改,所以比直接变址方式更灵。所以比直接变址方式更灵。这种寻址方式允许段跨越。这种寻址方式允许段跨越。使用段跨越前缀格式使用段跨越前缀格式:M

17、OVAX,ES:BXSI(七)相对基址加变址寻址方式(七)相对基址加变址寻址方式(Relativebasedindexedaddressing)操作数操作数有效地址是一个基址寄存器和一个变址寄存器的内容有效地址是一个基址寄存器和一个变址寄存器的内容和和8位或位或16位位移量之和位位移量之和。除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:例:例:MOVAX,MASKBXDIMOVAX,MASKBX+DIMOVAX,MASX+BX+DI执行指令前执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4

18、050H执行指令后执行指令后:EA=2A7AHPA=32A7AH(AX)=4050H相对基址加变址相对基址加变址MOVAX,MASK+BX+DI用途:用途:这种寻址方式为堆栈处理提供方便:这种寻址方式为堆栈处理提供方便:(BP)栈顶(一般栈顶(一般BP可指向栈顶)可指向栈顶)从栈顶到数组的首地址可以用位移量表示从栈顶到数组的首地址可以用位移量表示(MASK).变址寄存器(变址寄存器(SI)或()或(DI)指向数组中某个元素。指向数组中某个元素。段内转移只需改变段内转移只需改变(IP)段内转移包括两种寻址方式:直接段内转移包括两种寻址方式:直接,间接。,间接。段间转移改变(段间转移改变(CS)(

19、IP)段间转移包括两种寻址方式:段间转移包括两种寻址方式:直接直接,间接。,间接。功能:功能:用来用来确定转移指令及确定转移指令及CALL指令的转移地址。指令的转移地址。以转移指令为对象来分析各种转移地址寻址方式。以转移指令为对象来分析各种转移地址寻址方式。三、与转移地址有关的寻址方式三、与转移地址有关的寻址方式(一)段内直接寻址(一)段内直接寻址(Intrasegmentdirectaddressing)(二)段内间接寻址(二)段内间接寻址(Intrasegmentindirectaddressing)(三)段间直接寻址(三)段间直接寻址(Intersegmentdirectaddressi

20、ng)(四)段间间接寻址:(四)段间间接寻址:(Intersegmentinderectaddressing)(一)段内直接寻址(一)段内直接寻址(Intrasegmentdirectaddressing)转向有效地址转向有效地址EA是(是(IP)当前当前和指令中指定的和指令中指定的8位或位或16位位移量位位移量之和。之和。相对寻址方式含义:相对寻址方式含义:EA(即转向的有效地址即转向的有效地址)用相对于(用相对于(IP)当前当前值的位移量表示。值的位移量表示。位移量:位移量:位移量位移量=转向有效地址转向有效地址-(IP)当前当前值之差。值之差。对于近转对于近转,16位位移量可正可负,位位

21、移量可正可负,一般范围是一般范围是3276832767对于短转对于短转,8位位移量可正可负,位位移量可正可负, 范围是范围是128127,这种寻址方式适用于条件转移及无条转移指令。这种寻址方式适用于条件转移及无条转移指令。当用于当用于条件转移条件转移指令时,指令时,位移量只允许位移量只允许8位位;用于用于无条件转移无条件转移指令时,指令时,位移量位移量8位时称为位时称为短跳转。短跳转。指令汇编语言格式:指令汇编语言格式:JMPNEARPTRPROGIA;(;(IP)(IP)当前当前+16位位移量位位移量JMPSHORTQUEST; (IP)(IP)当前当前+8位位移量位位移量调用指令(调用指令

22、(CALL)也适用。)也适用。PROGIA均为均为转向符号地址转向符号地址,机器中用机器中用位移量表示位移量表示。QUEST汇编指令中汇编指令中16位位移量,则在符号地址前加操作符位位移量,则在符号地址前加操作符NEARPTR。8位位移量位位移量:前引用标号(标号后定义前引用标号(标号后定义),则在符号地址前加操作符),则在符号地址前加操作符SHORT。后引用标号(标号先定义后引用标号(标号先定义),则在符号地址前不必加操作符),则在符号地址前不必加操作符SHORT。JMPNEARPTRPROGIA;(IP)(IP)当前当前+16位位移量位位移量段内直接寻址段内直接寻址JMPNEARPTRPR

23、OGIA(二)段内间接寻址(二)段内间接寻址(Intrasegmentindirectaddressing)段内间接寻址段内间接寻址:转向有效地址是一个寄存器或一个存储单元的内容转向有效地址是一个寄存器或一个存储单元的内容,这内容可以用数据寻址方式中除立即数以外的任何一种寻这内容可以用数据寻址方式中除立即数以外的任何一种寻址方式取得。得到的转向有效地址用来取代址方式取得。得到的转向有效地址用来取代IP寄存器的内容。寄存器的内容。这种寻址方式和以下二种段间寻址方式都不能用于条件转移指令。这种寻址方式和以下二种段间寻址方式都不能用于条件转移指令。*条件转移指令只能适用段内直接寻址的条件转移指令只能

24、适用段内直接寻址的8位位移量。位位移量。汇编格式:汇编格式:JMPBXJMPWORDPTRBP+TABLE其中:其中:WORDPTR操作符,操作符,(BP)+TABLE寻址所得地址是一个字的有效地址,寻址所得地址是一个字的有效地址,由由有效地址形成物理地址里的内容即为转向有效地址有效地址形成物理地址里的内容即为转向有效地址IP。转向物理地址的计算公式:转向物理地址的计算公式:PA=16d (CS)+(IP)段内间接寻址方式的转移指令中转移的有效地址的计算方法:段内间接寻址方式的转移指令中转移的有效地址的计算方法:举例:举例:指令执行前:指令执行前:设:(设:(DS)=2000H,(,(BX)=

25、1256H,(,(SI)=528FH,TABLE=20A1H,(232F7H)=3280H,(,(264E5H)=2450H例例1、JMPBX指令执行后指令执行后:(IP)=1256H例例2、JMPWORDPTRTABLEBX指令执行后指令执行后:PA=16d (DS)+(BX)+TABLE=232F7H(IP)=3280H=(232F7H)例例3、JMPWORDPTRBXSI 指令执行后指令执行后:PA=16d (DS)+(BX)+(SI)=264E5H(IP)=2450H=(264E5H)注意:如果指令操作数已被定义为注意:如果指令操作数已被定义为16位的存储器,则:位的存储器,则:WOR

26、DPTR可以省去。可以省去。(三)段间直接寻址:(三)段间直接寻址:(Intersegmentdirectaddressing)指令中直接提供了转向段地址和偏移地址。指令中直接提供了转向段地址和偏移地址。用指令中指定的偏移地址用指令中指定的偏移地址(IP)用指令中指定的段地址用指令中指定的段地址(CS)完成了从一段到另一段的转移操作完成了从一段到另一段的转移操作指令汇编语言格式:指令汇编语言格式:JMPFARPTRNEXTROUTINTNEXTROUTINT转向的符号地址转向的符号地址FARPTR段间转移操作符段间转移操作符OFFSETNEXTROUTINT(IP)SEGNEXTROUTINT

27、(CS)例:例:JMPFARPTRCCC(四)段间间接寻址(四)段间间接寻址(Intersegmentinderectaddressing)用存储器中二个相继字的内容取代用存储器中二个相继字的内容取代IP、CS以达到段间转移目的以达到段间转移目的。存储单元的地址是由指令指定除立即数方式和寄存器方式以外存储单元的地址是由指令指定除立即数方式和寄存器方式以外的任何一种寻址方式取得。的任何一种寻址方式取得。指令汇编语言格式:指令汇编语言格式:JMPDWORDPTRINTERS+BXDWORDPTR双字操作符,转向地址双字(段间转移)双字操作符,转向地址双字(段间转移)INTERS+BX数据寻址方式为

28、直接变址寻址方式数据寻址方式为直接变址寻址方式*段间转移必须是无条件转移。段间转移必须是无条件转移。例:例:JMPDWORDPTRBX指令执行前:指令执行前:设:设:(DS)=4000H,(BX)=1212H(41212H)=1000H(41214H)=4A00H指令执行后:指令执行后:(IP)=1000H(CS)=4A00H四、小结四、小结1、三种类型操作数三种类型操作数2、三种类型操作数特点、三种类型操作数特点3、8088中的存储器分段中的存储器分段1、三种类型操作数、三种类型操作数综观综观8086/8088寻址方式寻址方式,其操作数有三种类型:,其操作数有三种类型:立即操作数、寄存器操作

29、数、存储器操作数。立即操作数、寄存器操作数、存储器操作数。2、三种类型操作数特点:、三种类型操作数特点:(1)立即操作数)立即操作数可以使用立即操作数指令有:可以使用立即操作数指令有: 数据传送指令、算术运算指令(乘、除运算指令除外)、数据传送指令、算术运算指令(乘、除运算指令除外)、 逻辑运算指令等。逻辑运算指令等。立即数只能作为源操作数,不能作为目标操作数。立即数只能作为源操作数,不能作为目标操作数。8位和位和16位无符号数和带符号数的取值范围:位无符号数和带符号数的取值范围:(2)寄存器操作数寄存器操作数寄存器操作数可能存放在:寄存器操作数可能存放在:8086/8088的通用寄存器、地址

30、指针或变址寄存器的通用寄存器、地址指针或变址寄存器以及段寄存器。以及段寄存器。通用寄存器包括通用寄存器包括4个个16位寄存器:位寄存器:AX、BX、CX、DX。用于存放字操作数。用于存放字操作数。4个个16位通用寄存器可以当作位通用寄存器可以当作8位寄存器使用:位寄存器使用:AH、AL、BH、BL、CH、CL、DH、DL存放字节操存放字节操作数。作数。通用寄存器、地址指针寄存器可以作为源操作数,也可以作通用寄存器、地址指针寄存器可以作为源操作数,也可以作为目标操作数。为目标操作数。与通用寄存器或存储器传送数据时,段寄存器可以作为源操与通用寄存器或存储器传送数据时,段寄存器可以作为源操作数或目标

31、操作数作数或目标操作数.段寄存器段寄存器DS、ES、SS、CS存放当前的段地址。存放当前的段地址。对段寄存器对段寄存器ES、DS、SS进行赋值,不能将立即数直接送段进行赋值,不能将立即数直接送段寄存器,要将立即数送通用寄存器,再从通用寄存器送段寄寄存器,要将立即数送通用寄存器,再从通用寄存器送段寄存器。存器。CS一般不用赋值。一般不用赋值。 隐含操作数隐含操作数某些指令规定只能使用指定操作数寄存器,某些指令规定只能使用指定操作数寄存器,从汇编形式看,似乎没有指出操作数,实际隐含某些从汇编形式看,似乎没有指出操作数,实际隐含某些特定寄存器操作数。该寄存器可能是:特定寄存器操作数。该寄存器可能是:

32、累加器累加器、通用寄存器、变址寄存器、某些段寄存器。、通用寄存器、变址寄存器、某些段寄存器。(3)、存储器操作数)、存储器操作数存储器操作数可能存放在一个、二个、或四个存储器单元中。存储器操作数可能存放在一个、二个、或四个存储器单元中。操作数类型分别为:字节、字、双字。操作数类型分别为:字节、字、双字。存储器操作数可以作为源操作数,也可以作为目标操作数。存储器操作数可以作为源操作数,也可以作为目标操作数。但不允许源操作数、目标操作数同时为存储器操作数。但不允许源操作数、目标操作数同时为存储器操作数。存储器操作数的有效地址存储器操作数的有效地址EA的取得方法:的取得方法:直接寻址直接寻址寄存器间

33、接寻址寄存器间接寻址相对寄存器寻址相对寄存器寻址基址加变址寻址基址加变址寻址相对基址加变址寻址相对基址加变址寻址存储器操作数的物理地址存储器操作数的物理地址PA的取得方法:的取得方法:一般存储器操作数指令中隐含段寄存器,有的指令允许段跨越,一般存储器操作数指令中隐含段寄存器,有的指令允许段跨越,需要在指令中标明。需要在指令中标明。3、8088中的存储器分段中的存储器分段段区域默认状态:段区域默认状态:可以在某一个段可以在某一个段64K字节范围内寻找一个内存操作数,字节范围内寻找一个内存操作数,以什么样以什么样寻址寻址(寄存器间址、变址、与基址加变址),(寄存器间址、变址、与基址加变址),则则操

34、作数就在什么段区域中,在操作数就在什么段区域中,在8088中有一个基本约定,只中有一个基本约定,只要在指令中不特别说明超越这个约定,则正常情况就按这要在指令中不特别说明超越这个约定,则正常情况就按这个基本约定来寻找操作数,这就是所谓的个基本约定来寻找操作数,这就是所谓的默认状态默认状态。段跨越:段跨越:数据操作数通常在数据段,但在程序中若需数据操作数通常在数据段,但在程序中若需要的话数据可以在码段、堆栈段也可以在附加段。要的话数据可以在码段、堆栈段也可以在附加段。*程序段只能在码段程序段只能在码段堆栈操作只能在堆栈段堆栈操作只能在堆栈段目的串只能在附加段目的串只能在附加段此外,其他情况都允许段

35、跨越此外,其他情况都允许段跨越在在8088中的这些基本约定和允许超越的情况,如下表示:中的这些基本约定和允许超越的情况,如下表示:第二节第二节80386、80486、80586、Pentium的寻址方式的寻址方式(自学)(自学)(了解(了解)自学提纲自学提纲在在8086/8088CPU的七种寻址方式的基础上,又扩充了三种。的七种寻址方式的基础上,又扩充了三种。8086/8088CPU七种寻址方式:七种寻址方式:立即寻址立即寻址寄存器寻址寄存器寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址相对寄存器寻址相对寄存器寻址基址加变址寻址基址加变址寻址相对基址加变址寻址相对基址加变址寻址80386、8

36、0486、80586、Pentium扩充了三种寻址方式:扩充了三种寻址方式:带比例因子的变址寻址带比例因子的变址寻址基址加比例因子的变址寻址基址加比例因子的变址寻址相对基址加比例因子的变址寻址。相对基址加比例因子的变址寻址。EA=基址基址+(变址(变址 比例因子)比例因子)+位移量位移量位移量:位移量:8位,位,16位,位,32位。位。比例因子:取比例因子:取1,2,4,8。2.80386、80486、80586、Pentium的指令的指令80386、80486、80586、Pentium的指令比的指令比8086/8088的指令的指令除了寄存器增多了,操作数类型可以使用双字类型以外,除了寄存器

37、增多了,操作数类型可以使用双字类型以外,增加了一些指令和一些新的指令类型。增加了一些指令和一些新的指令类型。新增加的指令类型是:新增加的指令类型是:条件设置指令条件设置指令位处理指令(位测试、位扫描)位处理指令(位测试、位扫描)支持高级语言的指令(边界测试、栈空间处理)。支持高级语言的指令(边界测试、栈空间处理)。第三节第三节8086/8088的指令系统的指令系统8086/8088的指令系统中共有的指令系统中共有92种基本指令。种基本指令。可以分成可以分成6个功能组个功能组:1数据传送数据传送(Datatransfer)2算术运算(算术运算(Arithmetic)3逻辑运算和移位指令逻辑运算和

38、移位指令(Logic&Shift)4串操作串操作(Stringmanipulation)5控制转移(控制转移(ControlTransfer)6处理器控制(处理器控制(ProcessorControl)第一部分第一部分指令系统概述指令系统概述第二部分第二部分8086/8088的指令系统的指令系统一一数据传送数据传送(Datatransfer)二二算术运算(算术运算(Arithmetic)三三逻辑运算和移位指令逻辑运算和移位指令(Logic&Shift)四四串操作串操作(Stringmanipulation)五五控制转移(控制转移(ControlTransfer)六六处理器控制(处理器控制(Pr

39、ocessorControl)第一部分第一部分 指令系统概述指令系统概述8086/8088的指令系统中共有的指令系统中共有92种基本指令。种基本指令。可以分成可以分成6个功能组个功能组:1数据传送数据传送(Datatransfer)2算术运算(算术运算(Arithmetic)3逻辑运算和移位指令逻辑运算和移位指令(Logic&Shift)4串操作串操作(Stringmanipulation)5控制转移(控制转移(ControlTransfer)6处理器控制(处理器控制(ProcessorControl)介绍指令系统使用介绍指令系统使用的符号:的符号:八位寄存器八位寄存器:AH,AL,BH,H,

40、BL,CH,CL,DH,DL十六位通用寄存器十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI堆栈指针堆栈指针SP指令指针指令指针IP(或(或PC)标志位标志位Flags目的和源变址寄存器目的和源变址寄存器DI,SI段寄存器段寄存器CS,DS,ES,SS通用寄存器通用寄存器rAL或或AX(取决于操作数长度取决于操作数长度)accsrc,dest源,目的操作数(下列寻址方式都可以用)源,目的操作数(下列寻址方式都可以用)BX+SI+n,BX+DI+n,BP+SI+n,BP+DI+nSI+n,DI+n,BP+n,BX+nN,r 存储器单元的内容存储器单元的内容(正常在数据段正常在数据

41、段)ES:附加存储器段的内容附加存储器段的内容OPRD操作数操作数Seg段寄存器(段寄存器(CS,DS,ES,SS)im立即数立即数(n8位位, nn16位位,nnnn32位位)8086/8088指令助记符表指令助记符表(自学)自学)8086/8088指令助记符表(续)指令助记符表(续)第二部分第二部分8086/8088指令系统指令系统一、一、数据传送指令数据传送指令(Datatransfer)(一)通用传送指令(一)通用传送指令(GeneralPurposeTransfer)(二)输入输出指令(二)输入输出指令(InputandOutput)(三)目的地址传送指令(三)目的地址传送指令(Ad

42、dress-objecttransfer)(四)标志传送指令(四)标志传送指令(Flagregistertransfer)一一 数据传送指令数据传送指令功能:功能:负责把数据、地址或立即负责把数据、地址或立即数数传传送到送到寄存器或存储单元寄存器或存储单元。特点:特点:它是计算机最基本、最重要的一种操作,使用比例最高。它是计算机最基本、最重要的一种操作,使用比例最高。种类种类(分四种分四种):通用传送指令包括:通用传送指令包括:通用传送指令包括:通用传送指令包括:MOVMOV,PUSHPUSH,POPPOP,XCHG,XLATXCHG,XLAT。 输入输出指令指令包括输入输出指令指令包括输入输

43、出指令指令包括输入输出指令指令包括:IN,OUT:IN,OUT。 目的地址传送指令包括目的地址传送指令包括目的地址传送指令包括目的地址传送指令包括:LEA,LDS,LES:LEA,LDS,LES 标志传送指令包括标志传送指令包括标志传送指令包括标志传送指令包括:LAHF,:LAHF,SAHF,SAHF,PUSHF,PUSHF,POPFPOPF除除SAHF和和POPF指令外,对标志位没有影响。指令外,对标志位没有影响。(一)通用传送指令(一)通用传送指令(一)通用传送指令(一)通用传送指令(GeneralPurposeTransfer)8088提供方便灵活的通用的传送操作,适用于大多数操作数。提

44、供方便灵活的通用的传送操作,适用于大多数操作数。通用传送指令(除了通用传送指令(除了通用传送指令(除了通用传送指令(除了XCHGXCHG以外)是唯一允许以段寄存器为操以外)是唯一允许以段寄存器为操以外)是唯一允许以段寄存器为操以外)是唯一允许以段寄存器为操作数指令。作数指令。作数指令。作数指令。通用传送指令包括:通用传送指令包括:1、MOV(Movement)2、PUSH(Pushwordontostack)POP(Popwordoffstack)3、XCHG(Exchange)4、XLAT(Translate)1MOV dest,src;(dest)(src)目的目的源源目的目的源源功能:功

45、能:功能:功能:把一个字节把一个字节(B)或一个字(或一个字(W)操作数由源传送至目的。)操作数由源传送至目的。实现实现:寄存器寄存器寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。 具体说,通用数据传送指令能实现:具体说,通用数据传送指令能实现:CPU内部寄存器之间的数据的任意传送内部寄存器之间的数据的任意传送(除了码段寄存器(除了码段寄存器CS和指令指针和指令指针IP以外)。以外)。段寄存器之间不能传送。段寄存器之间不能传送。段寄存器之间不能传送。段寄存器之间不能传送。例:例:MOVDL,

46、CH;8位寄存器位寄存器8位寄存器位寄存器MOVAX,DX;16位寄存器位寄存器16位寄存器位寄存器MOVSI,BPMOVDS,BX;通用寄存器;通用寄存器段段寄存器寄存器MOVAX,CS;段段寄存器寄存器通用寄存器通用寄存器立即数传送至立即数传送至CPU内部通用寄存器组内部通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI)。)。用于给寄存器赋初值。用于给寄存器赋初值。不能直接给段寄存器赋值不能直接给段寄存器赋值不能直接给段寄存器赋值不能直接给段寄存器赋值例:例: MOVCL,04H;立即数;立即数8位位寄存器寄存器 MOVAX,03FFH;立即数;立即数16位位寄存器寄存器思考:

47、为什么加思考:为什么加思考:为什么加思考:为什么加WORDPTRWORDPTR,BYTEPTRBYTEPTR?不加对吗?不加对吗?不加对吗?不加对吗? MOVWORDPTRSI,057BH;立即数;立即数存储器存储器MOVBYTEPTRMEM,5;立即数;立即数存储器存储器CPU内部寄存器(除内部寄存器(除CS和和IP外)外)与存储器(所有寻址方式)之间数据传与存储器(所有寻址方式)之间数据传送。送。可以实现一字节或一个字的传送。可以实现一字节或一个字的传送。存储单元之间不能直接传送存储单元之间不能直接传送存储单元之间不能直接传送存储单元之间不能直接传送 例:例:MOVMEM,AX;累加器累加

48、器存储器存储器,直接寻址直接寻址MOVMEM,DS;段寄存器;段寄存器存储器,存储器,直接寻址直接寻址MOVDISPBX,CX;寄存器;寄存器存储器,存储器,变址寻址变址寻址MOVAX,DISPSI;存储器;存储器累加器,累加器,变址寻址变址寻址MOVDS,MEM;存储器;存储器段寄存器,段寄存器,直接寻址直接寻址MOVCX,DISPBXSI;存储器;存储器累加器,累加器,相对基址加变址相对基址加变址 注意注意注意注意:(1 1)不能用一条)不能用一条)不能用一条)不能用一条MOVMOV指令实现以下传送。指令实现以下传送。指令实现以下传送。指令实现以下传送。j存储单元之间的传送存储单元之间的传

49、送存储单元之间的传送存储单元之间的传送MOVMEM2,MEM1错。错。MOVAX,MEM1MOVMEM2,AX对。对。kk 立即数送段寄存器立即数送段寄存器立即数送段寄存器立即数送段寄存器例例:MOVDS,2000H错。错。MOVAX,2000HMOVDS,AX对。对。l段寄存器之间的传送段寄存器之间的传送段寄存器之间的传送段寄存器之间的传送MOVES,DS;错错MOVAX,DSMOVES,AX;对对。注意注意注意注意CSCS和和和和IPIP的使用的使用的使用的使用CSCS和和和和IPIP不能作为目标操作数,不能作为目标操作数,不能作为目标操作数,不能作为目标操作数,CSCS可以作为源操作数。

50、可以作为源操作数。可以作为源操作数。可以作为源操作数。例:例:MOVCS,AX;错错MOVAX,CS;对对。MOVIP,AX;错错MOVAX,IP;对。对。(2 2)段地址的默认)段地址的默认)段地址的默认)段地址的默认BX、SI、DI间址间址默认段地址为默认段地址为DS,BP间址间址默认段地址默认段地址SS。(3 3) 凡是遇到给凡是遇到给凡是遇到给凡是遇到给SSSS赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对本条指令和下条指令,恢复对本条指令和下条指令,恢复对本条指

51、令和下条指令,恢复对SSSS寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄寄存器赋值,同时又防止堆栈空间变动过程出现中断。存器赋值,同时又防止堆栈空间变动过程出现中断。* *在修改在修改在修改在修改SSSS和和和和SPSP的指令之间不要插入其他指令。的指令之间不要插入其他指令。的指令之间不要插入其他指令。的指令之间不要插入其他指令。(4 4) 所有通用传送指令不影响标志位所有通用传送指令不影响标志位所有通用传送指令不影响标志位所有通用传

52、送指令不影响标志位(除(除SAHF、POPF以外)。以外)。 MOVMOV指令应用指令应用指令应用指令应用例:例:实现将实现将AREA1开始的开始的100个数据传送到个数据传送到AREA2开始的单元。开始的单元。AREA1:AREA2:100个数据个数据分析题意:分析题意: 可以用可以用200条条MOV指令来完成指令来完成100个数据传送,个数据传送,指令操作重复,每个数据传送后的地址是变化的。指令操作重复,每个数据传送后的地址是变化的。可以利用循环,可以利用循环,但每循环一次要修改地址(源地址和目的地址),但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用必须把地址放在

53、寄存器当中,用寄存器间接寻址来寻找操作数寄存器间接寻址来寻找操作数.得到如下程序:得到如下程序:MOVSI,OFFSETOFFSETAREA1MOVDI,OFFSETOFFSETAREA2MOVCX,100AGAIN:MOVAL,SIMOVDI,ALINCSIINCSI ;修改地址指针;修改地址指针;修改地址指针;修改地址指针INCDIINCDI;修改地址指针;修改地址指针;修改地址指针;修改地址指针DECCXDECCX;修改个数;修改个数;修改个数;修改个数JNZAGAIN MOV指令的字节数、时钟周期数、指令的字节数、时钟周期数、CPU与内存间传送次数与内存间传送次数字节字节例例时钟数时钟

54、数M M传送到传送到CPUCPU次数次数MOVMOV指令操作数指令操作数AX MAX M M AX M AX10(14)10(14)1 13 3MOV COUNTDI, AXMOV COUNTDI, AXR RR R10(14)10(14)1 13 3MOV AX,TEMPMOV AX,TEMP2 22 2MOV DS,BXMOV DS,BXM RM RR MR M8(12)+ EA8(12)+ EA12424MOV BP,STAK_TOPMOV BP,STAK_TOP9(13)+ EA9(13)+ EA1 12424MOV COUNTBXSI,CXMOV COUNTBXSI,CXi im m

55、 R R( (段寄存器除外)段寄存器除外)4 42323MOV CL,2MOV CL,2i im m M M10(14)+ EA10(14)+ EA1 13636MOV word ptr BP,5HMOV word ptr BP,5HR R段段 R R1616(CS(CS、IPIP除外)除外)2 22 2MOV ES,CXMOV ES,CXMOV BP,SSMOV BP,SSM RM R段段R R段段 M M8(12)+ EA8(12)+ EA12424MOV DS,SEG_BASEMOV DS,SEG_BASE9(13)+ EA9(13)+ EA1 12424MOVBXSEG_SAN,CSM

56、OVBXSEG_SAN,CS表中:表中:表中:表中:(1 1)时钟数)时钟数)时钟数)时钟数执行指令所需的时钟周期数,执行指令所需的时钟周期数,直接决定了指令的执行时间。直接决定了指令的执行时间。时钟数决定因素时钟数决定因素时钟数决定因素时钟数决定因素: :决定于是决定于是字节字节操作还是操作还是字字操作;操作;若是若是内存内存操作数,决定于操作数,决定于寻址方式寻址方式(还要加上内存操(还要加上内存操作数的寻址时间作数的寻址时间)。表中表中b()的含义:的含义:b字节操作时钟数字节操作时钟数()字操作时钟数)字操作时钟数计算计算计算计算EAEA需要的需要的需要的需要的 时钟数:时钟数:时钟数

57、:时钟数:如下表所示如下表所示:(若段超越,再加两个时钟周期若段超越,再加两个时钟周期)(2 2)指令字节数)指令字节数)指令字节数)指令字节数:指令字节数与寻址方式有关。指令字节数与寻址方式有关。通常操作码占二个字节;通常操作码占二个字节;立即寻址立即寻址:立即数增加立即数增加1-2个字节数;个字节数;操作数在内存中操作数在内存中:直接寻址直接寻址:直接地址为直接地址为1-2个字节,总的指令长个字节,总的指令长3-4个字节;个字节;寄存器间接寻址(没有位移量)寄存器间接寻址(没有位移量):2个字节;个字节;变址寻址或者相对基址加变址变址寻址或者相对基址加变址:都有都有1-2字节的位移量,字节

58、的位移量,指令字节数为指令字节数为2-4个个字节。字节。(3 3)传送次数:)传送次数:)传送次数:)传送次数:指执行指令时,内存与指执行指令时,内存与CPU之间数据传送的次数。之间数据传送的次数。凡是立即数凡是立即数寄存器或寄存器之间的传送无此传送数。寄存器或寄存器之间的传送无此传送数。凡是寄存器与存储器之间传送次数为凡是寄存器与存储器之间传送次数为1。2PUSH(Pushwordontostack)POP(Popwordoffstack)这是两条堆栈操作指令。这是两条堆栈操作指令。(1)(1)先介绍一下什么是堆栈,为什么需要堆栈先介绍一下什么是堆栈,为什么需要堆栈先介绍一下什么是堆栈,为什

59、么需要堆栈先介绍一下什么是堆栈,为什么需要堆栈堆栈堆栈按照按照先进后出先进后出原则组织的一段内存区域,原则组织的一段内存区域,特点:特点:特点:特点:下推式的(规定堆栈设置在堆栈段内)改变下推式的(规定堆栈设置在堆栈段内)改变SP的内容,的内容,随着随着推入堆栈内容增加,推入堆栈内容增加,SP的值减少。的值减少。先进后出工作原则(先进后出工作原则(LastInFirstOut简称简称LIFO)堆栈在内存中的情况:堆栈在内存中的情况: 堆栈在内存中的情况:堆栈在内存中的情况:堆栈在内存中的情况:堆栈在内存中的情况:可以可以用一条立即数传送指令给用一条立即数传送指令给SP赋值赋值,确定,确定SP在

60、在SS段段中的初始位置。中的初始位置。例:例:设:设:(SS)=9000H,堆栈段为堆栈段为64KBMOVSP,0E200H ;(SP)=0E200H则:则:整个堆栈段的物理地址范围为:整个堆栈段的物理地址范围为:90000H9FFFFH90000H9FFFFH栈顶的物理地址为:栈顶的物理地址为:栈顶的物理地址为:栈顶的物理地址为:9E200H9E200H堆栈在内存中的情况如右图所示:堆栈在内存中的情况如右图所示:堆栈在内存中的情况堆栈在内存中的情况堆栈用途堆栈用途堆栈用途堆栈用途:存放存放存放存放CPUCPU寄存器或存储器中暂时不使用的数据,寄存器或存储器中暂时不使用的数据,寄存器或存储器中

61、暂时不使用的数据,寄存器或存储器中暂时不使用的数据, 使用数据时将其弹出;使用数据时将其弹出;使用数据时将其弹出;使用数据时将其弹出; 调用子程序调用子程序调用子程序调用子程序,响应中断时都要用到堆栈。响应中断时都要用到堆栈。响应中断时都要用到堆栈。响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要调用子程序(或过程)或发生中断时要保护断点的地址保护断点的地址,子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。主程序主程序子程序子程序:子程序:在一个实际程序中,有些操作要执行多次,把要子程序:在一个实际程序中,有些操作要执行多次,把要重重复执行复执行(subroutine)操作编

62、为子程序。操作编为子程序。也常把一些常用的操作标准化、通用化的子程序。也常把一些常用的操作标准化、通用化的子程序。主程序(主程序(Mainprogram)往往要调用子程序往往要调用子程序或处理或处理中断中断,暂停主程序,执行子程序或中断服务程序。暂停主程序,执行子程序或中断服务程序。调用子程序时需调用子程序时需调用子程序时需调用子程序时需保留内容保留内容保留内容保留内容: :调用子程序:将下条指令地址即调用子程序:将下条指令地址即调用子程序:将下条指令地址即调用子程序:将下条指令地址即IPIP值保留下来值保留下来值保留下来值保留下来(8088中码段寄存器中码段寄存器CS和指令指针和指令指针IP

63、),),才能才能保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。执行子程序时执行子程序时执行子程序时执行子程序时,通常用到,通常用到内部寄存器内部寄存器,执行结果会影响,执行结果会影响标志位,必须在调用子程序之前将标志位,必须在调用子程序之前将现状保护起来现状保护起来现状保护起来现状保护起来。子程序嵌套或子程序递归(自调自)子程序嵌套或子程序递归(自调自)保留许多信息,而且保证正确返回(且后进先出)。保留许多信息,而且保证正确返回(且后进先出)。后保留先取出原则后保留先取出原

64、则(即(即LIFO-LASTInFirstout)。)。注意:注意:SP堆栈指针堆栈指针,始终指向栈顶。始终指向栈顶。SP初值用初值用MOVSP,im来设定。来设定。下边详细说明一下堆栈用途:下边详细说明一下堆栈用途:下边详细说明一下堆栈用途:下边详细说明一下堆栈用途:存放存放CPU寄存器或存储器中暂时不使用的数据寄存器或存储器中暂时不使用的数据,使用数据时将其弹出:使用数据时将其弹出:PUSHAX;将将(AX)入栈入栈(AX)(AX)使用数据时将其弹出:使用数据时将其弹出:POPBX调用子程序(或过程)或发生中断时要保护断点的地址,调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中

65、断返回时恢复断点。子程序或中断返回时恢复断点。子程序嵌套子程序嵌套断点地址压入和弹出情况断点地址压入和弹出情况(2)(2)堆栈操作指令堆栈操作指令堆栈操作指令堆栈操作指令(堆栈操作指令有两条堆栈操作指令有两条): 入栈指令入栈指令入栈指令入栈指令格式:格式:PUSHsrc;(SP)(SP)-2(SP)+1,(SP)(src)把一个字从源操作数把一个字从源操作数把一个字从源操作数把一个字从源操作数由由由由SPSP指向堆栈顶部。指向堆栈顶部。指向堆栈顶部。指向堆栈顶部。操作如:操作如:PUSHAX 出栈指令出栈指令出栈指令出栈指令格式:格式:POPdest;(dest)(SP)+1,(SP)(SP

66、)(SP)+2把现行把现行把现行把现行SPSP所指向堆栈顶部的一个字所指向堆栈顶部的一个字所指向堆栈顶部的一个字所指向堆栈顶部的一个字 指定的目的操作数,指定的目的操作数,指定的目的操作数,指定的目的操作数,同时进行修改堆栈指针的操作。同时进行修改堆栈指针的操作。同时进行修改堆栈指针的操作。同时进行修改堆栈指针的操作。操作如:操作如:POPBX应用时注意:应用时注意:应用时注意:应用时注意:堆栈操作都按字操作。堆栈操作都按字操作。PUSH,POP指令的操作数可能有三种:指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器),段寄存器段寄存器

67、(CS除外,除外,PUSHCS合法,合法,POPCS非法)非法),存储器。存储器。执行执行PUSH指令指令,(SP)-2(SP),低字节放在低地址,高字节放在高地址。低字节放在低地址,高字节放在高地址。随着推入堆栈内容增加,堆栈就扩展,随着推入堆栈内容增加,堆栈就扩展,SP的值减少,的值减少,但但SP总是指向栈顶,总是指向栈顶,堆栈工作原则堆栈工作原则后进先出。后进先出。PUSH,POPPUSH,POP指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。堆栈最大容量即为堆栈最大容量即为SP的初值与的初值

68、与SS之间的差。之间的差。堆栈应用举例:堆栈应用举例:例:例:用用用用BPBP的基址指令的基址指令的基址指令的基址指令代替代替代替代替POPPOP指令指令指令指令MOVBP,SPPUSHAXPUSHBXPUSHCXMOVCX,BP-6MOVBX,BP-4MOVAX,BP-2ADDSP,6例例:压入堆栈的内容压入堆栈的内容压入堆栈的内容压入堆栈的内容与弹出内容顺序相反与弹出内容顺序相反与弹出内容顺序相反与弹出内容顺序相反PUSH AXPUSHBXPUSHCXPOPCXPOPBXPOPAX3 3、交换指令、交换指令、交换指令、交换指令(Exchange)格式:格式:XCHGdest,src;(de

69、st)(src)执行操作:执行操作:把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。可以可以实现:实现:寄存器之间寄存器之间寄存器之间寄存器之间 寄存器和存储器之间寄存器和存储器之间寄存器和存储器之间寄存器和存储器之间注意:注意:存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在寄存器中;两个操作数中必须有一个在寄存器中;段寄存器不能作为一个操作数;段寄存器不能作为一个操作数;允许字或字节操作,不影响标志位。允许字或字节操作,不影响标志位

70、。应用举例:应用举例:XCHGBL,DLXCHGAX,SIXCHGCOUNTDI,AXXCHGBX,DI(错)错)XCHGDS,AX(错)错)4. 4.XLATXLAT(TranslateTranslate)换码指令:)换码指令:)换码指令:)换码指令:该指令不影响标志位。该指令不影响标志位。格式:格式:XLATstr_table;(;(AL)(BX)+(AL)或或XLATstr_table表格符号地址(首地址),表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。XLAT指令使用方法指令使用方法:先建立一个字节表格;先建立一个字节表格;表格首

71、偏移地址存入表格首偏移地址存入表格首偏移地址存入表格首偏移地址存入BXBX;需要转换需要转换需要转换需要转换代码的序号代码的序号代码的序号代码的序号(相对与表格首地址位移量)(相对与表格首地址位移量)存入存入存入存入ALAL;(表中第一个元素的序号为(表中第一个元素的序号为0)执行执行执行执行XLATXLAT指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于ALAL中中中中。(AL)为转换的代码。为转换的代码。XLAT指令应用:指令应用:若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码;或或数字数字09转换成转换成

72、7段数码所需要的相应代码(段数码所需要的相应代码(字形码字形码)等)等就要用就要用XLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码表。码表。 首地址为:首地址为:Hex_table,欲查出表中第欲查出表中第10个元素(个元素(A)执行指令序列执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLATHex_table假设:假设:(DS)=F000H,Hex_table=0040H(AL)=0AH执行执行XLAT以后:以后:(AL)=41H=(F004AH),),即即“A”的的ASCII码。码。30H30H31H

73、31H32H32H.39H39H41H41H42H42H.46H46H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_table+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHex_table+0FHFFBBAA9911220016进制数的进制数的ASCII码表码表(二)输入输出指令(二)输入输出指令(二)输入输出指令(二)输入输出指令(InputandOutput)输入输出指令共两条:输入输出指令共两条:1 1、ININ(Inputbyteo

74、rword)2 2、OUTOUT(Outputbyteorword)输入指令输入指令用于用于CPU从外设端口接受数据从外设端口接受数据,输出指令输出指令用于用于CPU向外设端口发送数据。向外设端口发送数据。无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(字)或字)或AL(字节),字节),又称累加器专用传送指令又称累加器专用传送指令。输入、输出指令不影响标志位。输入、输出指令不影响标志位。输入、输出指令不影响标志位。输入、输出指令不影响标志位。每个外设要占几个端口:数据口,状态口和控制口。每个外设要占几个端口:数据口,状态口和控制口。信息交换要通过端口,信息交换要通

75、过端口,在在IBMPC机里,可以配接许多外部设备,机里,可以配接许多外部设备,每个外设与每个外设与CPU之间交换数据,状态信息和控制命令,之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有端口数:外部设备最多有65536个个I/O端口。端口。A0A15译码形成。译码形成。端口号:端口号(即外设端口地址)为端口号:端口号(即外设端口地址)为0000HFFFFH。PC机仅使用机仅使用A0A9译码形成译码形成I/O口地址,即口地址,即1024H个口地址个口地址端口号:端口号:0000H03FFH其中:其中:A9=1,表

76、示扩充槽上的,表示扩充槽上的口地址。口地址。长格式:长格式:长格式:长格式:端口号中前端口号中前端口号中前端口号中前256256个端口(个端口(个端口(个端口(0FFH0FFH),可以直接写在指令中,可以直接写在指令中,这就是长格式。这就是长格式。端口号代替指令中的端口号代替指令中的PORT,机器指令用二字节表示,第二字节就是端口号。机器指令用二字节表示,第二字节就是端口号。短格式:短格式:短格式:短格式:当端口号当端口号当端口号当端口号256256时,只能使用短格式时,只能使用短格式时,只能使用短格式时,只能使用短格式,必须先把端口号放到必须先把端口号放到DX寄存器中。寄存器中。不需要用任何

77、段寄存器来修改它的值。不需要用任何段寄存器来修改它的值。1 1、IN(Inputbyteorword)IN(Inputbyteorword)输入指令输入指令输入指令输入指令格式:格式:INacc,port;(acc)(port)具体形式有四种:具体形式有四种:INAL,data8;端口地址端口地址8位,输入一个字节位,输入一个字节INAX,data8;端口地址;端口地址8位,输入一个字位,输入一个字INAL,DX;端口地址;端口地址16位,输入一个字节位,输入一个字节INAX,DX;端口地址;端口地址16位,输入一个字位,输入一个字必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输

78、入输入数据。数据。2 2、OUTOUT(Outputbyteorword)输出指令输出指令输出指令输出指令格式:格式:OUTport,acc;(port)(acc)具体形式有四种:具体形式有四种:OUTdata8,AL;端口地址端口地址8位,输出一个字节位,输出一个字节OUTdata8,AX;端口地址;端口地址8位,输出一个字位,输出一个字OUTDX,AL;端口地址;端口地址16位,输出一个字节位,输出一个字节OUTDX,AX;端口地址;端口地址16位,输出一个字位,输出一个字必须通过累加器必须通过累加器AX(字)或字)或AL(节)节)输出输出数据。数据。例例1:实现:实现(29H)(28H)

79、(DATA_WORD)INAX,28HMOVDATA_WORD,AX例例2:从端口:从端口3FCH送一个字到送一个字到AX寄存器寄存器MOVDX,3FCHINAX,DX;(AL)(3FCH),),(AH)(3FDH) 例例3:实现将(:实现将(AL)(05H)OUT5,AL;(;(05H)(AL)(三)目的地址传送指令(三)目的地址传送指令(三)目的地址传送指令(三)目的地址传送指令(Address-objecttransfer)8086/8088提供三条提供三条:地址指针写入指定寄存器或寄存器对指令。地址指针写入指定寄存器或寄存器对指令。1、LEA(LoadEffectiveAddress)

80、2、LDS(LoadpointerusingDS)3、LES(LoadpointerusingES)1 1、LEALEA(LoadEffectiveAddress)格式:格式:LEAreg16,mem16;EA(reg16)功能:加载有效地址,用于写近地址指针。功能:加载有效地址,用于写近地址指针。把指令中指定的把指令中指定的把指令中指定的把指令中指定的存储器操作数有效地址存储器操作数有效地址存储器操作数有效地址存储器操作数有效地址装入指定的寄存器装入指定的寄存器装入指定的寄存器装入指定的寄存器。例:设(例:设(BX)=0400H,(,(SI)=003CHLEABX,BX+SI+0F62H执行

81、指令后:执行指令后:EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH注意:设注意:设(DS)=3000HBUFFER=1000H(31000H)=0040H(1)LEA指令与指令与MOV的区别的区别LEABX,BUFFER;(;(BX)=1000HMOVBX,BUFFER;(BX)=0040HLEA指令与指令与MOV等价等价LEABX,BUFFER ;(BX)=1000HMOVBX,OFFSETBUFFER;(BX)=1000H(2)LEALEA指令中的目标寄存器必须是指令中的目标寄存器必须是指令中的目标寄存器必须是指令中的目标寄存器必须

82、是1616位的通用寄存器位的通用寄存器位的通用寄存器位的通用寄存器,源操作数必须是一个存储器源操作数必须是一个存储器源操作数必须是一个存储器源操作数必须是一个存储器。(3)请思考下列指令的正、误)请思考下列指令的正、误LEADX,BETABXSILEADX,AX2 2、LDSLDS(LoadpointerusingDS)格式:格式:LDSreg16,mem32;(;(reg16)(EA)(DS)(EA)+2)功能:功能:将指令指定将指令指定将指令指定将指令指定3232位地址指针送指令指定寄存器和位地址指针送指令指定寄存器和位地址指针送指令指定寄存器和位地址指针送指令指定寄存器和DSDS。将指令

83、指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装入指装入指定通用寄存器,把后两个单元内容定通用寄存器,把后两个单元内容(段地址段地址)装入到装入到DS段寄存段寄存器。器。用于写远地址指针。用于写远地址指针。例例:假设:假设:(DS)=C000H指令指令: LDSSI,0010H执行指令后执行指令后:(SI)=0180H(DS)=2000H3 3、LES(LoadpointerusingES)LES(LoadpointerusingES)格式:格式:LESreg16,mem32;(;(reg16)(EA)(ES)(EA)+2)功能:功能:把源操作数指定的

84、把源操作数指定的把源操作数指定的把源操作数指定的4 4个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器 及及及及ESES寄存器中。寄存器中。寄存器中。寄存器中。此指令常常指定此指令常常指定DI寄存器。寄存器。将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装入装入指定通用寄存器,把后两个单元内容指定通用寄存器,把后两个单元内容(段地址段地址)装入到装入到ES段段寄存器。寄存器。用于写远地址指针。用于写远地址指针。例例:假设:假设:(DS)=B000H(BX)=080AH指令指令: LE

85、SDI,BX执行指令后执行指令后:(DI)=05A2H(ES)=4000H综合举例:综合举例:设:设:(DS)=5000HTABLE=1000H分析下列指令执行结果:分析下列指令执行结果:MOVBX,TABLE;(;(BX)=0040HMOVBX,OFFSETTABLE;(;(BX)=1000HLEABX,TABLE;(;(BX)=1000HLESBX,TABLE;(;(BX)=0040H,(,(ES)=3000HLDSBX,TABLE;(;(BX)=0040H,(,(DS)=3000H(四)标志传送指令(四)标志传送指令(四)标志传送指令(四)标志传送指令(Flagregistertrans

86、fer)采用了隐含寄存器(采用了隐含寄存器(AH、Flags)操作数方式。操作数方式。8088有四条标志传送操作指令:有四条标志传送操作指令:1LAHF(LoadAHintoflags)2SAHF(StoreAHintoflags)3PUSHF(Pushflagsontostack)4POPF(Popflagsoffstack) 1 1LAHFLAHF(LoadAHflagsflags)格式:格式:LAHF;(;(AH)(PSW的低字节)的低字节)功能:功能:标志寄存器低八位标志寄存器低八位标志寄存器低八位标志寄存器低八位 (AHAH)。LAHF指令操作图示意指令操作图示意2SAHF(Stor

87、eAHintoflags)格式:格式:SAHF;(;(PSW的低字节)的低字节)(AH)功能:(功能:(AH)送标志寄存器低八位。)送标志寄存器低八位。3PUSHF(Pushflagsontostack)格式:格式:PUSHF;(;(SP)(SP)-2(SP)+1,(,(SP)(PSW)功能功能:标志进栈。标志进栈。4POPF(Popflagsoffstack) 格式:格式:POPF;(;(PSW)(SP)+1,(,(SP)(SP)(SP)+2功能功能:标志出栈。:标志出栈。注意:注意:(1)标志位的影响标志位的影响LAHF、PUSHF不影响标志位不影响标志位,SAHF、POPF由装入的值确定

88、标志位的值,由装入的值确定标志位的值,即影响标志位。即影响标志位。(2)PUSHF、POPF用于保护调用过程前(用于保护调用过程前(PSW),过程返回过程返回后恢复。后恢复。例:例:PUSHAXPUSHCXPUSHFCALLTRANSPOPFPOPCXPOPAX二二二二算术运算指令算术运算指令算术运算指令算术运算指令(Arithmetic)内容:内容:8086/80888086/8088提供加、减、乘、除、转换五种基本算术操作提供加、减、乘、除、转换五种基本算术操作提供加、减、乘、除、转换五种基本算术操作提供加、减、乘、除、转换五种基本算术操作; ;利用十进制调整指令和利用十进制调整指令和AS

89、CII调整指令对调整指令对BCD码表示的码表示的十进制数进行十进制数进行算术运算;算术运算;对带符号数与无符号数进行乘、除运算。对带符号数与无符号数进行乘、除运算。对带符号数与无符号数进行乘、除运算。对带符号数与无符号数进行乘、除运算。(一)加法指令(一)加法指令(Arithmetic)(二)减法指令(二)减法指令(Subtraction)(三)乘法指令(三)乘法指令(Multiplication)(四)除法指令(四)除法指令(Division)(五)转换指令(五)转换指令特点:特点:特点:特点:大部分都影响标志位大部分都影响标志位大部分都影响标志位大部分都影响标志位,不同指令影响不同不同指令

90、影响不同:(1)加、减法指令影响加、减法指令影响加、减法指令影响加、减法指令影响SF,ZF,AF,PF,CF,OF;SF,ZF,AF,PF,CF,OF;(2)(2)加加加加1 1和减和减和减和减1 1指令不影响指令不影响指令不影响指令不影响CF;CF;(3)(3)乘法指令影响乘法指令影响乘法指令影响乘法指令影响CF,OF;CF,OF;(4)(4)除法指令使大部分标志位的状态不确定除法指令使大部分标志位的状态不确定除法指令使大部分标志位的状态不确定除法指令使大部分标志位的状态不确定; ;(5)(5)对对对对BCDBCD码调整指令对标志位的影响不同码调整指令对标志位的影响不同码调整指令对标志位的影

91、响不同码调整指令对标志位的影响不同; ;(6)(6)转换指令对标志位无影响转换指令对标志位无影响转换指令对标志位无影响转换指令对标志位无影响都可以用于字节、字的运算都可以用于字节、字的运算都可以用于字节、字的运算都可以用于字节、字的运算; ;双操作数指令双操作数指令双操作数指令双操作数指令除源为立即数外,其余必须有一个操作数除源为立即数外,其余必须有一个操作数除源为立即数外,其余必须有一个操作数除源为立即数外,其余必须有一个操作数 为为为为寄存器寄存器寄存器寄存器;单操作数指令不能为立即数。;单操作数指令不能为立即数。;单操作数指令不能为立即数。;单操作数指令不能为立即数。(一)加法指令(一)

92、加法指令(Arithmetic)80888088具有具有具有具有5 5种加法操作指令种加法操作指令种加法操作指令种加法操作指令: :1、ADD(Addition)加法指令加法指令2、ADC(Addwithcarry)带进位加法指令带进位加法指令3、INC(Incrementby1)加加1指令指令4 4、AAA(ASCIIadjustforaddition)AAA(ASCIIadjustforaddition)加法加法加法加法ASCIIASCII调整指令调整指令调整指令调整指令55、DAA(Decimaladjustforaddition)DAA(Decimaladjustforaddition

93、)加法十进制调整指令加法十进制调整指令加法十进制调整指令加法十进制调整指令 1、ADD(Addition)加法指令加法指令指令格式:指令格式:ADDdest,src;(dest)(dest)+(src)SrcSrc:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。destdest:寄存器,存储器。:寄存器,存储器。:寄存器,存储器。:寄存器,存储器。例:例:ADDCL,10;寄存器寄存器+立即数立即数ADDDX,SI;寄存器寄存器+寄存器寄存器ADDAX,MEM;寄存器寄存器+存储器存储器ADDDATABX,AL;存储器存储器+寄存器寄存器

94、ADDBYTEPTRALPHADI,30H;存储器存储器+立即数立即数特点特点:可以进行可以进行可以进行可以进行8 8位、位、位、位、1616位的位的位的位的无符号数和带符号数无符号数和带符号数无符号数和带符号数无符号数和带符号数的加法运算;的加法运算;的加法运算;的加法运算;源操作数和目标操作数源操作数和目标操作数源操作数和目标操作数源操作数和目标操作数不能同时为存储器不能同时为存储器不能同时为存储器不能同时为存储器, ,不能为段寄存器不能为段寄存器不能为段寄存器不能为段寄存器;指令影响标志位的情况指令影响标志位的情况指令影响标志位的情况指令影响标志位的情况:OF=1OF=1,8位带符号数相

95、加,和超出范围(位带符号数相加,和超出范围(128127),16位带符号数相加,和超出范围位带符号数相加,和超出范围(-32768+32767);CF=1CF=1,8位无符号数相加,和超过位无符号数相加,和超过255,16位无符号数相加,和超过位无符号数相加,和超过65535。其他条件标志(其他条件标志(SF,AF,PF,ZF)根据定义设定。根据定义设定。例例MOVAL,7EH;(AL)=7EHMOVBL,5BH;(BL)=5BHADDAL,BL;(AL)=7EH+5BH=D9H影响标志位的情况影响标志位的情况:SF=1 ,结果最高位结果最高位1ZF=0 ,结果不等于,结果不等于0AF=1 ,

96、D3位向位向D4有进位有进位PF=0 ,”1”的个数为奇数的个数为奇数CF=0 ,无进位,无进位OF=1 ,和超过,和超过127(两个正数相加,结果为负;反之亦是)(两个正数相加,结果为负;反之亦是)(两个正数相加,结果为负;反之亦是)(两个正数相加,结果为负;反之亦是)2、ADC(Addwithcarry)带进位加法指令带进位加法指令格式:格式:ADCdest,src;(;(dest)(dest)+(src)+CFCFCF:CF:进位标志进位标志CF的现行值的现行值(上条指令上条指令上条指令上条指令CFCF值值值值)特点特点:与与ADD同。同。用途:主要用于多字节运算中。用途:主要用于多字节

97、运算中。类型举例:类型举例:ADCCX,300;寄存器寄存器+立即数立即数+CFADCAL,BL;寄存器寄存器+寄存器寄存器+CFADCDX,COUNTSI;寄存器寄存器+存储器存储器CFADCBLOCKDI,BX;存储器存储器+寄存器寄存器+CFADCBYTEPTRMEM,6;存储器存储器+立即数立即数+CF用途举例:用途举例:计算两个多字节数相加计算两个多字节数相加3B74AC60F8H+20D59E36C1H=?两个多字节数存放在:两个多字节数存放在:DATA1,DATA2的开始单元。的开始单元。流程图流程图多字节数内存存放多字节数内存存放程序:程序:MOVCX,5MOVSI,0;清清S

98、ICLC;清;清CFLOOPER:MOVAL,DATA2SIADCDATA1SI,ALINCSI;(SI)+1(SI)DECCX;(CX)-1(CX)JNZLOOPER;(CX) 0转转HLT;停机;停机问题思考问题思考:(1) 什么叫什么叫溢出?什么溢出?什么溢出?什么溢出?什么叫叫进位?进位?进位?进位?(2) 有进位就有溢出,没有进位就没有溢出?有进位就有溢出,没有进位就没有溢出?有进位就有溢出,没有进位就没有溢出?有进位就有溢出,没有进位就没有溢出?(1)溢出溢出溢出溢出-是指是指是指是指带符号数的补码带符号数的补码溢出。溢出。溢出。溢出。 字长为字长为字长为字长为nn位位位位带符号数

99、,补码运算能表示范围为带符号数,补码运算能表示范围为:-2n-1+2n+11如果运算结果超出该范围,叫补码如果运算结果超出该范围,叫补码溢出,简称溢出。在溢出时,溢出,简称溢出。在溢出时,溢出,简称溢出。在溢出时,溢出,简称溢出。在溢出时,造成造成造成造成运算错误。运算错误。进位进位进位进位-是指是指是指是指运算结果的最高位向更高位的运算结果的最高位向更高位的进位。进位。进位。进位。有进位,有进位,有进位,有进位,CF=1CF=1;无进位,;无进位,;无进位,;无进位,CF=0CF=0(2)有进位就有溢出,没有进位就没有溢出?有进位就有溢出,没有进位就没有溢出?有进位就有溢出,没有进位就没有溢

100、出?有进位就有溢出,没有进位就没有溢出?结论:结论:有进位不一定有溢出有进位不一定有溢出,没有进位不一定没有溢出。没有进位不一定没有溢出。数的表示范围:数的表示范围:8位二进制数可以表示十进制数的范围:位二进制数可以表示十进制数的范围:8位带符号十进制数的范围:位带符号十进制数的范围:1281278位无符号十进制数的范围:位无符号十进制数的范围:025516位二进制数可以表示十进制数的范围位二进制数可以表示十进制数的范围:16位带符号十进制数的范围:位带符号十进制数的范围:327683276716位无符号十进制数的范围:位无符号十进制数的范围:065535以以8位二进制数为例位二进制数为例分析

101、一下数的溢出与进位情况分析一下数的溢出与进位情况:下面分下面分4种情况加以讨论:种情况加以讨论:(1) 带符号数和无符号数都不溢出带符号数和无符号数都不溢出(2) 无符号数溢出无符号数溢出(3) 带符号数溢出带符号数溢出(4) 带符号数和无符号数都溢出带符号数和无符号数都溢出(1 1) 带符号数和无符号数都不溢出带符号数和无符号数都不溢出带符号数和无符号数都不溢出带符号数和无符号数都不溢出。(2 2) 无符号数溢出无符号数溢出无符号数溢出无符号数溢出二进制数二进制数看作无符号数看作无符号数看作带符号数看作带符号数0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 11 1 1 1 1

102、1 1 1 1 1 0 0 1 1 1 1+ +0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 07 7251251+ +258258+ 7+ 7- 5- 5+ + 2+ 2相相加加标志标志CF=1,OF=0CF=1,OF=0CF=1CF=1OF=0OF=0溢出溢出无符号数溢出无符号数溢出溢出溢出结果应为结果应为2 2,错,错不溢出不溢出异号数相加异号数相加不可能有溢出不可能有溢出CF=1CF=1(3 3) 带符号数溢出带符号数溢出带符号数溢出带符号数溢出(4 4) 带符号数和无符号数都溢出带符号数和无符号数都溢出带符号数和无符号数都溢出带符号数和无符号数都溢出结论结论:(1)带符

103、号数)带符号数相加相加溢出溢出根据根据OF=1?,判断带符号数产生溢出?判断带符号数产生溢出?OF=1OF=1OF=1OF=1,同符号数相加,结果符号与其相反,同符号数相加,结果符号与其相反,同符号数相加,结果符号与其相反,同符号数相加,结果符号与其相反,产生溢出产生溢出产生溢出产生溢出;OF=0,OF=0,同符号数相加,结果符号与其相同,不同符号数相加,结果符号与其相同,不同符号数相加,结果符号与其相同,不同符号数相加,结果符号与其相同,不产生溢出产生溢出产生溢出产生溢出;异号数相加,异号数相加,异号数相加,异号数相加,不可能溢出。不可能溢出。不可能溢出。不可能溢出。(2)无符号数)无符号数

104、相加相加溢出溢出根据根据CF=1?,判断无符号数产生溢出?判断无符号数产生溢出?CF=1,CF=1,无符号数无符号数无符号数无符号数相加相加相加相加产生溢出产生溢出产生溢出产生溢出, ,但结果并没有错,但结果并没有错,但结果并没有错,但结果并没有错,只是结果放不下。只是结果放不下。只是结果放不下。只是结果放不下。3、INC(Incrementby1)加加1指令指令格式:格式:INCdest ;(;(B/W),(dest)(dest)+1dest:寄存器、存储器。不能是段寄存器。寄存器、存储器。不能是段寄存器。寄存器、存储器。不能是段寄存器。寄存器、存储器。不能是段寄存器。功能:对指定的目标操作

105、数功能:对指定的目标操作数+1操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。不影响不影响不影响不影响CFCF。操作数类型:可以是寄存器,存储器。不能是段寄存器。操作数类型:可以是寄存器,存储器。不能是段寄存器。操作数类型:可以是寄存器,存储器。不能是段寄存器。操作数类型:可以是寄存器,存储器。不能是段寄存器。例:例:INCDL;8位寄存器位寄存器1INCSI;16位寄存器位寄存器1INCBYTEPTRBXSI;存储器;存储器1(字节操作)(字节操作)INC

106、WORDPTRDI;存储器;存储器1(字操作)(字操作)INCDS;错错(二)减法指令(二)减法指令(Subtraction)8088有有7条减法指令条减法指令:1、SUB(Subtraction)减法指令减法指令2、SBB(Subtractionwithborrow)带进位减法指令带进位减法指令3、DEC(Decrementby1)减减1指令指令4、NEG(Negate)求补指令求补指令5、CMP(Compare)比较指令比较指令6、AAS(ASCIIadjustforsubtraction)减法减法ASCII调整指令调整指令7、DAS(Decimaladjustforsubtraction

107、)减法十进制调整指令减法十进制调整指令1、SUB(Subtraction)减法指令减法指令格式:格式:SUBdest,src;(;(dest)(dest)-(src)SrcSrc:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。DestDest:寄存器,存储器。:寄存器,存储器。:寄存器,存储器。:寄存器,存储器。例:例:SUBAL,37H;寄存器寄存器-立即数立即数SUBBX,DX;寄存器寄存器-寄存器寄存器SUBCX,VAR1;寄存器寄存器-存储器存储器SUBARRAYSI,AX;存储器存储器-寄存器寄存器SUBWORDPTRALPHA

108、BXDI,512H;存储器减立即数存储器减立即数这种指令影响标志位这种指令影响标志位:A、C、O、P、S、Z标志。标志。CF=1,无符号数小减大;无符号数小减大;SF=1,带符号数小减大,带符号数小减大,OF=1溢出溢出.2、SBB(Subtractionwithborrow)带进位减法指令带进位减法指令格式:格式:SBBdest,src;(;(dest)(dest)-(src)-CFCF:进位标志进位标志CF的现行值的现行值(上条指令上条指令CF值值)SrcSrc:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。:立即数,寄存器,存储器。destdest:寄存器,

109、存储器。:寄存器,存储器。:寄存器,存储器。:寄存器,存储器。指令影响标志位、指令影响标志位、B/W数运算情况同数运算情况同SBB用途:用于多字节数相加用途:用于多字节数相加例:例:SBBBX,100H;寄存器寄存器-立即数立即数-CFSBBCX,DX;寄存器寄存器-寄存器寄存器-CFSBBAL,DATA1SI;寄存器寄存器-存储器存储器-CFSBBDISPBP,BL;存储器存储器-寄存器寄存器-CFSBBBYTEPTRALPHASI+6,96H;存储器存储器-立即数立即数-CF问题思考:问题思考:问题思考:问题思考:减法有借位就有溢出,没有借位就没有溢出?减法有借位就有溢出,没有借位就没有溢

110、出?结论:结论:结论:结论:CF=1表示不带符号数有溢出。表示不带符号数有溢出。OF=1表示带符号数有溢出。表示带符号数有溢出。CF值反映无符号数运算中的借位情况:值反映无符号数运算中的借位情况:无符号数相减:无符号数相减:CF=1,减数,减数被减数,有借位被减数,有借位CF=0,被减数,被减数减数,无借位减数,无借位补码加法:补码加法:CF=1,二进制运算中最高有效位向高位无进位二进制运算中最高有效位向高位无进位CF=0,二进制运算中最高有效位向高位有进位二进制运算中最高有效位向高位有进位减法减法0F位设置:位设置:OF=1,二个数符号相反,二个数符号相反,结果符号与减数相同结果符号与减数相

111、同;否则,否则,OF=0。3、DEC(Decrementby1)减减1指令指令格式:格式:DECdest;(B/W)(dest)(dest)-1dest:dest:寄存器寄存器寄存器寄存器 、存储器。不能是段寄存器。、存储器。不能是段寄存器。、存储器。不能是段寄存器。、存储器。不能是段寄存器。功能:对指定的目标操作数功能:对指定的目标操作数-1操作数单元。操作数单元。用途:用于在循环程序中修改地址指针和循环次数。用途:用于在循环程序中修改地址指针和循环次数。标志位影响情况:影响标志位影响情况:影响SF,ZF,AF,PF,OF。不影响不影响CF。DEC用途举例:用途举例:MOVAX,0FFFFH

112、CYC:DECAXJNZCYCHLT用于延时时间。用于延时时间。4、NEG(Negate)求补指令求补指令格式:格式:NEGdest;B/W,(dest)0-(dest)dest:寄存器寄存器 、存储器。、存储器。操作操作:把操作数按位求反后末位把操作数按位求反后末位+1。(dest)0FFFFH-(dest)+1影响标志:影响标志:A、C、O、P、S、Z。CF:操作数为操作数为0时求补时求补,CF=0;一般使一般使CF=1.OF:对对128或或32768求补,求补,OF=1;否则否则OF=0.应用举例:求绝对值应用举例:求绝对值在内存中,在内存中,从从AREA1开始存放开始存放100个带符号

113、数。个带符号数。求各数的绝对值存于求各数的绝对值存于AREA2的开始单元。的开始单元。流程图流程图程序:程序:LEASI,AREA1LEADI,AREA2MOVCX,100CHECK:MOVAL,SIORAL,AL;(AL)内容不变,置标志内容不变,置标志JNSNEXT;SF=0转转NEXTNEGAL;负数求补负数求补NEXT:MOVDI,AL;送目标;送目标INCSIINCDIDECCXJNZCHECKHLT5、CMP(Compare)比较指令比较指令格式:格式:CMPdest,src;B/W(destdest)- -(srcsrc)结果不送,置标志。结果不送,置标志。结果不送,置标志。结果

114、不送,置标志。影响标志:影响标志:A、C、O、P、S、Z。src: 立即数,寄存器,存储器。立即数,寄存器,存储器。dest:寄存器,存储器。:寄存器,存储器。例:例: CMPAL,0AH;寄存器与立即数比较寄存器与立即数比较CMPCX,DI;寄存器与寄存器比较寄存器与寄存器比较CMPAX,AREA1;寄存器与存储器比较寄存器与存储器比较CMPBX+5,SI;存储器与寄存器比较存储器与寄存器比较CMPWORDPTRALPHAGAMMA,100H;存储器与立即数比较存储器与立即数比较用途:用途:用比较指令来比较两个数之间的关系:用比较指令来比较两个数之间的关系:两者是否相等,两个数中哪个大。两者

115、是否相等,两个数中哪个大。(1)根据根据Z标志,判断两者是否相等;标志,判断两者是否相等;(2) 根据根据CF标志,标志,判断两个无符号数的大小;判断两个无符号数的大小;(3) 用用S、O标志,判断二个带符号数的大小。标志,判断二个带符号数的大小。 (1 1) 根据根据根据根据Z Z标志,可判断两者是否相等标志,可判断两者是否相等标志,可判断两者是否相等标志,可判断两者是否相等例:例:CMPAX,BXZF=1,(AX)=(BX),两者相等两者相等ZF=0,(AX)=(BX),两者不相等两者不相等(2 2) 根据根据根据根据CFCF标志,标志,标志,标志, 判断两个无符号数的大小判断两个无符号数

116、的大小判断两个无符号数的大小判断两个无符号数的大小例:例:比较比较AX,BX寄存器寄存器,将大数将大数(AX)CMPAX,BXJNCNEXT;CF=0转转NEXTXCHGAX,BXNEXT:结论:结论:CF=0,(AX)(BX);CF=1,(AX)0,B0A0,B0 A0,B0A0,B0,B0,B0 A0A0四种情况讨论四种情况讨论(操作数以操作数以8位为例)位为例):A AB BCMP A, BCMP A, B结论结论75 5A0, B0A0, B0SF=0SF=0,OF=0 OF=0 则:则:ABAB5 57 7情情况况A0, B0A0, B0SF=1SF=1,OF=0 OF=0 则:则:

117、ABAB5 52 25 57 72 2-5-5-7-71 1-7-7-5-5-5-5-(-7)-(-7)+2+2A0,B0A0,B0SF=1SF=1,OF=0 OF=0 则:则:ABABA0,B0A0,BBAB-7-7-(-5)-(-5)-2-2 3+127+127-63-63A0,B0,BBAB+127+127-(-63)-(-63)+190+190 4-63-63+127+127A0A0SF=0SF=0,OF=1 OF=1 则:则:ABABSF=1,则:则:ABSF=0,则:,则:AB;O、S异号时异号时:记作记作S O=1,则:则:AB,用用JG/JNLE转移指令转移指令;S O=1时时

118、,A第二个数,不做交换,第二个数,不做交换,否则,(第二个字单元内容)否则,(第二个字单元内容)(AX)。)。再取第三个数,再取第三个数, 经过经过99次比较,在(次比较,在(AX)中得到最大数。)中得到最大数。编程:编程:MOVBX,OFFSETBLOCKMOVAX,BXINCBXINCBXMOVCX,99AGAIN:CMPAXCMPAX,BXBXJGNEXTJGNEXT;(AX)(16d(ds)+(BX)转转NEXTMOVAX,BXNEXT: INCBXINCBXDECCX JNEAGAINMOVMAX,AX;MAX单元存放单元存放最大值最大值三、逻辑运算和移位指令三、逻辑运算和移位指令(

119、一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令(一)逻辑运算指令1、AND(Logicaland)逻辑逻辑“与与”指令指令2、TEST(Testornon-destructivelogicaland)测试指令测试指令3、OR(Lgicalinclusiveor)逻辑逻辑“或或”指令指令4、XOR(Logicalexclusiveor)逻辑逻辑“异或异或”指令指令5、NOT(Logicalnot)逻辑逻辑“非非”指令指令特点:特点:特点:特点:8088可以对可以对8位,或位,或16位操作数执行逻辑操作。位操作数执行逻辑操作。 逻辑运算是按位操作,操作数应该是位串而不是数。逻辑运算是按位操作

120、,操作数应该是位串而不是数。逻辑运算是按位操作,操作数应该是位串而不是数。逻辑运算是按位操作,操作数应该是位串而不是数。影响条件码:影响条件码:(NOT指令除外,其他指令同)指令除外,其他指令同)CFCF0F=00F=0,A未定义未定义,SFZFPFSFZFPF1 1、ANDAND(Logicaland)Logicaland)逻辑逻辑逻辑逻辑“ “与与与与” ”指令指令指令指令格式:格式:ANDdest,src;B/W,(dest)(dest(src)src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。dest:dest:寄存器、存储

121、器。寄存器、存储器。寄存器、存储器。寄存器、存储器。执行操作:进行执行操作:进行“与与”运算,运算,两位中有一位为两位中有一位为0(或二位都为(或二位都为0),则结),则结果果为为0,否则为,否则为1。操作类型举例:操作类型举例: ANDAL,0FH;寄存器;寄存器立即数立即数ANDCX,DI;寄存器寄存器寄存器寄存器ANDSI,MEM_NAME;寄存器寄存器存储器存储器ANDALPHADI,AX;存储器存储器寄存器寄存器ANDwordptrBXSI,0FFFEH;存储器存储器立即数立即数注意:注意:“ “与与与与” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不

122、能同时为存储器;指令中操作数不能同时为存储器;影响条件码:影响条件码:CF0F=0,A未定义未定义,SFZFPF“与与”指令的用途指令的用途:(1)清清清清CF,CF,自己自己自己自己“ “与与与与” ”自己自己自己自己. .操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0例:例:ANDAL;结果:结果:操作数不变操作数不变操作数不变操作数不变 ,CF=0CF=0。 (2)使使操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与操作数中若干位保持不变,若干位与“1”“1”相与相与相与相与;而而若干位置为若干位置为若干位置为若干位置为“0“

123、0“的场合,若干位与的场合,若干位与的场合,若干位与的场合,若干位与“0”“0”相与相与相与相与。例:例: 若(若(AL)=43 3HANDAL,0F FH;(AL)=03H,(AL)(AL)0303不变不变不变不变;;(AL)(AL)4747=00H,=00H,屏蔽高屏蔽高屏蔽高屏蔽高4 4位位位位。“与与”指令应用举例:指令应用举例:例例1:将英文小写字母:将英文小写字母ASCII转换成大写。转换成大写。小写英文字母小写英文字母ASCII为:为:az61H7AH大写英文字母大写英文字母ASCII为:为:AZ41H5AH程序:程序:MOVAL,zANDAL,0DFDFH;(AL)=5AH例例

124、2:判断键盘按下的字符是不是:判断键盘按下的字符是不是Y?MOVAH,7MOVAH,7INTINT 21H21H ;键入无回显,(键入无回显,(AL)=输入键的字符码输入键的字符码ANDAL,0DFHCMPAL,YJEYESYES:01100001010000011101111161H41HFDH2 2、TESTTEST(Testornon_destructivelogicaland)测试指令测试指令测试指令测试指令格式:格式:TESTdest,src;(;(dest)(src)src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。de

125、st:dest:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。执行操作:执行操作:二个操作数相与的结果不存,置条件码。二个操作数相与的结果不存,置条件码。操作类型举例:操作类型举例:TESTBH,7;寄存器寄存器立即数立即数TESTSI,BP;寄存器;寄存器寄存器寄存器TESTDI,TABLEBX;寄存器寄存器存储器存储器TESTSI,CH;存储器;存储器寄存器寄存器TESTwordptrBXDI,6ACEH;存储器;存储器立即数立即数用途:用途:常常常常用来检测一些条件是否满足用来检测一些条件是否满足用来检测一些条件是否满足用来检测一些条件是否满足,但又不希望改变原有,但又

126、不希望改变原有的操作数的情况下,常在此指令后边加一条的操作数的情况下,常在此指令后边加一条条件转移指令。条件转移指令。例:判断例:判断A单元中数据的奇偶性单元中数据的奇偶性设:设:(A)=0AEH程序:程序:MOVAL,A;(AL)=0AEHTESTAL,01HJZEVEN;结果结果=0为偶数转为偶数转EVEN奇数处理奇数处理EVEN:偶数处理偶数处理检测(检测(AL)的最低位是否为)的最低位是否为0,若为,若为0转转EVEN3 3、OROR(Lgicalinclusiveor)Lgicalinclusiveor)逻辑逻辑逻辑逻辑“ “或或或或” ”指令指令指令指令格式:格式:ORdset,s

127、rc;(;(dset)(dset)(src)dest:dest:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行操作:执行操作:进行按位进行按位“或或”运算运算两位操作数中任一位为两位操作数中任一位为1(或都为(或都为1),), 则该位(结果)则该位(结果)=1,否则为否则为0。操作类型举例:操作类型举例:ORBL,0F6H;寄存器寄存器立即数立即数ORAH,BL;寄存器;寄存器寄存器寄存器ORCL,BETABXDI;寄存器寄存器存储器存储器ORGAMMASI,D

128、X;存储器;存储器寄存器寄存器ORBYTEPTRMEM_BYTE,80H;存储器;存储器立即数立即数注意:注意:“或或或或” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;影响条件码:影响条件码:CF0F=0,A未定义未定义,SFZFPF用途:用途:(1)清)清CF,自己与自己自己与自己自己与自己自己与自己“ “或或或或”, ”,操作数不变,操作数不变,操作数不变,操作数不变,CF=0CF=0例:例:ORAL;(;(AL)不变,)不变,CF=0(2)使某个操作数)使某个操作数若干位保持不变,若干位与若干位保持不变,若干

129、位与若干位保持不变,若干位与若干位保持不变,若干位与“0”“0”或或或或;而若干位置而若干位置而若干位置而若干位置1 1。若干位与。若干位与。若干位与。若干位与“1”“1”或或或或 。(3)将两个操作数信息组合。将两个操作数信息组合。若(若(AL)=03H用用OR指令组合使(指令组合使(AL)=33H=3。ORAL,30H;(;(AL)=33H4 4、XORXOR(Logicalexclusiveor)Logicalexclusiveor)逻辑逻辑逻辑逻辑“ “异或异或异或异或” ”指令指令指令指令格式:格式:XORdset,src;B/W(dset)(dset) (src)dest:dest

130、:寄存器、存储器。寄存器、存储器。寄存器、存储器。寄存器、存储器。src:src:立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。立即数、寄存器、存储器。执行的操作:对指令的两个操作数进行按位执行的操作:对指令的两个操作数进行按位“异或异或”运算。运算。二位不相同时为二位不相同时为二位不相同时为二位不相同时为1,1,相同时为相同时为相同时为相同时为0 0。操作类型举例:操作类型举例:XORDI,23F6HH;寄存器寄存器 立即数立即数XORSI,DX;寄存器;寄存器 寄存器寄存器XOR CL,BUFFER;寄存器寄存器 存储器存储器XOR MEMBX,AX;存储器;存储

131、器 寄存器寄存器XOR byteptrTABLEBPSI,3DH;存储器存储器 立即数立即数注意:注意:“ “或或或或” ”指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;指令中操作数不能同时为存储器;影响条件码:影响条件码:CF0F=0,A未定义未定义,SFZFPF用途:用途:对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与对某些特定位求反,某些特定位与“1”“1” 其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与其余位保持不变,保持不变与“0”“0” 。应用举例:应用举例:例例

132、1:将(将(AL)中的第中的第1、3、5、7位求反位求反0、2、4、6位保持不变。位保持不变。MOVAL,0FHXORAL,0AAH例例2:比较三条(比较三条(AX)清清“0”指令:指令:XORAX,AX;清清AX,清清CF,2个字节,个字节,3个个T。SUBAX,AX;清清AX,清清CF,2个字节,个字节,3个个T。MOVAX,0;清清AX,不影响标志位,不影响标志位,3个字节,个字节,4个个T。XOR清清“0”指令在多字节累加程序中十分有用。指令在多字节累加程序中十分有用。例例3:将存放在将存放在TABLE开始的开始的100个字节的个字节的16进制数进行累加,进制数进行累加,和存于和存于S

133、UM+1、SUM单元。单元。程序:程序:100个字节的个字节的16进制数进制数进行累加。进行累加。LEABX,TABLEMOVCL,100XORAX,AXLOOPER:ADDAL,BXJNCGOONINCAHGOON:INCBXDECCLJNZLOOPERMOVSUM,AXHLT流流程程图图5 5、NOTNOT(Logicalnot)Logicalnot)逻辑逻辑逻辑逻辑“ “非非非非” ”指令指令指令指令格式:格式:NOTdest;B/W指令操作数只有一个指令操作数只有一个,指令指令对操作数按位求反对操作数按位求反对操作数按位求反对操作数按位求反。执行操作:执行操作:字节求反:(字节求反:(

134、dest)0FFH-(dest)字求反:字求反:(dest0FFFFH-(dest)源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。源操作数:寄存器、存储器。不能是立即数。影响标志位:对标志位无影响。影响标志位:对标志位无影响。操作类型举例:操作类型举例:NOTAH;8位寄存器求反位寄存器求反NOTCX;16位寄存器求反位寄存器求反NOTBYTEPTRBP;8位存储器求反位存储器求反NOTWORDPTRCOUNT;16位存储器求反位存储器求反综合举例:综合举例:1使某些位置使某些位置“0”。INAL,61H;(;(AL)=

135、B设备控制寄存器设备控制寄存器想使此位为想使此位为0执行指令:执行指令:ANDALANDAL,0FDH0FDH即可。即可。2.使某些位置使某些位置“1”。INAL,61H;(;(AL)=执行指令:执行指令:ORALORAL,0202想使此位为想使此位为“1”3.使某些位求反:使某些位求反:INAL,61H;(;(AL)=0XORALXORAL,02H02H 0000001014.测试某些位(测奇偶性):测试某些位(测奇偶性):测试测试“奇奇”“偶偶”性。性。见见TEST指令的用途例子。指令的用途例子。逻辑指令应用小结:逻辑指令应用小结:逻辑指令应用小结:逻辑指令应用小结:(1)AND指令用来对

136、指令的指定位清指令用来对指令的指定位清“0”。(2)OR指令常用来对某些位置指令常用来对某些位置1。(3)XOR指令用在程序开头,使某个寄存器清指令用在程序开头,使某个寄存器清“0”。(4)NOT指令对某个数据取反,指令对某个数据取反,+1成补码。成补码。(5)TEST指令用来检测指定位为指令用来检测指定位为1,还是,还是0。(二)移位指令(二)移位指令(二)移位指令(二)移位指令(8088(8088有有有有8 8条移位指令条移位指令条移位指令条移位指令):):1 1、 算逻移位指令算逻移位指令算逻移位指令算逻移位指令(4条条):SHL,SHR,SHL,SHR, SAL,SARSAL,SAR。

137、(1)、)、SHL/SAL(Shiftlogicalleft/shiftarithmeticleft)逻辑左移逻辑左移/算术左移指令算术左移指令(2)、)、SHR(Shiftlogicalright)逻辑右移指令逻辑右移指令(3)、)、SAR(Shiftarithmeticright)算术右移指令算术右移指令2 2、循环移位、循环移位、循环移位、循环移位(4条)条):ROL,ROR,RCL,RCRROL,ROR,RCL,RCR。(1)、)、ROL(Rotateleft)不含不含CF循环左移指令循环左移指令(2)、)、ROR(Rotateright)不含不含CF循环右移指令循环右移指令(3)、)

138、、RCL(Rotateleftthroughcarry)含含CF循环左移指令循环左移指令(4)、)、RCR(Rotaterightthroughcarry)含含CF循环右移指令循环右移指令共同点:共同点: 所有移位指令都可以作所有移位指令都可以作B/W操作。操作。指令中的指令中的dest:dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。cnt:表示移位次数表示移位次数cnt=1,1可写在指令中,不能是可写在指令中,不能是1以外的常数。以外的常数。cnt1,用,用CL存放移位次数存放移位次数,不能是其他寄存器。不能是其他寄存器。如:如:S

139、ALAX,1MOVCL,4SALAX,CL利用移位指令编制利用移位指令编制*,/程序,程序,执行时间比直接用执行时间比直接用*,/指令快,指令快,速度可提高速度可提高5-6倍。倍。条件码设置:条件码设置:算逻移位移位指令算逻移位移位指令:执行多次移位指令后对执行多次移位指令后对CF、OF的影响的影响:CF=从目标操作数移出的最后一位;从目标操作数移出的最后一位;OF不定。不定。执行一次移位指令指令后对执行一次移位指令指令后对CF、OF的影响的影响:OF用于判断移位后最高有效位是否发生变化用于判断移位后最高有效位是否发生变化.最高位与最高位与CF不等,不等,则:则:OF=1,否则:无变化时,否则

140、:无变化时,OF=0CF根据各条指令的规定设置。根据各条指令的规定设置。SF、ZF、PF,AF无定义。无定义。循环移位指令:循环移位指令:SF、ZF、PF、AF不影响。不影响。OF、CF影响情况在指令中讲影响情况在指令中讲:ROLROL、RCLRCL影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同 ;RORROR、RCRRCR影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同 。1 1、 算逻移位指令算逻移位指令算逻移位指令算逻移位指令(4条条):SHL,SHR,SHL,SHR, SAL,SARSAL,SAR(1)、)、SHL/

141、SAL(Shiftlogicalleft/shiftarithmeticleft)逻辑左移逻辑左移/算术左移指令算术左移指令格式:格式:SHLdest,cnt;逻辑左移指令;逻辑左移指令,B/WSALdest,cnt;算术左移指令;算术左移指令,B/Wdest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。cnt:表示移位次数表示移位次数cnt=1,1可写在指令中。可写在指令中。cnt1,用,用CL存放移位次数存放移位次数。执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。SHL/SAL指令操作示意图如下图所示:指令操作示意图如下图所示:指令格式举例:指令格式举例:SHLAH

142、,1SALSI,CLSALWORDPTRBX+5,1SHLBYTEPTR,CL0CFdest(2)、)、SHR(Shiftlogicalright)逻辑右移指令逻辑右移指令格式:格式:SHRdest,cnt;逻辑右移指令;逻辑右移指令,B/W执行操作:执行操作:相当于无符号数的相当于无符号数的2功能。功能。SHR指令操作示意图如下图所示:指令操作示意图如下图所示:dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SHRBL,1SHRAX,CLSHRBYTEPTRDI+BP,1SHRWORDPTRBLOCK,CLdestCF0(3 3)、)、)、)、SARSA

143、R(Shiftarithmeticright)算术右移指令算术右移指令算术右移指令算术右移指令格式:格式:SARdest,cnt;算术右移指令;算术右移指令,B/W执行操作:执行操作:相当于带符号数的相当于带符号数的2功能功能,对负数向下舍入对负数向下舍入IDIV指令对负数向上舍入。指令对负数向上舍入。(下页解释)下页解释)SAR指令操作示意图如下图所示指令操作示意图如下图所示dsetdest:dest:寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。寄存器、存储器寻址方式。指令格式举例:指令格式举例:SARAL,1SHRDL,CLSHRWORDPTRTABLESI,1

144、SHRBYTEPTRSTATUS,CL用用SAR指令与用指令与用IDIV指令做除法的区别:指令做除法的区别:用用SAR指令做除法指令做除法(对负数向下舍入)(对负数向下舍入):MOVAX,81H;(AX)=-127SARAX,1;(AX)=-64用用IDIV指令做除法指令做除法(IDIV指令对负数向上舍入)指令对负数向上舍入):MOVAX,81H;(AX)=-127MOVCL,2IDIVCL;(AL)=-63,(AH)=-1应用举例:应用举例:(BX)=84F0H(1)若若(BX)无符号数,求(无符号数,求(BX)/2SHRBX,1;(BX)=4278CF=0,OF=1,SF=0,ZF=0(2

145、)若(若(BX)带符号数,求()带符号数,求(BX)/4MOVCL,02H 或或SARBX,1SARBX,CLSARBX,1;CF=0,OF无意义,无意义,SF=1,ZF=0(3)每四位一组存入堆栈(字操作)每四位一组存入堆栈(字操作)(BX)=84F0H(SS)=3000H(SP)=1000HMOVCH,4MOVCL,4NE:ROLBX,CLMOVAX,BX ANDAX,000FHPUSHAXDECCHJNZ,NE(CH)=4ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=4F08H(AX)=4F08H(AX)=0008H(30FFEH)=0008H(

146、CH)=3ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=F084H(AX)=F084H(AX)=0004H(30FFCH)=0004H(CH)=2ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=084FH(AX)=084FH(AX)=000FH(30FF8H)=000FH(CH)=1ROL BX,CLMOV AX,BX AND AX,000FH PUSH AX(BX)=84F0H(AX)=84F0H(AX)=0000H(30FF4H)=0000H2 2、循环移位、循环移位、循环移位、循环移位(4条)条):ROL,

147、ROR,RCL,RCRROL,ROR,RCL,RCR。共同点:共同点:ROLROL、RORROR不含不含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动8 8次后还原次后还原次后还原次后还原。RCLRCL、RCRRCR含含CF循环移位指令,循环移位指令,操作数移动操作数移动操作数移动操作数移动9 9次后还原次后还原次后还原次后还原。影响标志影响标志OF、CFROL、RCL影响标志影响标志OF、CF情况相同情况相同;ROR、RCR影响标志影响标志OF、CF情况相同情况相同。SF、ZF、PF、AF不影响。不影响。(1 1)、)、)、)、ROLROL(Rotateleft)不

148、含不含不含不含CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式:ROLdest,cnt;不含;不含CF循环左移指令循环左移指令,B/W执行操作:执行操作:ROL指令操作示意图如下图所示指令操作示意图如下图所示移动移动移动移动8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:ROLBH,1ROLDX,CLROLWORDPTRTABLEDI,1ROLBYTEPTRALPHA,CL影响标志影响标志OF、CF情况:情况:左循环移动左循环移动左循环移动左循环移动1 1次后次后次后次后:移位后,最高有效位(符号位)是否发生变化:

149、移位后,最高有效位(符号位)是否发生变化:如果移位后,如果移位后,最高有效位与最高有效位与最高有效位与最高有效位与CFCF不等不等不等不等 则:则:则:则:OF=1,OF=1,否则:(无变化时)否则:(无变化时)否则:(无变化时)否则:(无变化时)OF=0OF=0CF根据各条指令的规定设置。根据各条指令的规定设置。左循环移动多次后:左循环移动多次后:左循环移动多次后:左循环移动多次后:OF值不定。值不定。CF=从目标操作数移出的最后一位。从目标操作数移出的最后一位。SF、ZF、PF、AF不影响。不影响。(2 2)、)、)、)、RORROR(Rotateright)不含不含不含不含CFCF循环右

150、移指令循环右移指令循环右移指令循环右移指令格式:格式:RORdest,cnt;不含;不含CF循环右移指令循环右移指令,B/W执行操作:执行操作:ROR指令操作示意图如下图所示指令操作示意图如下图所示右移右移右移右移8 8次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:RORCX,1ROLBH,CLROLBYTEPTRBETA,1ROLWORDPTRCOUNT,CL影响标志影响标志OF、CF情况:情况:右循环移动右循环移动右循环移动右循环移动1 1次后:次后:次后:次后:如果移位后,如果移位后,最高位最高位最高位最高位 次高位次高位次高位次

151、高位,则则则则 :OF=1;OF=1;否则否则否则否则 :OF=0OF=0。CF根据各条指令的规定设置。根据各条指令的规定设置。右循环移动多次后右循环移动多次后右循环移动多次后右循环移动多次后:OF值不定。值不定。CF=从目标操作数移出的最后一位。从目标操作数移出的最后一位。SF、ZF、PF、AF不影响。不影响。(3 3)、)、)、)、RCLRCL(Rotateleftthroughcarry)含含含含CFCF循环左移指令循环左移指令循环左移指令循环左移指令格式:格式:RCRdest,cnt;含;含CF循环左移指令循环左移指令,B/W执行操作:执行操作:RCL指令操作示意图如下图所示指令操作示

152、意图如下图所示左移左移左移左移9 9次后操作数还原次后操作数还原次后操作数还原次后操作数还原。CFdest指令格式举例:指令格式举例:RCLBX,1RCLDL,CLRCLBYTEPTRARRAYDI,1RCLWORDPTRSI+BP,CL影响标志:影响标志:影响标志:影响标志:RCLRCL与与与与ROLROL影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同(4 4)、)、)、)、RCRRCR(Rotaterightthroughcarry)含含含含CFCF循环右移指令循环右移指令循环右移指令循环右移指令格式:格式:RCRdest,cnt;含;含CF循环左移指令

153、循环左移指令,B/W执行操作:执行操作:RCR指令操作示意图如下图所示指令操作示意图如下图所示右移右移右移右移9 9次后操作数还原。次后操作数还原。次后操作数还原。次后操作数还原。CFdest指令格式举例:指令格式举例:RCRDI,1RCRSI,CLRCRWORDPTRSI+BX+3,1RCLBYTEPTRPORT,CL影响标志:影响标志:影响标志:影响标志:RCRRCR与与与与RORROR影响标志影响标志影响标志影响标志OFOF、CFCF情况相同情况相同情况相同情况相同带进位循环左移移9次还原带进位循环左移移9次还原循环右移(不带CF) 移8次还原循环左移(不带CF) 移8次还原算术右移(带

154、符号数2)逻辑右移(无 符号数2)执行操作名称指令格式SHLoprd,1CL逻辑左移逻辑左移(无符号数(无符号数*2)0CF 0CF SALoprd,1CL算术左移算术左移CF0 SHRoprd,1CLCF SARoprd,1CLCF ROLoprd,1CLCF RORoprd,1CLCF RCLoprd,11CL1CF RCRoprd,11CL1小结:小结:小结:小结:循环移位指令循环移位指令循环移位指令循环移位指令(Rotate)与移位指令与移位指令与移位指令与移位指令(Shift)不同点不同点不同点不同点:循环移位指令移位后,操作数中原来各数位的信息不会循环移位指令移位后,操作数中原来各

155、数位的信息不会丢失,这是移动了位置,必要时可以恢复。丢失,这是移动了位置,必要时可以恢复。循环移位指令可以对操作数进行测试。循环移位指令可以对操作数进行测试。例:测试例:测试(AL)5=?0MOVCL,3ROLAL,CLROLAL,CLJNCZEROZERO:利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元利用带进位循环移位指令将两个寄存器或存储器单元组合起来一起移位组合起来一起移位组合起来一起移位组合起来一起移位。例:例:将将DX、AX组合起来构成组合起来构成32位寄存器向左移一位。位寄存器向左移一位。

156、如下图所示:如下图所示:程序:程序:SHLAX,1RCLDX,132位寄存器向左移一位位寄存器向左移一位四、串操作指令四、串操作指令(Stringmanipulation)“串串”就是内存中一段地址相连的字节或字。就是内存中一段地址相连的字节或字。串操作串操作串操作串操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作对串中各项进行操作,也叫数据块操作。8088有有5种基本操作:种基本操作:1、MOVS(Movestring)串传送指令串传送指令2、CMPS(Comparestring)串比较指令串比较指令3、SCAS(Scanstring

157、)串扫描指令串扫描指令4、LODS(Loadfromstring)从串取指令从串取指令5、STOS(Storeintostring)存入串指令存入串指令共同点:共同点:共同点:共同点:可以只有源操作数,可以只有目标操作数,可能二者都有。可以只有源操作数,可以只有目标操作数,可能二者都有。源操作数用源操作数用SI寻址,隐含寻址,隐含DS值为段地址,可以用段跨越前缀指定其它段。值为段地址,可以用段跨越前缀指定其它段。目标操作数用目标操作数用DI寻址,隐含寻址,隐含ES为段地址。为段地址。每次操作对每次操作对SI、DI调整:调整:DF=1DF=1,DIDI、SISI自动自动自动自动-1(-1(字节)

158、或字节)或字节)或字节)或-2-2(字);(字);(字);(字);DF=0DF=0,DIDI、SISI自动自动自动自动+1+1(字节)或(字节)或(字节)或(字节)或+2+2(字)。(字)。(字)。(字)。与上述指令基本配合使用前缀有:与上述指令基本配合使用前缀有:REPREP(Repeat)重复。重复。重复。重复。REPE/REPZREPE/REPZ(Repeatwhileequal/zero)相等相等相等相等/ /为零则重复。为零则重复。为零则重复。为零则重复。REPNE/REPNZREPNE/REPNZ(Repeatwhilenotequal/notzero)不相等不相等不相等不相等/

159、/不为零则重复不为零则重复不为零则重复不为零则重复。下面分二种情况来讨论:下面分二种情况来讨论:( (一一一一)与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令REPREP重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止( (二二二二) )与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的联合工作的联合工作的CMPSCMPS和和和和SCASSCAS指令指令指令指令REPE/REPZREPE/R

160、EPZ当相等当相等当相等当相等/ /为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作REPNE/REPNZREPNE/REPNZ当不相等当不相等当不相等当不相等/ /不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作( (一一一一)与与与与REPREP相配合工作的相配合工作的相配合工作的相配合工作的MOVSMOVS、STOSSTOS、LODSLODS指令指令指令指令REPREP重复串操作直到(重复串操作直到(重复串操作直到(重复串操作直到(CXCX)=0=0为止为止为止为止格式:格式:REPStringPrimitive串指令串指令StringPrimit

161、ive可为:可为:MOVS、STOS、LODS。1.MOVS(MoveString)串传送串传送2.LODS(LoadfromString)从串取指令从串取指令3.STOS(StoreintoString)存入串指令存入串指令REPREP重复串操作执行过程重复串操作执行过程重复串操作执行过程重复串操作执行过程: :(1)当当(CX)=0,结束,结束REP,执行执行REP后的下一条指令。后的下一条指令。(2)当当(CX)0,(CX)(CX)-1,(3)执行执行REP后的串指令,后的串指令,(4)重复重复(1)(3)。)。REP执行流程图执行流程图1. 1.MOVSMOVS(MovestringM

162、ovestring)串传送)串传送)串传送)串传送2. 2.串传送有串传送有串传送有串传送有3 3种格式:种格式:种格式:种格式:(1) MOVSdest,src;(;(ES):():(DI)(DS):():(SI)(2)MOVSB(字节)(字节);(SI)(SI)1,(,(DI)(DI)1(3)MOVSW(字);(字);(SI)(SI)2,(,(DI)(DI)2当方向标志当方向标志当方向标志当方向标志CLD,DF=0CLD,DF=0时时时时用用用用“+”“+”STD,DF=1STD,DF=1时时时时用用用用“-”“-”该指令不影响条件码该指令不影响条件码。*如:如:MOVSES:BYTEPT

163、RDI,DS:SI*MOVMOV单指令不能完成单指令不能完成存储单元之间的数据传送存储单元之间的数据传送存储单元之间的数据传送存储单元之间的数据传送;MOVSMOVS指令就是为解决指令就是为解决指令就是为解决指令就是为解决 存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。存储单元之间数据传送而设置的。例:将内存的数据段中以例:将内存的数据段中以AREA1为首地址的为首地址的100个数据,传个数据,传送到附加段中的送到附加段中的AREA2为首地址的区域。为首地址的区域。用用MOVS串操作指令编程:串操作指令编程:MOVAX,SEGAREA1MOVDS,A

164、XMOVAX,SEGAREA2MOVES,AXMOVSIMOVSI,OFFSETAREA1OFFSETAREA1MOVDIMOVDI,OFFSETAREA2OFFSETAREA2MOVCXMOVCX,100100CLDCLD;DF=0,增址传送,增址传送LOOP1:MOVSESMOVSES:BYTEPTRDI,DSBYTEPTRDI,DS:SISI应用应用应用应用MOVMOV指令编程指令编程指令编程指令编程:MOVAX,SEGAREA1MOVDS,AXMOVAX,SEGAREA2MOVES,AXMOVSIMOVSI,OFFSETAREA1OFFSETAREA1;将;将;将;将ARE1ARE1偏

165、移地址偏移地址偏移地址偏移地址SISI MOVDIMOVDI,OFFSETAREA2OFFSETAREA2 MOVCXMOVCX,100100LOOP1:MOVALMOVAL,SISI ;(AL)(DS):():(SI)MOVESMOVES:DIDI,ALAL;(;(ES):():(DI)(AL)INCSIINCDIDECCXJNELOOP1归纳在执行归纳在执行MOVS指令时,应该先做好以下准备工作:指令时,应该先做好以下准备工作:(1)数据段中数据段中源串首地址源串首地址源串首地址源串首地址(如反向传送到末地址)(如反向传送到末地址)存入存入存入存入SISI寄存器中寄存器中寄存器中寄存器中。

166、(2)附加段中附加段中目的串首地址目的串首地址目的串首地址目的串首地址(或反向传送末地址)(或反向传送末地址)存入存入存入存入DIDI寄存器中寄存器中寄存器中寄存器中。(3)数据串长度存入数据串长度存入数据串长度存入数据串长度存入CXCX寄存器寄存器寄存器寄存器。(4)建立方向标志建立方向标志建立方向标志建立方向标志建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令:建立方向标志介绍两条指令: CLD(cleardirectionflag)功能:功能:DF=0DF=0,执行串处理指令时,执行串处理指令时可以使地址可以使地址自动自动自动自动+1+1或或或或+2+2。 S

167、TD(setdirectionflag)功能:功能:DF=1DF=1,执行串处理指令时可以使地址,执行串处理指令时可以使地址自动自动自动自动-1-1或或或或-2-2。2. 2.LODS(Loadfromstring)LODS(Loadfromstring)从串取指令从串取指令从串取指令从串取指令从串取指令有从串取指令有从串取指令有从串取指令有3 3种格式:种格式:种格式:种格式:(1)LODSsrc;(字节)(字节)(AL)(DS):(SI),(SI)(SI)1(2)(字(字)(AX)(DS):(SI),(SI)(SI)2(2)LODSB(字节)(字节);(AL)(DS):(SI),(SI)(

168、SI)1(3)LODSW(字)(字);(AX)(DS):(SI),(SI)(SI)2(4)功能:该指令把由功能:该指令把由(SISI)指定的数据段中某单元内容)指定的数据段中某单元内容)指定的数据段中某单元内容)指定的数据段中某单元内容 (AL)(AL)(5)(5)或或或或 (AX)(AX)中中中中。DF=0,(,(SI)(SI)+1或或+2DF=1,(,(SI)(SI)-1或或-2LODSLODS应用注意:应用注意:应用注意:应用注意:(1)指令允许用段跨越前缀来指定非数据段的存储区。指令允许用段跨越前缀来指定非数据段的存储区。(2)该指令不影响条件码。该指令不影响条件码。(3)一般说来,一

169、般说来,(4)它不与它不与REP联用联用,每重复一次,累加器的内容就改变一次。每重复一次,累加器的内容就改变一次。(AL)中只能保持最后一个元素。中只能保持最后一个元素。有时有时缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令缓冲区中的一串字符需要多次取出测试时可用本指令。适用于在一个循环中,用基本串操作指令构成复杂串操作适用于在一个循环中,用基本串操作指令构成复杂串操作时很有用。时很有用。3STOS3STOS(StoreintostringStoreintostring)存入串指令存入串指令存入串指令存

170、入串指令将将将将(AL)(AL)或(或(或(或(AX)AX) (ES):(DI)(ES):(DI),(,(,(,(DI)1DI)1或或或或22(DI)(DI)存入串指令有存入串指令有存入串指令有存入串指令有3 3种格式:种格式:种格式:种格式:(1)STOSdest;(字节)(字节)(ES):(DI)(AL),(DI)(DI)1(2)(字(字)(ES):(DI)(AX),(DI)(DI)2(3)(2)STOSB(字节)(字节);(ES):(DI)(AL),(DI)(DI)1(4)(3)STOSW(字)(字);(ES):(DI)(AX),(DI)(DI)2用途:用途:与与REP联用时,(联用时,

171、(CX)缓冲区长度。用来建立一串相同的值。缓冲区长度。用来建立一串相同的值。例:在附加段例:在附加段STORE开始存开始存5个空格个空格程序:程序:MOVAL,20H;_(AL)MOVCX,5MOVDI,offsetSTORECLDREPSTOSB;(ES):(DI)(AL)(DI)(DI)+1学习学习学习学习LODSLODS,STOSSTOS指令应用指令应用指令应用指令应用例:内存中有一个首地址为例:内存中有一个首地址为BLOCK补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块补码表示的有符号数的数据块。要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,

172、分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区要求将正、负数分开,分别存于二个缓冲区: :存放正数的缓冲区首址为存放正数的缓冲区首址为PUOS-DATA,存放负数的缓冲区首址为存放负数的缓冲区首址为MINUS-DATA。设:设:源数据块用源数据块用SI寻址,寻址,正数的目的区用正数的目的区用DI寻址,寻址,负数的目的区用负数的目的区用BX寻址。寻址。循环次数循环次数(CX)。传送过程:传送过程:传送过程:传送过程:用用LODS指令把源数据取入(指令把源数据取入(AL)中,)中,检查其符号,确定正、负,检查其符号,确定正、负,若为正数用若为正数用STOS指令送至正数缓冲区,指令送至正数

173、缓冲区,若是负数,把(若是负数,把(DI)与()与(BX)交换,仍使用)交换,仍使用STOS传送,传送,传送传送完后再完后再将(将(DI)与()与(BX)交换,恢复原值。)交换,恢复原值。程序:程序:START: MOVSI,OFFSETBLOCKMOVDI,OFFSETPUOS-DATA;正数缓冲区正数缓冲区MOVBX,OFFSETMINUS-DATA ;负数缓冲区;负数缓冲区MOVCX,COUNTCLDCLDGOON:LODSBLODSBTESTALTESTAL,80H80HJNZMINS;若负数转;若负数转MINSSTOSBSTOSB;正数;正数,(,(DI)(AL),(),(DI)(D

174、I)+1JMPAGAINMINS:XCHGBX,DISTOSBSTOSB ;负数;负数,(,(DI)(AL),(),(DI)(DI)+1XCHGBX,DIAGAIN:DECCXJNZ,GOONHLT( (二二二二) )与与与与REPE/REPZREPE/REPZ和和和和REPNE/REPNZREPNE/REPNZ联合工作的联合工作的联合工作的联合工作的CMPSCMPS和和和和SCASSCAS指令指令指令指令REPE/REPZREPE/REPZ当相等当相等当相等当相等/ /为零时重复串操作为零时重复串操作为零时重复串操作为零时重复串操作格式:格式:REPE(或(或REPZ)stringprimi

175、tive当相等重复前缀当相等重复前缀当相等重复前缀当相等重复前缀REPZREPZStringprimitive可为可为:CMPS,SCASCMPS,SCAS1、CMPS(Comparestring)串比较指令串比较指令2、SCAS(Scanstring)串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:(1)当当(CX)=0,结束结束REPZ,(2)执行执行REPZ下一条指令;下一条指令;(2)当当(CX)0,将,将CX的内容减的内容减1,执行执行REPZ后的串指令;后的串指令;(3)当当ZF=1,返回返回(1);(4)当当ZF1,则结束则结束REPZ执行执行REPZ下一条指令。下一

176、条指令。注意:注意:注意:注意:(CX)(CX)减减减减1 1操作不影响标志操作不影响标志操作不影响标志操作不影响标志ZFZF标志由串操作决定标志由串操作决定标志由串操作决定标志由串操作决定当当当当(CX)=0(CX)=0或或或或ZF=0ZF=0时退出循环时退出循环时退出循环时退出循环REPZ执行流程执行流程REPNE/REPNZREPNE/REPNZ当不相等当不相等当不相等当不相等/ /不为零时重复串操作不为零时重复串操作不为零时重复串操作不为零时重复串操作格式:格式:REPNE(或(或REPNZ)stringprimitive当不相等重复前缀当不相等重复前缀当不相等重复前缀当不相等重复前缀

177、REPNZREPNZstringprimitiveStringprimitive可为可为:CMPS,SCASCMPS,SCAS1、CMPS(Comparestring)串比较指令串比较指令2、SCAS(Scanstring)串扫描指令,搜索指令串扫描指令,搜索指令执行过程:执行过程:(1)当当(CX)=0,结束结束REPNZ,(2)执行执行REPNZ下一条指令。下一条指令。(2)当当(CX)0,将,将CX的内容减的内容减1,执行执行REPNZ后的串指令。后的串指令。当当ZF=0,返回返回(1);当当ZF0,则结束则结束REPNZ,(4)执行执行REPNZ下一条指令。下一条指令。注意:注意:(C

178、X)(CX)减减减减1 1操作不影响标志操作不影响标志操作不影响标志操作不影响标志ZFZF标志由串操作决定标志由串操作决定标志由串操作决定标志由串操作决定 当当当当(CX)=0(CX)=0或或或或ZF=1ZF=1时退出循环时退出循环时退出循环时退出循环REPNZ执行流程执行流程1 1、CMPSCMPS(Comparestring)Comparestring)串比较指令串比较指令串比较指令串比较指令(SI)作为源串地址,(作为源串地址,(DI)目的串地址目的串地址串比较指令串比较指令串比较指令串比较指令有有有有3 3种格式:种格式:种格式:种格式:(1) CMPSdest,src;(ES):(D

179、I)-(DS):(SI),结果不存,置标志结果不存,置标志结果不存,置标志结果不存,置标志(2)CMPSB(字节)(字节);(SI)(SI)1,(DI)(DI)1(3)CMPSW(字);(字);(SI)(SI)2,(DI)(DI)2执行操作:执行操作:(ES):(DI)-(DS):(SI),结果不存,置标志。结果不存,置标志。字节操作:字节操作:(SI)(SI)1,(DI)(DI)1字操作:字操作:(SI)(SI)2,(DI)(DI)2注意:注意:注意:注意:两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响

180、操作数。其它操作规定与其它操作规定与其它操作规定与其它操作规定与MOVSMOVS同。同。同。同。学习学习REPZCMPSB指令指令例:利用例:利用CMPS指令对指令对STRING1和和STRING2二个字符串进行二个字符串进行比较,相同在比较,相同在RESULT单元送单元送00H,不同送,不同送0FFH。MOVSI,OFFSETSTRING1MOVDI,OFFSETSTRING2MOVCX,COUNTCLDREPZCMPSBJNZUNMAT;若串不同,在;若串不同,在RESUL单元中置单元中置0FFHMOVAL,0;若串相等,在;若串相等,在RESULT单元中置单元中置00HJMPOULPTU

181、NMAT:MOVAL,0FFHOUTPTOUTPT:MOVRESULTMOVRESULT,ALALHLTHLT2 2、SCASSCAS(Scanstring)串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令串扫描指令,搜索指令(DIDI)字符串起始地址,(字符串起始地址,(字符串起始地址,(字符串起始地址,(AL)AL)或(或(或(或(AXAX) 关键字关键字关键字关键字 串串串串扫描扫描扫描扫描指令指令指令指令有有有有3 3种格式种格式种格式种格式:格式:格式:SCASdestSCASB(字节);(字节);(AL)-(ES):():(DI),(),(DI)(DI)1SCASW(字

182、);(字);(AX)-(ES):():(DI),(),(DI)(DI)2注意:注意:注意:注意:(AL)或()或(AX)-目的串目的串两数相减,只影响标志,不影响操作数。两数相减,只影响标志,不影响操作数。其它特性与其它特性与MOVS同。同。REPNESCASBREPNESCASB指令应用。指令应用。指令应用。指令应用。例:要搜索的关键字例:要搜索的关键字放在放在(AL)或或(AX)中,搜索某一数据块或字符串中有无中,搜索某一数据块或字符串中有无关关键字,键字,若有,把搜索次数记下来,且记录关键字地址若有,把搜索次数记下来,且记录关键字地址若有,把搜索次数记下来,且记录关键字地址若有,把搜索次

183、数记下来,且记录关键字地址;若次数为若次数为若次数为若次数为0 0,表示,表示,表示,表示没有要搜索的关键字。没有要搜索的关键字。没有要搜索的关键字。没有要搜索的关键字。MOVDI,0FFSETBLOCK;设置数据块地址指针;设置数据块地址指针MOVCX,COUNT;设置数据块长度;设置数据块长度MOVAL,CHARCHAR;关键字送入关键字送入AL或或AXREPNESCASBREPNESCASB;(;(CX)0,Z=0继续继续SCASBJZFOUNDMOVDI,0JMPDONEFOUND:DECDIMOVPOINTRMOVPOINTR,DIDIMOVBXMOVBX,OFFSETBLOCKOF

184、FSETBLOCKSUBBXSUBBX,DIDI MOVDIMOVDI,BXBX;把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址把搜索次数记下来,且记录关键字地址DONE:HLT应用举例:应用举例:例:一个数据块由大小写英文字母、数字、其他符号组成,例:一个数据块由大小写英文字母、数字、其他符号组成,用用CR(ASCII码码0DH)结束。数据块首地址为结束。数据块首地址为BLOCK1。将其传送到将其传送到BLOCK2为首地址的内存区,并为首地址的内存区,并将英文中小将英文中小将英文中小将英文中小写英文字母写英文字母写英文字母写英文字母(a

185、z)(az)转换成大写英文字母转换成大写英文字母转换成大写英文字母转换成大写英文字母(AZ),(AZ),其余不变其余不变其余不变其余不变。分析:分析:大小写英文字母中相应大小写英文字母中相应ASCII码的关系:码的关系:az相应相应ASCII码为:码为:61H7AHAZ相应相应ASCII码为:码为:41H5AH英文中小写英文字母英文中小写英文字母英文中小写英文字母英文中小写英文字母(az)(az)转换成大写英文字母转换成大写英文字母转换成大写英文字母转换成大写英文字母(AZ)(AZ):只要将小写的只要将小写的只要将小写的只要将小写的ASCIIASCII码减去码减去码减去码减去20H20H即可。

186、即可。即可。即可。程序和流程图如下:程序和流程图如下:程序程序:LEASI,BLOCK1LEADI,BLOCK2CLDNEXT: LODSBCMPAL,0DH,0DHJZDONECMPAL,61H61HJCOKCMPAL,7BH7BHJNCOKSUBAL,20HSUBAL,20HOK:STOSBSTOSBJMPNEXTDONE: HLT流程图流程图小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针小结:串操作指令重复前缀,操作数,地址指针指令重复前缀操作数地址指针寄存器MOVSREPREP源,目标(DS): (SI)

187、, (ES): (DI)CMPSREPE/REPNEREPE/REPNE源,目标(DS): (SI) ,(ES): (DI)SCASREPE/REPNEREPE/REPNE目标(ES): (DI)LODS无无源(DS): (SI)STOSREPREP目标(ES): (DI)五控制传送指令五控制传送指令五控制传送指令五控制传送指令(Controltransferinstructions)(一)、(一)、控制传送指令概述控制传送指令概述控制传送指令概述控制传送指令概述控制传送指令包括四种:控制传送指令包括四种:控制传送指令包括四种:控制传送指令包括四种:转移指令,循环控制指令,过程调用指令,中断指

188、令。转移指令,循环控制指令,过程调用指令,中断指令。转移指令,循环控制指令,过程调用指令,中断指令。转移指令,循环控制指令,过程调用指令,中断指令。1 1、转移指令、转移指令、转移指令、转移指令转移指令包括两种:转移指令包括两种:转移指令包括两种:转移指令包括两种:(1)(1)、JMP(Jump)JMP(Jump)无条件转移指令无条件转移指令无条件转移指令无条件转移指令(2)(2)、JccJcc条件转移指令条件转移指令条件转移指令条件转移指令(1)(1)、JMP(Jump)JMP(Jump)无条件转移指令无条件转移指令无条件转移指令无条件转移指令转移分成两类:段内或段间转移。转移分成两类:段内

189、或段间转移。无条件转移指令有五种格式:无条件转移指令有五种格式:段内直接短转移段内直接短转移段内直接近转移段内直接近转移段内间接转移段内间接转移段间直接远转移段间直接远转移段间间接转移段间间接转移JMPJMP指令的操作:指令的操作:指令的操作:指令的操作:无条件地将控制转移到指令中规定的目的地。无条件地将控制转移到指令中规定的目的地。目标地址可以是:直接方式目标地址可以是:直接方式/间接方式给出。间接方式给出。JMP指令不影响标志位。指令不影响标志位。(2)(2)、JccJcc条件转移指令条件转移指令条件转移指令条件转移指令汇编程序设计中常利用条件转移指令来实现分支。汇编程序设计中常利用条件转

190、移指令来实现分支。“cc”“cc”表示条件。表示条件。表示条件。表示条件。操作数必须是短标号。操作数必须是短标号。转移范围为:转移范围为:转移范围为:转移范围为:128128127127具体条件转移指令分四种情况讨论:具体条件转移指令分四种情况讨论:具体条件转移指令分四种情况讨论:具体条件转移指令分四种情况讨论:根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移JZ(JE)/JNZ(JNE),),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO),),JB(JNAE、JC)/JNB(JAE、JNC),),根据两个无

191、符号数比较结果转移根据两个无符号数比较结果转移根据两个无符号数比较结果转移根据两个无符号数比较结果转移JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA) 比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)测试测试测试测试CXCX的值为零转移的值为零转移的值为零转移的值为零转移JCXZ2 2、 过程调用指令过程调用指令过程调用指令过程调用指令如果有一些程序段在不同地方反复出现,可以将这些程如果

192、有一些程序段在不同地方反复出现,可以将这些程序段设计成为过程(子程序)供调用。过程结束,返回调用处。序段设计成为过程(子程序)供调用。过程结束,返回调用处。过程调用指令包括:过程调用指令包括:过程调用指令包括:过程调用指令包括:过程调用指令和返回指令过程调用指令和返回指令(1)、CALL(Callaprocedure)调用调用 CALL调用指令调用指令段内直接调用段内直接调用段间直接调用段间直接调用段内间接调用段内间接调用段间间接调用段间间接调用(2)、RET(Returefromprocedure)返回返回 RET返回指令返回指令段内返回段内返回段间返回段间返回段内带立即数返回段内带立即数返

193、回段间带立即数返回段间带立即数返回3 3、循环控制指令、循环控制指令、循环控制指令、循环控制指令循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令用于使一些程序段反复执行形成循环程序。循环控制指令有三种:循环控制指令有三种:(1)、LOOP(Loop)循环指令循环指令(2)、LOOPE/LOOPZ(Loopifequal/Loopifzero)当相等当相等/为为“0”循环循环(3)、LOOPNE/LOOPNZ(Loopifnotequal/Loopifnotzero)当不相等当不相等/不为不为“0”循环循环4 4、中断指令、中断指令、中断指令、中断指令8086/8088CPU可以在

194、程序中安排一条中断指令引起中断可以在程序中安排一条中断指令引起中断过程,这种中断称为软中断。过程,这种中断称为软中断。8086/8088CPU8086/8088CPU共有三条中断指令:共有三条中断指令:共有三条中断指令:共有三条中断指令:(1)、INT(Interrupt)(2)、INTO(Interruptifoverflow)(3)、IRET(InterruptReturn) 指令类型指令类型助记符助记符无条件转移无条件转移JMPJMP条件转移条件转移JE/JZ, JNE/JNZ, JS, JNS, JP/JPE, JNP /JPO,JO, JNO, JE/JZ, JNE/JNZ, JS,

195、 JNS, JP/JPE, JNP /JPO,JO, JNO, JC, JNC, JB/JNAE, JAE/JNB, JA/JNBE, JC, JNC, JB/JNAE, JAE/JNB, JA/JNBE, JBE/JNA,JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG ,JCXZJBE/JNA,JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG ,JCXZ循环控制循环控制LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZLOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ过程调用过程调用CALL, RETCALL, RET中断

196、指令中断指令INT, INTO, IRETINT, INTO, IRET归结控制转移指令分类归结控制转移指令分类归结控制转移指令分类归结控制转移指令分类( (二)控制传送指令二)控制传送指令二)控制传送指令二)控制传送指令(Controltransferinstructions)1 1、转移指令、转移指令、转移指令、转移指令转移转移指令指令指令指令将程序控制从一处转换到另一处的最直接方法。将程序控制从一处转换到另一处的最直接方法。在在CPU内部,转移是通过将目标地址传送给内部,转移是通过将目标地址传送给IP来实现的。来实现的。注意:注意:注意:注意:CSCS段地址段地址段地址段地址 转移地址转

197、移地址转移地址转移地址IPIP偏移量偏移量偏移量偏移量调用地址寻址调用地址寻址调用地址寻址调用地址寻址先介召控制和非控制转移指令的概念先介召控制和非控制转移指令的概念非控制转移指令非控制转移指令:指令本身对指令本身对CS和和IP均无操作,形成顺序执行结构。均无操作,形成顺序执行结构。顺序执行结构:顺序执行结构:顺序存放,顺序执行顺序存放,顺序执行控制转移指令控制转移指令:以以CS和和IP为主要操作对象,为主要操作对象, 改变改变CS和和IP寄存器的值,寄存器的值,就改变了程序执行的流程。就改变了程序执行的流程。 程序是指令的集合程序是指令的集合 指令在内存中顺序存放指令在内存中顺序存放在在80

198、86/8088中,指令的地址固定由中,指令的地址固定由CS和和IP两个寄存器决定。两个寄存器决定。CS和和IP两寄存器的内容决定了程序的流程两寄存器的内容决定了程序的流程,改变改变改变改变CSCS和和和和IPIP寄存器的值,寄存器的值,寄存器的值,寄存器的值, 就改变了程序执行的流程。就改变了程序执行的流程。就改变了程序执行的流程。就改变了程序执行的流程。8086/80888086/8088中中中中CSCS和和和和IPIP的变化规则:的变化规则:的变化规则:的变化规则:resetreset复位后复位后复位后复位后,(CS)=FFFFH,(IP)=0故故80888088从内存从内存从内存从内存F

199、FFF:0000HFFFF:0000H处取第一条指令执行处取第一条指令执行处取第一条指令执行处取第一条指令执行, ,第一条指令在内存的第一条指令在内存的ROM区。区。非控制转移指令非控制转移指令非控制转移指令非控制转移指令CPU取来一条指令后,取来一条指令后,自动将自动将IP的值加上该指令的字节数,的值加上该指令的字节数,使使IP顺序指向下一条指令,顺序指向下一条指令,CPU取来紧接着的指令执行。取来紧接着的指令执行。(此时此时IP的变化由的变化由CPU内部的硬件自动完成内部的硬件自动完成) 控制转移指令以控制转移指令以控制转移指令以控制转移指令以CSCS和和和和IPIP为主要操作对象为主要操

200、作对象为主要操作对象为主要操作对象控制转移指令改变控制转移指令改变CS和和IP的值,的值,使程序产生分支、调用结构。使程序产生分支、调用结构。分支结构、调用结构:分支结构、调用结构:分支结构、调用结构:分支结构、调用结构: 顺序存放,非顺序执行顺序存放,非顺序执行顺序存放,非顺序执行顺序存放,非顺序执行例:比较例:比较(AX)、(BX)的大小,将大数存于(的大小,将大数存于(max)单元。)单元。CMPAX,BXJGEJGEgreatXCHGAX,BXgreat: MOVmax,AX(1 1)、)、)、)、JMP(Jump)JMP(Jump)无条件转移指令无条件转移指令无条件转移指令无条件转移

201、指令JMP(jmp)跳转指令。)跳转指令。JMP指令必须指定转移的目标地址(或转向地址)。指令必须指定转移的目标地址(或转向地址)。转移分成两类:段内或段间转移。转移分成两类:段内或段间转移。段内转移:只要改变段内转移:只要改变IP寄存器的内容寄存器的内容指在同一段的范围之内进行转移指在同一段的范围之内进行转移即用新的转移目标地址代替原有的即用新的转移目标地址代替原有的IP值。值。段间转移:要修改段间转移:要修改IP、CS寄存器的内容寄存器的内容转到另一段去执行程序。转到另一段去执行程序。即即转移目标地址转移目标地址=新的段地址和偏移地址两部分组成。新的段地址和偏移地址两部分组成。段内直接短转

202、移:段内直接短转移:格式:格式:JMPSHORTOPROPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。在机器语言中存放位移量在机器语言中存放位移量D8位移量位移量D8=符号地址的偏移地址符号地址的偏移地址-当前当前IP的值的值执行操作:(执行操作:(IP)(IP)当前当前+D8SHORT短属性标号短属性标号8位位移量位位移量D8的范围在(的范围在(-128127)之间)之间,占有一个字节。,占有一个字节。而指令本身占有两个字节。而指令本身占有两个字节。 例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。JMPSHO

203、RTNEXT指令执行过程:指令执行过程:NEXT在汇编语言中使用符号地址在汇编语言中使用符号地址(IP)(IP)当前当前+D88位位移量位位移量D8的范围在(的范围在(-128127)之间)之间,否则出错。否则出错。标号与控制转移指令在同一段中标号与控制转移指令在同一段中,后引用的标号可以不用后引用的标号可以不用SHORT,前引用的标号必须使用前引用的标号必须使用SHORT如:如:tager:JMPtagerJMPSHORTtagertager:段内直接近转移:段内直接近转移:格式:格式:JMPNEARPTROPROPR在汇编语言中使用符号地址在汇编语言中使用符号地址。在机器语言中存放位移量在

204、机器语言中存放位移量D16位移量位移量D16=符号地址的偏移地址符号地址的偏移地址-当前当前IP的值的值执行操作:执行操作:(IP)(IP)当前当前+D16NEAR近属性标号近属性标号位移量为位移量为D16范围:范围:-32768+32767H,占有两个字节。,占有两个字节。而指令本身占有三个字节。而指令本身占有三个字节。可以转移到段内的任一位置。可以转移到段内的任一位置。过程:如同过程:如同SHORT,只是位移量为,只是位移量为D16范围范围-32768+32767H,占有两个字节。占有两个字节。 段内间接转移段内间接转移:(CS)不变,只改变不变,只改变(IP)格式:格式:JMPWORDP

205、TROPROPR为为16位寄存器、位寄存器、或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即数以外的任何一种寻址方式)执行操作:执行操作:(IP)(EA)或(或(IP)(reg16)指令格式举例:指令格式举例:JMPAXJMPSIJMPTABLEBX;操作数已定义为操作数已定义为16位存储器位存储器JMPALPHA_WORD;操作数已定义为;操作数已定义为16位存储器位存储器JMPWORDPTRBPDI例:例:(DS)=1000H,(BX)=1000H,(CX)=5000H,(CS)=3000H(11000H)=1234H,(11002H)=5678HJMPCX;(IP)=5000H

206、JMPWORDPTRBX;(CS)=3000H,(IP)=1234H(PA)=(16d(DS)+(BX)=(11000H)=1234H段间直接(远)转移:段间直接(远)转移:(CS)、(IP)都改变都改变格式:格式:JMPFARPTROPR;OPR在汇编语言中使用符号地址。在汇编语言中使用符号地址。符号地址与指令不在同一个段里。符号地址与指令不在同一个段里。在机器语言中则要指定转向地址的偏移地址和段地址在机器语言中则要指定转向地址的偏移地址和段地址执行操作:执行操作: (IP)OPR所在的段内偏移地址。所在的段内偏移地址。(CS)OPR所在的段的段址。所在的段的段址。而指令本身占有而指令本身占

207、有5个字节:个字节:用用2个字分别存放符号地址的段值、偏移值,个字分别存放符号地址的段值、偏移值,用用1个字节存放操作码。个字节存放操作码。FAR远属性标号远属性标号,标号与控制转移指令不在同一段中。标号与控制转移指令不在同一段中。在汇编语言中,在机器语言中存放如下:在汇编语言中,在机器语言中存放如下:例:例:C1SEGMENTJMPFARPTRnext_progC1ENDSC2SEGMINTnext_prog:C2ENDSE AE A5 05 00 20 20 00 02 02 0OPOP码码新新(IP)=0250H(IP)=0250H新新(CS)=2000H(CS)=2000HJMPJMP

208、指令指令C1C1段段C2C2段段20000H20000Hnext_prog:next_prog:20250H20250H2000:0250H 段间间接转移:段间间接转移:(CS)、(IP)都改变都改变格式:格式:JMP DWORDPTROPROPR可以使用存储器可以使用存储器(除立即数和寄存器以外的任何一种寻址方式)(除立即数和寄存器以外的任何一种寻址方式)执行操作:执行操作:(IP)(EA)(CS)(EA+2)例:已知例:已知(BX)=1000H,(,(SI)=2000H,(DS)=2000H(23000H)=2211H,(23002H)=4433HJMPDWORDPTRBXSI则:则:(B

209、X)+(SI)=3000H(IP)=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=2211H(CS)=(PA+2)=4433H(2)、)、Jcc条件转移指令条件转移指令根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移(10种种)JZ(JE)/JNZ(JNE),),JP(JPE)/JNP(JPO),),JS/JNS,JO/JNO,JB(JNAE、JC)/JNB(JAE、JNC),),根据两个无符号数比较结果转移(根据两个无符号数比较结果转移(4种)种)JB(JNAE、JC)/JNB(JAE、JNC),),JBE(JNA)/JNBE(JA)比较两个带符号数,并根据比

210、较结果转移(比较两个带符号数,并根据比较结果转移(4种)种)JL(JNGE)/JNL(JGE),),JLE(JNG)/JNLE(JG)指令格式:指令格式:JccOPR操作:根据上一条指令所设置的条件码来判别测试条件转移。操作:根据上一条指令所设置的条件码来判别测试条件转移。每一种条件转移指令都有它的测试条件。每一种条件转移指令都有它的测试条件。满足条件时满足条件时:(IP)(IP)当前当前+符号扩展到符号扩展到符号扩展到符号扩展到1616位后的位移量位后的位移量位后的位移量位后的位移量D D8 8, ,使用相对寻址方式,范围使用相对寻址方式,范围-128+127个字节个字节不满足条件时:不满足

211、条件时:(IP)不变,顺序执行下一条指令)不变,顺序执行下一条指令注意几点:注意几点:注意几点:注意几点:所有条件转移指令都是相对转移形式,所有条件转移指令都是相对转移形式,1.范围(范围(-128+127)。)。当需往一个较远地方进行条件转移时,当需往一个较远地方进行条件转移时,选用条件转移转到附近一个单元,选用条件转移转到附近一个单元,然后,再用无条件转移转到较远的目的地。然后,再用无条件转移转到较远的目的地。条件转移指令中,相当一部分指令是在比较完二个数大小条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移,后,根据结果而决定是否转移,条件转移指令不影响标志位条

212、件转移指令不影响标志位按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类:以单个状态标志作为转移条件助记符以单个状态标志作为转移条件助记符 转移条件转移条件助记符助记符转移条件转移条件助记符助记符转移条件转移条件JZ/JEJZ/JEZF=1ZF=1JNZ/JNEJNZ/JNEZF=0ZF=0JSJSSF=1SF=1JNSJNSSF=0SF=0JOJOOF=1OF=1JNOJNOOF=0OF=0JP/JPEJP/JPEPF=1PF=1JNP/JPOJNP/JPOPF=0PF=0JCJCCF=1CF=1JNCJNCCF=0CF=0以以CX的值为的值为0作为转移条

213、件作为转移条件助记符助记符转移条件转移条件JCXZCX=0助记符助记符转移条件转移条件JA/JNBECFZF=0高于/不低于等于不低于等于JAE/JNB/JNCCF=0 高于或等于/不低于不低于/无进位JB/JNAE/JCCF=1 低于低于/不高于等于/有进位JBE/JNACFZF=1 低于或等于低于或等于/不高于以两个无符号数比较的结果作为转移条件以两个无符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件以两个带符号数比较的结果作为转移条件助记符助记符转移条件转移条件JG/JNLE(SFOF)ZF=0大于/不小于等于不小于等于JGE/JNL SFOF=0 大于或等于/不小于不小

214、于JL/JNGE SFOF=1 小于小于/不大于等于JLE/JNG(SFOF)ZF=1小于或等于小于或等于/不大于条件转移指令应用条件转移指令应用 例:比较二个数是否相等例:比较二个数是否相等如相等做动作如相等做动作1否则做动作否则做动作2CMPAX,BXJEaction_1JEaction_1Action_2:action_1action_1: 或或CMPAX,BXJNZaction_2JNZaction_2action_1:action_2action_2:例:例:X,Y放在放在X,Y单元里,单元里,(带符号数判断带符号数判断)先判先判X50,YEStoo_high,NO做做X-Y,溢出溢

215、出overflow,否则求,否则求|XY|resultMOVAX,XCMPAX,50JGtoo_high;大于转大于转too_highSUBAX,YJOoverflow;溢出转溢出转overflowJNSnonneg;S=0转转nonnegNEGAXnonneg:MOVresult,AXtoo_high:overflow: 例:例:在在M中有一个首地址为中有一个首地址为array的的N字数组字数组,要求测试其中正数、要求测试其中正数、0及负数的个数及负数的个数.(带符号数判断带符号数判断)正数个数放在正数个数放在:(DI)中,)中,0的个数放在的个数放在:(SI)中,)中,负数的个数放在负数的

216、个数放在:N-(DI)-(SI)送()送(AX)如果没有负数转如果没有负数转skip,如果有负数转如果有负数转neg_val程序:程序:movcx,N;N字数组字数组movbx,0movdi,bxmovsi,bxagain:cmpwordptrarrarybx,0jleless_or_agincdi ;正数个数正数个数jmpshortneatless_or_ag:jlneatincsi;0的个数的个数neat:addbx,2deccxjnzagainmovax,Nsubax,disubax,sijzskip;没有负数没有负数jmpnearptrneg_val;有负数有负数skip:neg_va

217、l:2、过程过程(子程序子程序)调用指令调用指令子程序子程序程序中具有独立功能的部分编写成独立程序模块。程序中具有独立功能的部分编写成独立程序模块。子程序(过程)定义子程序(过程)定义格式:格式:符号名符号名PROC类型类型符号名符号名ENDP子程序调用和返回指令:子程序调用和返回指令:CALLRET(RETURN)过程有两种类型:过程有两种类型:按过程与调用语句间的位置,过程有两种类型。按过程与调用语句间的位置,过程有两种类型。NEAR类型:调用指令与过程在同一个段中类型:调用指令与过程在同一个段中FAR类型:调用指令与过程不在同一个段中类型:调用指令与过程不在同一个段中CALL指令和指令和

218、RET指令都不影响条件码。指令都不影响条件码。(1)、)、CALL(Callaprocedure)调用调用CALL调用指令调用指令调用地址由指令给出调用地址由指令给出CALL调用指令有调用指令有4 4种:种:段内直接调用段内直接调用段间直接调用段间直接调用段内间接调用段内间接调用段间间接调用段间间接调用段内直接调用段内直接调用格式:格式:CALLDST ;(SP)(SP)-2,(SP)+1,(SP)(IP);(IP)(IP)+D16 DST给出转向地址(子程序的入口地址)。给出转向地址(子程序的入口地址)。D16机器指令中的位移量(转向地址和返回地址之差)。机器指令中的位移量(转向地址和返回地

219、址之差)。位移量为位移量为D16范围范围-32768+32767H,占有两个字节。,占有两个字节。工作过程如下:工作过程如下:例:例:NEARNEAR类型类型类型类型过程过程codeSEGMENT;code段段CALLsubp;调用调用指令指令YYY入栈入栈,D16=subp-yyyXXX:YYYYYYsubpsubpPROCNEAR;过程定义过程定义RET;返回返回subpENDPcodeENDS例:两个数据变量例:两个数据变量X与与Y相乘相乘子程序和调用程序在同一个程序模块中子程序和调用程序在同一个程序模块中子程序和调用程序在同一个程序模块中子程序和调用程序在同一个程序模块中,子程序可以直

220、接访问模子程序可以直接访问模块中的变量。块中的变量。DATASGSEGMENTXDW100 YDW10DATASGENDSCODESGSEGMENTMAINPROCFARASSUMECS:CODESG,DS:DATASGSTART:CALLsubpRETMAINENDPsubpPROCNEARMOVAX,XMOVBX,YMULBXRETsubpENDCODESGENDSENDSTART段内间接调用:段内间接调用:格式:格式:CALLDST;WORDPTROPROPR为为16位寄存器,位寄存器,或存储器(除立即数以外的任何一种寻址方式)或存储器(除立即数以外的任何一种寻址方式)执行操作:执行操作

221、:执行操作:执行操作:(SP)(SP)-2(SP)+1,(,(SP)(IP)(IP)(EA)EA由由DST寻址方式所确定的有效地址。寻址方式所确定的有效地址。 段间直接调用:段间直接调用:格式:格式:CALLFARPTRDST;执行操作执行操作执行操作执行操作 :(SP)(SP)-2(SPSP)+1+1,(,(,(,(SPSP)(CSCS)(SP)(SP)-2(SPSP)+1+1,(,(,(,(SPSP)(IPIP)(IPIP)DSTDST偏移地址(指令中第偏移地址(指令中第偏移地址(指令中第偏移地址(指令中第2 2,3 3字节字节字节字节 )(CSCS)DSTDST段地址(指令中第段地址(指

222、令中第段地址(指令中第段地址(指令中第4 4,5 5字节字节字节字节 )例例:CSEG1SEGMENTCALLFARPTRsubp;处的处的CS:IP入栈转入栈转subp:CSEG1ENDSCSEG2SEGMENTsubpPROCRETsubpENDPCSEG2ENDS段间间接调用:段间间接调用:格式:格式:CALLDWORDPTRDST执行操作:执行操作:(SP)(SP)-2(SP)+1(SP)+1,(SP)(CS)(SP)(CS)(SP)(SP)-2(SP)+1(SP)+1,(SP)(SP)(IPIP)(IP)(EA)(IP)(EA)(CS)(EA)+2(CS)(EA)+2转子程序入口转子

223、程序入口转子程序入口转子程序入口EA由由DST的寻址方式确定的有效地址。的寻址方式确定的有效地址。(2)、RET(Returefromprocedure)返回返回RET返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回调用程序继续执行。使子程序在功能完成后返回调用程序继续执行。*为能准确返回为能准确返回,返回指令类型与调用指令类型相对应。,返回指令类型与调用指令类型相对应。RETRET返回指令有返回指令有返回指令有返回指令有4 4 4 4种:种:种:种:段内返回段内返回段间返回段间返回段内带立即数返回段内带立即数返回段间带立即数返回段间带立即数返回在子程序调用时,返回地址

224、入栈在子程序调用时,返回地址入栈返回时:将返回地址出栈返回时:将返回地址出栈(IP)(段内或段间)。)(段内或段间)。(CS)(段间)。)(段间)。段内返回:段内返回:格式:格式:RET;机器码:机器码:C3H或者或者C2H执行操作:执行操作:执行操作:执行操作:(IP)(SP)+1,(,(SP)(SP)(SP)+2段间返回:段间返回:格式:格式:RET;机器码:机器码:CBH或或CAH执行操作:执行操作:执行操作:执行操作:(IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)(SP)+1,(,(SP) (SP)(SP)+2 段内带立即数返回段内带立即数返回格式:格式:RETEXP;

225、执行操作:执行操作:(IP)(SP)+1,(,(SP)(SP)(SP)+2(SPSP)(SPSP)+D+D1616EXP是一个表达式是一个表达式计算出来的常数成为机器指令中位移量计算出来的常数成为机器指令中位移量D16,修改堆栈,修改堆栈指针。指针。例如:例如:RETEXP堆栈使用情况堆栈使用情况:CODECODE SEGMENTSEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXPUSHBXPUSHCXCALLDELCHARCALLDELCHARCS:XXXX MOVAH,4CH INT21HMAINENDPDELCH

226、ARPROCRET4RET4DELCHARENDPCODEENDSCODEENDSENDSTARTRETEXP堆栈使用情况堆栈使用情况:段间带立即数返回:段间带立即数返回:格式:格式:RETEXP;执行操作:执行操作:执行操作:执行操作: (IP)(SP)+1,(,(SP)(SP)(SP)+2(CS)(SP)+1,(,(SP)(SP)(SP)+2(SP)(SP)+D16 CALL指令和指令和RET指令都不影响条件码。指令都不影响条件码。例例:学习使用学习使用段内、段间直接调用指令的使用及堆栈情况段内、段间直接调用指令的使用及堆栈情况主程序主程序MAIN在一个代码段中在一个代码段中子程序子程序P

227、RO-APRO-BPRO-C 在另一个代码段在另一个代码段程序调用关系程序调用关系:另一个代码段另一个代码段PRO-APRO-BCALLnearptrPRO-BCALLnearptrPRO-C(IP)=2500H (IP)=4000HCALLnearptrPRO-CRET (IP)=3700HPRO-CRETRET(SP)=0100HMAINCALLfarptrPRO-A(CS)=0500H(IP)=1000H堆栈情况:堆栈情况: 操作数执行操作符号地址 (SHORT)(IP) (IP)当前+ 8位位移量符号地址 ( NEAR属性)(IP) (IP)当前+ 16位位移量reg (16位)或 m

228、em ( DW类型 )(IP) ( reg ) 或(IP) (mem)符号地址 ( FAR属性)(IP) 符号地址的偏值 (CS) 符号地址的段值mem ( DD类型 )(IP) ( mem ), (CS) (mem+2 ) 当前当前IP的值为控制转移指令下一条指令的偏移地址。的值为控制转移指令下一条指令的偏移地址。 位移量位移量=符号地址的偏移量符号地址的偏移量-当前当前IP的值。的值。 符号地址(目标地址)符号地址(目标地址)=当前当前IP的值的值+位移量位移量(3)(3)、小结、小结、小结、小结 :指令格式:指令格式:JMP操作数操作数 转移方式:转移方式:转移方式:转移方式:由由CS是

229、否变化、以及操作数类型决定情况如下表是否变化、以及操作数类型决定情况如下表转移方式CS操作数跳转范围段内直接短 方 式不变符号地址(SHORT)-128 127即0FFH段内直接近 方 式不变符号地址(NEAR属性)一个段内0FFFFH段 内间接方式不变Reg mem (DW类型)一个段内0FFFFH段 间直接方式变符号地址(FAR属性)整个内存0FFFFFH段 间间接方式变mem(DD类型)整个内存0FFFFFH各控制转移指令允许使用的转移方式各控制转移指令允许使用的转移方式转移方式无条件转移JMP条件转移Jcc循环转移LOOPxx 子程调用CALL段内直接短 方 式 段内直接近 方 式段

230、内间接方式段 间 直接方式段 间间接例例:JMPagain()JMPBX()JMPWORDPTRBX()JMPDWORDPTR()JzAX()LOOPBX()Jnznext()(若若next的位移量超出的位移量超出-128127)指令指令JMP、CALL、Jcc、LOOPxx本身对标志无影响本身对标志无影响。3、循环控制指令、循环控制指令格式格式:LOOPxx符号地址符号地址执行执行操作操作:(CX)(CX)-1此此操作不影响标志操作不影响标志检查转移条件检查转移条件xx,满足转向目标地址去执行,满足转向目标地址去执行;不满足执行不满足执行LOOPxx后一条指令后一条指令转移方式转移方式只允许

231、段内直接短方式,跳转范围只允许段内直接短方式,跳转范围-128127助记符转移条件不转移条件LOOPCX0CX=0LOOPZCX0且ZF=1CX=0或ZF=0LOOPNZCX0且ZF=0CX=0或ZF=1与条件转移指令不同的是:与条件转移指令不同的是:循环指令隐含循环指令隐含(CX)减操作。减操作。例:用循环指令将例:用循环指令将BL寄存器的内容按二进制形式显示出来寄存器的内容按二进制形式显示出来学习:学习:LOOP指令指令MOVCX,8next:ROLBL,1MOVDL,BLANDDL,00000001BADDDL,00110000BMOVAH,2INT21HDECCXJNZnextLOOP

232、next循环指令说明:循环指令说明: LOOP退出循环条件是(退出循环条件是(CX)=0LOOPZ和和LOOPNZ提供了提前结束循环的可能提供了提前结束循环的可能,不一定要等到不一定要等到(CX)=0才退出循环。才退出循环。在串中查找字符,查到了,就可退出,在串中查找字符,查到了,就可退出,可用可用LOOPNZ,不相等时继续查找。,不相等时继续查找。比较两串时,当有字符不等,就可退出,说明两字符串不等。比较两串时,当有字符不等,就可退出,说明两字符串不等。可用可用LOOPZ,当相等时继续比较。,当相等时继续比较。执行完执行完LOOPNZ或或LOOPZ后,根据后,根据ZF标志的值判断结果标志的值

233、判断结果对查找字符,对查找字符,ZF=1,说明找到;否则没有找到。说明找到;否则没有找到。对串比较,对串比较,ZF=1,说明两串相等;否则不等。说明两串相等;否则不等。 例:例:在在string字符串中查找空格字符,串长度为字符串中查找空格字符,串长度为N。用条件转移:用条件转移:JZMOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,BXJZfindINCBXDECCXJNZnext未找到处理未找到处理Find:找到处理找到处理修改偏址修改偏址BXYNAL关键字关键字CX串长度串长度NDS:BX串首址串首址判判BX是关键

234、字?是关键字?(CX)(CX)- -1找到处理找到处理未找到处理未找到处理(CX)=0?YN结束出口结束出口用条件转移:用条件转移:JZ MOVCX,NMOVAX,SEGstringMOVDS,AX LEABX,stringMOVAL,20H next:CMPAL,BXJZfindINCBXDECCXJNZnext未找到处理未找到处理JMPexitfind:找到处理找到处理exit:结束出口结束出口用循环指令用循环指令:LOOPNZnextMOVCX,NMOVAX,SEGstringMOVDS,AXLEABX,stringMOVAL,20Hnext:CMPAL,BXPUSHFPUSHFINCB

235、XPOPFPOPFLOOPNZnextJZfind未找到处理未找到处理JMPexitfind:找到处理找到处理exit:结束出口结束出口DECBXnext:INCBXCMPAL,BXLOOPNZnextJZfind未找到处理未找到处理JMPexitfind:找到处理找到处理exit:结束出口结束出口MOVCX,28HMOVSI,0FFHNEXT1:INCSICMPBYTEPTRSI,0LOOPZNEXT1;当;当Z=1、(、(CX)0循环;循环;当当Z=0,或(,或(CX)=0结束循环。结束循环。JNZOKK;当找到非零元素转;当找到非零元素转OKK。CALLDISPLAY1;当找不到非零元素

236、转;当找不到非零元素转DISPLAY1OKK:CALLDISPLAY2用用LOOPZ和和LOOPNZ指令提供提前结束循环的可能性。指令提供提前结束循环的可能性。有时需要字符串中查找一个字符,找到后可提前结束循环,有时需要字符串中查找一个字符,找到后可提前结束循环,用用LOOPZ、LOOPNZ来处理。来处理。例:例:40个元素构成的数组,找出第一个非零元素。个元素构成的数组,找出第一个非零元素。DISPLAY1RETDISPLAY2RET4、中断指令、中断指令中断(中断(Interrupt):):有时当系统运行或程序运行期间遇到某些特殊情况,有时当系统运行或程序运行期间遇到某些特殊情况,需要计算

237、机自动执行一组专门的例行程序来进行处理。需要计算机自动执行一组专门的例行程序来进行处理。中断例行程序(或中断子程序)中断例行程序(或中断子程序)(Interruptroutine):所执行的这组程序就称为中断子程序。所执行的这组程序就称为中断子程序。种类:种类:中断分为内部(软)中断和外部(硬)中断两种。中断分为内部(软)中断和外部(硬)中断两种。内部中断内部中断如除法运算中除数为如除法运算中除数为0、中断指令引起的中断。、中断指令引起的中断。外部中断外部中断处理处理I/O设备与设备与CPU之间的通信。之间的通信。CPU响应一次中断自动完成三件事情:响应一次中断自动完成三件事情:(PSW)入栈

238、)入栈保护现场,保护现场,(CS),(),(IP)保存入栈)保存入栈保留断点,保留断点,转中断例行程序去执行。转中断例行程序去执行。 中断返回时:中断返回时: 恢复(恢复(IP)、()、(CS)及()及(PSW)中断向量:中断例行程序入口地址。中断向量:中断例行程序入口地址。IBM-PC中,存储器的最底地址中,存储器的最底地址00000H003FFH为中断向量区,为中断向量区,存放存放256种类型中断例行程序入口地址种类型中断例行程序入口地址,每个中断向量占每个中断向量占4个单元个单元。中断指定类型号中断指定类型号N4取得指定类型的中断向量地址。取得指定类型的中断向量地址。例:中断类型例:中断

239、类型9,9 4=36 00024H00027H单元中放中断向量。单元中放中断向量。IBM-PC机中为每个类型规定了一种功能。机中为每个类型规定了一种功能。中断类型功能类型0除数为0中断例行程序类型1单步类型2非屏蔽中断, NMI类型3设置断点类型4溢出处理中断,INTO指令类型10显示设备中断类型20程序结束中断类型21DOS系统功能调用功能程序*除非特别注明,类型号是以除非特别注明,类型号是以16进制形式表示的。进制形式表示的。(1).介绍几条指令:介绍几条指令:INTn,IRET格式:格式:INTn;n常数或表达式,常数或表达式,n=0255或或INT执行操作:执行操作:(SP)(SP)-

240、2,(SP)+1,(SP)(PSW)(SP)(SP)-2,(SP)+1,(SP)(CS)(SP)(SP)-2,(SP)+1,(SP)(IP)(IP)(N4)(CS)(N4+2)清除清除IF、TF,避免进入中断以后不被外面其它中断所打断,避免进入中断以后不被外面其它中断所打断及进入中断以后按单步执行。及进入中断以后按单步执行。 类型类型03的中断称为内部中断。的中断称为内部中断。 类型类型0:指令系统没有:指令系统没有INT0这条指令这条指令除数为除数为0中断中断除数为除数为0:它:它既不是外部中断既不是外部中断也不是软件中断也不是软件中断。是是由由CPU自身产生的自身产生的,所以无对应中断指令

241、。,所以无对应中断指令。有符号数进行除法所得的商超出规定范围有符号数进行除法所得的商超出规定范围有符号数进行除法运算,所得的有符号数进行除法运算,所得的商超出规定范围商超出规定范围,CPU自动产生类型为自动产生类型为0的中断的中断,转入响应的中断处理程序。,转入响应的中断处理程序。内存内存内存内存0 0:0000H0:03FFH0000H0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。区域中,构成中断向量表,存放中断处理程序入口地址。区域中,构成中断向量表,存放中断处理程序入口地址。区域中,构成中断向量表,存放中断处理程序入口地址。每每每每4 4个单元对应个单元对应个单元对应个

242、单元对应1 1个中断源。关系如下表:个中断源。关系如下表:个中断源。关系如下表:个中断源。关系如下表:中断处理程序入口地址的地址类型00000H00001H类型0(IP)00002H00003H类型0(CS)00004H00005H类型1(IP)00006H00007H类型1(CS)00008H00009H类型2(IP)0000AH0000BH类型2(CS)0000CH0000DH类型3(IP)0000EH0000FH类型3(CS)00010H00011H类型4(IP)00012H00013H类型4(CS)003FCH003FDH类型255(IP)003FEH003FFH类型255(CS) 类

243、型类型1单步中断单步中断TF=1进入单步中断。进入单步中断。单步中断不是由外部硬件或程序中的中断产生,单步中断不是由外部硬件或程序中的中断产生,而是而是CPU测试测试TF=1时产生的。时产生的。单步中断单步中断每执行一条指令,进行一次单步中断处理,每执行一条指令,进行一次单步中断处理,显示出一系列内显示出一系列内部寄存器的值,部寄存器的值,并告并告示一些附带的信息。示一些附带的信息。一般用于调试程序中逐条执行用户程序。一般用于调试程序中逐条执行用户程序。对于有对于有重复前缀串操作指令重复前缀串操作指令单步操作下,单步操作下,每重复一次每重复一次将产生一个单步中断将产生一个单步中断,而不,而不是

244、整个串操作结束后进入单步操是整个串操作结束后进入单步操作。作。思考:思考:思考:思考: 单步操作单步操作T、P不同点?不同点? 类型类型2NMI中断,非屏蔽中断中断,非屏蔽中断NMI中断是由中断是由NMI引腿引入,引腿引入,不受不受IF屏蔽屏蔽,只要只要NMI腿出现中断请求腿出现中断请求中断处理子程序入口地址在中断处理子程序入口地址在0:0008H0:000BH中,中,CPU予以响应予以响应,进入对应的中断处理。进入对应的中断处理。一般用于处理一般用于处理系统的重大故障系统的重大故障。 类型类型3断点中断断点中断8088提供的一种调试手段提供的一种调试手段。 设置断点过程(在设置断点过程(在D

245、EBUG下):下):G=起始地址起始地址断点地址断点地址用户程序指定断点:用户程序指定断点:用断点的中断指令用断点的中断指令INT3来代替原有指令,来代替原有指令,把把用户原有指令进栈保存用户原有指令进栈保存,这样运行到断点处执行这样运行到断点处执行INT3,转入中断处理程序,转入中断处理程序,显示一系列寄存器值,并给出一些重要信息,用户可显示一系列寄存器值,并给出一些重要信息,用户可判断正误。判断正误。断点中断还负责恢复进入中断前的被断点中断还负责恢复进入中断前的被INT3替换掉的替换掉的那条指令。那条指令。(2)类型类型4溢出中断,溢出中断,INTO指令指令格式:格式:INTO;该指令检测

246、该指令检测OF标志,标志,OF=1执行执行INTO,否则执行,否则执行INTO下一条执行下一条执行。执行操作:执行操作:(SP)(SP)-2,(SP)+1,(SP)(PSW)(SP)(SP)-2,(,(SP)+1,(SP)(CS)(SP)(SP)-2,(SP)+1,(SP)(IP)(IP)(10H)(CS)(12H)IF=TF=0执行:执行:OF为为1时,执行时,执行INTO;OF为为0时,执行时,执行INTO下一条执行。下一条执行。例例、INTO、类型类型4中断子程中断子程、使用注意事项:使用注意事项:对于无符号,有符号对于无符号,有符号*、/,指令各不相同,指令各不相同。对于无符号,有符号

247、对于无符号,有符号+、-指令同,指令同,有、无符号数有、无符号数+、-都有可能产生溢出。都有可能产生溢出。对于无符号数溢出不是什么错误,表示低位字节或字向高位产生进位、借位。对于无符号数溢出不是什么错误,表示低位字节或字向高位产生进位、借位。有符号数溢出意味着出错所以应避免。有符号数溢出意味着出错所以应避免。有符号数,有符号数,OF=1表示有符号数产生溢出。表示有符号数产生溢出。无符号数,无符号数,OF=1并不表示错误。并不表示错误。对对CPU来说分不清楚进行的是有、无符号来说分不清楚进行的是有、无符号+-运算,只能是程序员清楚。运算,只能是程序员清楚。8088提供了一条提供了一条INTO指令

248、,指令,专门用来判断有符号数专门用来判断有符号数+、-溢出。溢出。INTO跟在有符号数跟在有符号数+、-后面:后面:OF=1,执行,执行INTO,进入类型,进入类型4的溢出中断,的溢出中断,给出设置标志给出设置标志给出设置标志给出设置标志。OF1,执行,执行INTO,也转入中断后子程序,也转入中断后子程序,程序对标志进行测试程序对标志进行测试很快返回很快返回很快返回很快返回。*这条指令可以写在一条算术指令后面。这条指令可以写在一条算术指令后面。若产生溢出,若产生溢出,OF=1,则启动中断过程,不进行任何操作。,则启动中断过程,不进行任何操作。(3)IRET从中断返回指令(从中断返回指令(Int

249、erruptreturn)所有中断过程(服务程序)不管是硬还是软,最后一条指令一定是:所有中断过程(服务程序)不管是硬还是软,最后一条指令一定是:IRET退出中断过程,返回中断时断点。退出中断过程,返回中断时断点。格式:格式:IRET执行操作:执行操作:执行操作:执行操作:(IP)(SP)+1,(SP),(SP)(SP)+2(CS)(SP)+1,(SP),(SP)(SP)+2(PSW)(SP)+1,(SP),(SP)(SP)+2 六、处理器控制指令六、处理器控制指令(一)标志处理指令(一)标志处理指令1、CLC(Clearcarryflag)清清CF标志标志2、STC(Setcarryflag

250、)置置CF标志标志3、CMC(Complementcarryflag)对对CF求反求反4、CLD(Cleardirectionflag)清清DF标志标志5、STD(Setdirectionflag)置置DF标志标志6、CLI(Clearinterruptflag)清清IF标志标志7、STI(Setinterruptenableflag)置置IF标志标志(二)其他处理机控制指令(二)其他处理机控制指令1、NOP(Nooperation)空操作空操作2、HLT(Halt)CPU暂停状态暂停状态3、WAIT(Waitwhilepinnotasserted)CPU等待状态等待状态4、ESC(Escap

251、e)交权交权5、LOCK(Lockbus)总线锁定总线锁定1标志处理指令标志处理指令设置和清除标志的指令,只影响指令指定的标志。设置和清除标志的指令,只影响指令指定的标志。指令格式执行操作CLCCF=0STC CF=1CLMCF CLDDF=0STDDF=1CLIIF=0STIIF=12其他处理机控制指令其他处理机控制指令暂停指令暂停指令HLT格式格式:HLT执行执行:使使CPU处于暂停状态处于暂停状态用于等待外部中断,中断处理结束后,用于等待外部中断,中断处理结束后,继续执行继续执行HLT后的下一条指令后的下一条指令例例、STI;允许外部中断允许外部中断HLT;等待中断等待中断MOVAX,0

252、、只有以下几种情况才能脱离暂停状态:只有以下几种情况才能脱离暂停状态:RESET线上有复位信号线上有复位信号在在NMI线上有请求线上有请求在中断允许情形下(在中断允许情形下(IF=1),在),在INTR线上有请求线上有请求空操作指令空操作指令NOP格式格式:NOP指令不执行任何操作,指令不执行任何操作,但占有但占有3个时钟周期,继续执行下条指令。个时钟周期,继续执行下条指令。其机器码占一个字节单元,其机器码占一个字节单元,在调试程序时,修改程序用。在调试程序时,修改程序用。做短暂延时做短暂延时处理器脱离(处理器脱离(processorEscape)*ESC交权指令(换码)交权指令(换码)格式:

253、格式:ESCmemmem指出一个存储单元,指出一个存储单元,不能是寄存器和立即数寻找方式不能是寄存器和立即数寻找方式执行:执行:8088从存储器中读出操作数并放到总线上,从存储器中读出操作数并放到总线上,协处理器由此知道要执行什么操作,得到操作数,从而协处理器由此知道要执行什么操作,得到操作数,从而代替代替8088操作。操作。调动协处理器工作的联络手段,调动协处理器工作的联络手段,ESC二字节指令。二字节指令。能区分要调用哪个协处理器进行什么操作;能区分要调用哪个协处理器进行什么操作;能指出放在存储器中的操作数。能指出放在存储器中的操作数。处理器等待(处理器等待(ProcessORwait)格

254、式:格式:WAIT;处理器等待;处理器等待执行:执行:处理器等待,处理器等待,CPU处于空操作处于空操作,等待外中断发生,等待外中断发生,中断结束后,可继续执行下面程序中断结束后,可继续执行下面程序LOCK总线锁定总线锁定LOCK实际上是一个指令前缀,可以放在任何一条指令前面。实际上是一个指令前缀,可以放在任何一条指令前面。用来维持总线的锁存信号直到与其联合的指令执行完;用来维持总线的锁存信号直到与其联合的指令执行完;CPU与其他协处理器协同工作时,可以避免破坏有用信息。与其他协处理器协同工作时,可以避免破坏有用信息。)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK

255、8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%

256、s#oXlTiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOd

257、LaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcG5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s

258、!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeM

259、aJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$

260、qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNb

261、K8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u%rZ

262、oWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnWkShP9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%s#oXlTiQfNbK8H5

263、D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#ThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H6E2B+x(u%rZoWlT

264、hQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+

265、x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(YnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeN

266、bJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$

267、rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8

268、G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5Ew*t$qYnVkSgPdLaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnW

269、kThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w

270、&t!pYmUjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0yrZoWlThQeNbJ8G4D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w结束语结束语谢谢大家聆听!谢谢大家聆听!297

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号