《第3章8086寻址方式与指令系统》由会员分享,可在线阅读,更多相关《第3章8086寻址方式与指令系统(195页珍藏版)》请在金锄头文库上搜索。
1、第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统本章主要内容本章主要内容 概述概述1 8086寻址方式寻址方式2 8086指令系统指令系统3第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.1 3.1 概述概述v指令是指挥计算机进行操作的命令。指令是指挥计算机进行操作的命令。v指令系统是指微处理器能执行的各种指令的指令系统是指微处理器能执行的各种指令的集合。集合。v程序程序是一系列按一定顺序排列的指令是一系列按一定顺序排列的指令。v执行程序的过程就是计算机的工作过程。执行程序的过程就是
2、计算机的工作过程。v微处理器的主要功能由它的指令系统来体现微处理器的主要功能由它的指令系统来体现。v不同的微处理器有不同的指令系统,其中每不同的微处理器有不同的指令系统,其中每一条指令对应着处理器的一种基本操作,这一条指令对应着处理器的一种基本操作,这在设计微处理器时确定。在设计微处理器时确定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v通常一条指令包括两部分:通常一条指令包括两部分:操作码操作码: :决定要完成的操作决定要完成的操作操作数操作数: :指参加运算的数据或是指参加运算的数据或是该该数所在的内存单元数所在的内存单元的的地址。地址。v指令的一般格式指令的一般
3、格式如下如下:操作码操作码 操作数操作数1 1,操作数,操作数2 2,操作数,操作数nn没有操作数的指令称为没有操作数的指令称为无操作数指令无操作数指令。有两个操作数的指令称为有两个操作数的指令称为双操作数或二地址指令双操作数或二地址指令。v操作码和操作数地址都由二进制数码表示,整条操作码和操作数地址都由二进制数码表示,整条指令以二进制编码的形式存放在存储器中。指令以二进制编码的形式存放在存储器中。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统指令系统与寻址方式的重要性指令系统与寻址方式的重要性v采用采用不同不同CPUCPU的计算机的的计算机的指令系统不同指令系统不同。v
4、采用采用不同不同CPUCPU的计算机的的计算机的指令的格式指令的格式不同。不同。v采用采用不同不同CPUCPU的计算机的的计算机的各各指令允许的指令允许的寻址方式寻址方式不同不同。v要使用某种微处理器,必须先要掌握其指令系统要使用某种微处理器,必须先要掌握其指令系统和各指令允许的寻址方式。和各指令允许的寻址方式。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2 80863.2 8086寻址方式寻址方式v寻址方式寻址方式:指令中给出的指令中给出的求出操作数有效地址的方法。求出操作数有效地址的方法。v寻址操作寻址操作:计算机按照指令给出的寻址方式求出操作数有效地址计算机按
5、照指令给出的寻址方式求出操作数有效地址的过程。的过程。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统808808的的七种基本的数据寻址方式七种基本的数据寻址方式v(1)(1)立即寻址;立即寻址;v(2)(2)寄存器寻址;寄存器寻址;v(3)(3)直接寻址;直接寻址;v(4)(4)寄存器间接寻址;寄存器间接寻址;v(5)(5)寄存器相对寻址;寄存器相对寻址;v(6)(6)基址变址寻址;基址变址寻址;v(7)(7)相对基址变址寻址。相对基址变址寻址。存存储储器器寻寻址址方方式式第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.1 3.2.1 立即寻址
6、立即寻址v操作数直接出现在指令中,此时的操作数也叫立操作数直接出现在指令中,此时的操作数也叫立即数。即数。v立即数紧跟在操作码后面,一起存放在代码段中。立即数紧跟在操作码后面,一起存放在代码段中。v例如:例如:MOV AXMOV AX,2010H2010H在该指令格式中,在该指令格式中,AXAX是目标操作数,是目标操作数,2010H2010H是源操作是源操作数。数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统立即寻址方式的指令执行示意图立即寻址方式的指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统立即寻址方式说明立即寻址方式说明v在所有
7、的指令中,立即数只能作源操作数,不能作在所有的指令中,立即数只能作源操作数,不能作目标操作数。目标操作数。v立即数应与目标操作数的长度一致。立即数应与目标操作数的长度一致。v立即数默认采用十进制形式,以十六进制形式出现立即数默认采用十进制形式,以十六进制形式出现的立即数应以字母的立即数应以字母H H为后缀,以八进制形式出现的立为后缀,以八进制形式出现的立即数应以字母即数应以字母Q Q为后缀。为后缀。v以十六进制形式出现的立即数,若以字母开头,则以十六进制形式出现的立即数,若以字母开头,则必须以数字必须以数字0 0为前缀。为前缀。v立即数还可以用表示立即数还可以用表示+ +、- -、/ /表示的
8、算术表达式,表示的算术表达式,也可以用圆括号改变运算顺序。也可以用圆括号改变运算顺序。v立即数只能是整数,不能是小数、变量或其它类型立即数只能是整数,不能是小数、变量或其它类型的数据。的数据。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.2 3.2.2 寄存器寻址寄存器寻址v操作数在寄存器中,在指令中指定寄存器号。操作数在寄存器中,在指令中指定寄存器号。v由于寄存器号短,因此,采用寄存器寻址方式由于寄存器号短,因此,采用寄存器寻址方式的指令的机器码长度短。的指令的机器码长度短。v操作数在寄存器中,指令执行时,操作就在操作数在寄存器中,指令执行时,操作就在CPUCP
9、U的内部进行,不需要通过访问存储器来取的内部进行,不需要通过访问存储器来取得操作数,因而指令的执行速度快。得操作数,因而指令的执行速度快。v在编程中,如有可能,应尽量在指令中使用这在编程中,如有可能,应尽量在指令中使用这种寻址方式。种寻址方式。v例如:例如: MOV AX MOV AX,2010H2010H第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器寻址方式可用的寄存器寄存器寻址方式可用的寄存器v对于对于1616位操作数,寄存器可以是:位操作数,寄存器可以是:AXAX,BXBX,CXCX,DXDXSISI,DIDI,SPSP,BPBPCSCS,DSDS,SSSS和
10、和ESESv对对8 8位操作数,寄存器可以是:位操作数,寄存器可以是:AHAH,ALALBHBH,BLBLCHCH,CLCLDHDH,DLDL第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器寻址方式指令执行示意图寄存器寻址方式指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器寻址方式说明寄存器寻址方式说明v在一条指令中,寄存器寻址方式既可用于源操作在一条指令中,寄存器寻址方式既可用于源操作数,也可用于目标操作数,还可以两者都用寄存数,也可用于目标操作数,还可以两者都用寄存器寻址方式。器寻址方式。v源操作数与目标操作数的长度应一致。
11、例如,不源操作数与目标操作数的长度应一致。例如,不能将寄存器能将寄存器AXAX的内容传送到寄存器的内容传送到寄存器BHBH中,也不能中,也不能将寄存器将寄存器BHBH的内容传送到寄存器的内容传送到寄存器AXAX中。中。v两个操作数不能同时为段寄存器。两个操作数不能同时为段寄存器。v目标操作数不能是代码段寄存器。目标操作数不能是代码段寄存器。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.4 3.2.4 直接寻址直接寻址v操作数在存储器中,指令中以具体数值的形式直操作数在存储器中,指令中以具体数值的形式直接给出操作数所在存储单元的有效地址接给出操作数所在存储单元的有效
12、地址EAEA。为了。为了与立即数区别,该有效地址必须用与立即数区别,该有效地址必须用括起。括起。v例如:例如: MOV AX MOV AX,2010H2010H该指令的源操作数采用直接寻址方式。该指令的源操作数采用直接寻址方式。若若(DS)=2000H(DS)=2000H,那么指令执行后,那么指令执行后,(AX)=1225H(AX)=1225H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统直接寻址方式指令执行示意图直接寻址方式指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v采用直接寻址方式时,如果指令中没有用前缀说采用直接寻址方式时,
13、如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数明操作数存放在哪个段,则操作数默认存放在数据段。据段。v80868086系统允许操作数存放在代码段、堆栈段或附系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中指明段超越。加段。此时,就需要在指令中指明段超越。v例如:例如: MOV ES:1225H MOV ES:1225H,AX AX 该指令的目标操作数采用直接寻址方式。操作数存放该指令的目标操作数采用直接寻址方式。操作数存放在由在由ESES指示的附加段中指示的附加段中。物理地址物理地址=ES=ES10H+1225H10H+1225H。第第3 3章章 808680
14、86寻址方式与指令系统寻址方式与指令系统v在汇编语言指令中,可以用符号地址代替数值地在汇编语言指令中,可以用符号地址代替数值地址。址。v例如:例如: MOV AX MOV AX,NUMANUMA此时,此时,NUMANUMA是存放操作数的内存单元的符号地址。是存放操作数的内存单元的符号地址。v上面这条指令还可以写成如下的形式:上面这条指令还可以写成如下的形式: MOV AX MOV AX,NUMANUMAv如如DATA1DATA1数据存放在附加段,则可以用如下的形数据存放在附加段,则可以用如下的形式指定段跨越前缀:式指定段跨越前缀: MOV AX MOV AX,ES: NUMAES: NUMA或
15、或 MOV AX MOV AX,ES: NUMAES: NUMA第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址v操作数的有效地址操作数的有效地址EAEA存放在基址寄存器存放在基址寄存器BXBX、BPBP或或变址寄存器变址寄存器SISI、DIDI中。中。v为了区别于寄存器寻址方式,指令中指定的寄存为了区别于寄存器寻址方式,指令中指定的寄存器名要用器名要用括起来。括起来。v指令中使用指令中使用SISI、DIDI、BXBX寄存器时,操作数默认存寄存器时,操作数默认存放在数据段中;使用放在数据段中;使用BPBP寄存器时,操作数默
16、认存寄存器时,操作数默认存放在堆栈段中,允许段超越。放在堆栈段中,允许段超越。v操作数的物理地址操作数的物理地址=(DS)=(DS)10H+(SI)/(DI)/(BX)10H+(SI)/(DI)/(BX) 或或 (SS) (SS)10H+(BP)10H+(BP)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如: MOV AX MOV AX,SI SI v该指令的源操作数采用寄存器间接寻址方式。该指令的源操作数采用寄存器间接寻址方式。v若若(DS)=2000H(DS)=2000H,(SI)=2010H(SI)=2010H,那么指令执行后,那么指令执行后,(AX)=
17、1225H(AX)=1225H。v如操作数不存放在间址寄存器默认的段,则指如操作数不存放在间址寄存器默认的段,则指定段超越的指令可采用如下形式。定段超越的指令可采用如下形式。 MOV AX MOV AX,ES:SIES:SI 此时,操作数的物理地址此时,操作数的物理地址=ES=ES10H+SI10H+SI。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器间接寻址方式指令执行示意图寄存器间接寻址方式指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.5 3.2.5 寄存器相对寻址寄存器相对寻址v操作数的有效地址操作数的有效地址EAE
18、A是指令中指定的基址或变址是指令中指定的基址或变址寄存器的值与位移量之和。寄存器的值与位移量之和。v指令中使用指令中使用SISI、DIDI、BXBX寄存器时,操作数默认存寄存器时,操作数默认存放在数据段中;使用放在数据段中;使用BPBP寄存器时,操作数默认存寄存器时,操作数默认存放在堆栈段中,允许段超越。放在堆栈段中,允许段超越。v操作数的物理地址操作数的物理地址=(DS)=(DS)10H+(SI)/(DI)/(BX)+810H+(SI)/(DI)/(BX)+8位或位或1616位位移量位位移量 或或 =(SS) =(SS)10H+(BP)+810H+(BP)+8位或位或1616位位移量位位移量
19、第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如: MOV AX MOV AX,8BX 8BX v该指令的源操作数采用寄存器相对寻址方式。该指令的源操作数采用寄存器相对寻址方式。v若(若(DSDS)=2000H=2000H,(,(BXBX)=2008H=2008H,那么指令执,那么指令执行后,(行后,(AXAX)=1225H=1225H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器相对寻址方式的指令执行示意图寄存器相对寻址方式的指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统寄存器相对寻址说明寄存器
20、相对寻址说明v偏移量是符号数,偏移量是符号数,8 8位偏移量的取值范围为:位偏移量的取值范围为:00000FFH(0FFH(即即+127D+127D-128D)-128D);v1616位偏移量的取值范围为:位偏移量的取值范围为:000000000FFFFH(0FFFFH(即即+32767D+32767D-32768D)-32768D)。v80868086汇编允许用下面三种形式表示相对寻址,它汇编允许用下面三种形式表示相对寻址,它们是等效的。们是等效的。MOV AXMOV AX,BX+8 BX+8 MOV AXMOV AX,8BX 8BX MOV AXMOV AX,BX+8BX+8第第3 3章章
21、 80868086寻址方式与指令系统寻址方式与指令系统3.2.63.2.6基址变址寻址基址变址寻址v操作数的有效地址操作数的有效地址EAEA是指令中指定的基址寄存是指令中指定的基址寄存器的值与变址寄存器的值之和。器的值与变址寄存器的值之和。v指令中使用基址寄存器指令中使用基址寄存器BXBX时,操作数默认存放时,操作数默认存放在数据段中;在数据段中;v使用基址寄存器使用基址寄存器BPBP时,操作数默认存放在堆栈时,操作数默认存放在堆栈段中,允许段超越。段中,允许段超越。v操作数的物理地址操作数的物理地址= =(DSDS)10H+10H+(SISI)/ /(DIDI)+ +(BXBX)或或 = =
22、(SSSS)10H+10H+(SISI)/ /(DIDI)+ +(BPBP)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如:MOV AXMOV AX,BX SI BX SI v该指令的源操作数采用基址变址寻址方式。该指令的源操作数采用基址变址寻址方式。v若(若(DSDS)=2000H=2000H,(,(BXBX)=2008H=2008H,(,(SISI)=8H=8H,那么指令执行后,(那么指令执行后,(AXAX)=1225H=1225H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统基址变址寻址方式的指令执行示意图基址变址寻址方式的指令执
23、行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.2.7 3.2.7 相对基址变址寻址相对基址变址寻址v操作数的有效地址操作数的有效地址EAEA是指令中指定的基址寄存器是指令中指定的基址寄存器的值与变址寄存器的值以及的值与变址寄存器的值以及8 8位或位或1616位位移量之位位移量之和。和。v指令中使用基址寄存器指令中使用基址寄存器BXBX时,操作数默认存放在时,操作数默认存放在数据段中;数据段中;v使用基址寄存器使用基址寄存器BPBP时,操作数默认存放在堆栈段时,操作数默认存放在堆栈段中,允许段超越。中,允许段超越。v操作数的物理地址操作数的物理地址= =(DSD
24、S)10H+10H+(SISI)/ /(DIDI)+ +(BXBX)+8+8位或位或1616位位移量位位移量或或 = =(SSSS)10H+10H+(SISI)/ /(DIDI)+ +(BPBP)+8+8位或位或1616位位移量位位移量第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如:MOV AXMOV AX,3BX SI 3BX SI v该指令的源操作数采用寄存器相对寻址方式。该指令的源操作数采用寄存器相对寻址方式。v若(若(DSDS)=2000H=2000H,(,(BXBX)=2008H=2008H,(,(SISI)=5H=5H,那么指令执行后,(那么指令执
25、行后,(AXAX)=1225H=1225H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统相对基址变址寻址方式的指令执行示意图相对基址变址寻址方式的指令执行示意图第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3 80863.3 8086指令系统指令系统v80868086指令系统包括六大类指令:指令系统包括六大类指令:v数据传送指令数据传送指令v算术运算指令算术运算指令v逻辑运算和移位指令逻辑运算和移位指令v串操作指令串操作指令v控制转移指令控制转移指令v处理器控制指令处理器控制指令第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系
26、统v80868086汇编指令中的操作数可以有零个、一个或两汇编指令中的操作数可以有零个、一个或两个,通常称为零地址、一地址或二地址指令。个,通常称为零地址、一地址或二地址指令。v二地址指令中的两个操作数分别称为源操作数和二地址指令中的两个操作数分别称为源操作数和目标操作数。目标操作数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.13.3.1数据传送指令数据传送指令v数据传送指令是将数据或地址传送到寄存器、存数据传送指令是将数据或地址传送到寄存器、存储单元或储单元或I/OI/O端口中。端口中。v包括包括5 5类:类:v通用数据传送指令;通用数据传送指令;v累加器专
27、用传送指令;累加器专用传送指令;v地址传送指令;地址传送指令;v标志传送指令;标志传送指令;v数据类型转换指令。数据类型转换指令。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统数据传送指令的共同特点数据传送指令的共同特点v除了除了POPFPOPF和和SAHFSAHF指令外,其他的数据传送指令的指令外,其他的数据传送指令的执行结果都不影响标志位。执行结果都不影响标志位。v指令中如果列出两个操作数,则指令的执行过程指令中如果列出两个操作数,则指令的执行过程是:目标操作数是:目标操作数源操作数。源操作数。v指令中如果仅列出一个操作数,则另一个操作数指令中如果仅列出一个操作数,则
28、另一个操作数为隐含操作数。为隐含操作数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.通用数据传送指令通用数据传送指令v1 1)传送指令传送指令v格式:格式:MOV MOV 目标操作数,源操作数目标操作数,源操作数 v功能:将源操作数的内容(一个字或一个字节)功能:将源操作数的内容(一个字或一个字节)传送到目标操作数指定的寄存器或内存单元,源传送到目标操作数指定的寄存器或内存单元,源操作数内容不变。操作数内容不变。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统MOVMOV指令举例指令举例MOV ALMOV AL,5 5;字节传送,立即数送通用
29、寄存器;字节传送,立即数送通用寄存器MOV AXMOV AX,BXBX;字传送,通用寄存器送通用寄存器;字传送,通用寄存器送通用寄存器MOV DSMOV DS,AXAX;字传送,通用寄存器送段寄存器;字传送,通用寄存器送段寄存器第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统MOVMOV指令的使用说明指令的使用说明v源操作数可以是立即数、寄存器或内存操作数。源操作数可以是立即数、寄存器或内存操作数。v目标操作数可以是寄存器或内存操作数。目标操作数可以是寄存器或内存操作数。v立即数和立即数和CSCS寄存器只能作为源操作数,不允许作寄存器只能作为源操作数,不允许作为目标操作数。
30、为目标操作数。vIPIP和和PSWPSW都不都不可可作为源操作数或是目标操作数。作为源操作数或是目标操作数。v立即数不允许直接传送至立即数不允许直接传送至DSDS、ESES或或SSSS寄存器。寄存器。v源操作数和目标操作数不允许同时是内存操作数,源操作数和目标操作数不允许同时是内存操作数,也不允许同时是段寄存器。也不允许同时是段寄存器。v源操作数和目标操作数的类型必须相同,即同为源操作数和目标操作数的类型必须相同,即同为字节类型或字类型。字节类型或字类型。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.通用数据传送指令通用数据传送指令(续)(续)v2 2)数据交换指
31、令数据交换指令v格式:格式:XCHGXCHG 目标操作数,源操作数目标操作数,源操作数 v功能:源操作数的内容(一个字或字节)与目标功能:源操作数的内容(一个字或字节)与目标操作数的内容(一个字或字节)互换。操作数的内容(一个字或字节)互换。v例如:例如:XCHG BLXCHG BL,AHAH ;字节交换,寄存器与寄存器的内容交换;字节交换,寄存器与寄存器的内容交换XCHG AXXCHG AX,BXSIBXSI ;字交换,寄存器与内存单元的内容交换;字交换,寄存器与内存单元的内容交换第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统XCHGXCHG指令的使用说明指令的使用说明
32、v源操作数和目标操作数都可以是寄存器或内存操源操作数和目标操作数都可以是寄存器或内存操作数。作数。v源操作数和目标操作数不可同时是内存操作数。源操作数和目标操作数不可同时是内存操作数。v源操作数和目标操作数不可以同时是寄存器(累源操作数和目标操作数不可以同时是寄存器(累加器)加器)AXAX。v段寄存器、寄存器段寄存器、寄存器IPIP或立即数不可以作为源操作或立即数不可以作为源操作数或目标操作数。数或目标操作数。v例如:例如:XCHG AXXCHG AX,2011H2011H;源操作数不能是立即数源操作数不能是立即数XCHG CSXCHG CS,5SI5SI;CSCS不能作为操作数不能作为操作数
33、XCHG AXXCHG AX,AX AX ;源操作数和目标操作数不可同是源操作数和目标操作数不可同是AXAX第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-13-1】若两个字数据分别存储在内存单元】若两个字数据分别存储在内存单元NUM1NUM1和和NUM2NUM2中,编写汇编程序段将这两个内存单中,编写汇编程序段将这两个内存单元的内容互换。元的内容互换。v汇编程序段如下:汇编程序段如下:MOV AXMOV AX,NUM1 NUM1 XCHG AXXCHG AX,NUM2 NUM2 MOV NUM1MOV NUM1,AX AX 第第3 3章章 80868086寻
34、址方式与指令系统寻址方式与指令系统堆栈堆栈v堆栈是一块按照堆栈是一块按照“后进先出后进先出”原则工作的内存区原则工作的内存区域。域。v把数据从栈顶存入堆栈中的操作称为入栈(或压把数据从栈顶存入堆栈中的操作称为入栈(或压入);入);v把数据通过栈顶从堆栈中取出的操作称为出栈把数据通过栈顶从堆栈中取出的操作称为出栈(或弹出)。(或弹出)。v堆栈常被用于数据的暂存、交换、子程序的参数堆栈常被用于数据的暂存、交换、子程序的参数传递等场合。传递等场合。v在调用子程序或转入中断服务程序时,堆栈是默在调用子程序或转入中断服务程序时,堆栈是默认的被用于保存返回地址的内存区域。认的被用于保存返回地址的内存区域。
35、v为了实现子程序或中断嵌套,也必须使用堆栈技为了实现子程序或中断嵌套,也必须使用堆栈技术。术。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v在在80868086系统中,堆栈所在的段就是堆栈段,它可系统中,堆栈所在的段就是堆栈段,它可以占用的最大空间是以占用的最大空间是64KB64KB。v堆栈段的段地址由堆栈段的段地址由SSSS寄存器指示寄存器指示。v堆栈指针寄存器堆栈指针寄存器SPSP始终指示栈顶的偏移地址并随始终指示栈顶的偏移地址并随着入栈和出栈操作而自动变化。着入栈和出栈操作而自动变化。v当进行压入操作后堆栈指针当进行压入操作后堆栈指针达达到到定义定义值,表明堆值,
36、表明堆栈满;当执行弹出操作后堆栈指针回到初值,表栈满;当执行弹出操作后堆栈指针回到初值,表明堆栈空。明堆栈空。v当栈满时,再压入数据,称为当栈满时,再压入数据,称为“堆栈溢出堆栈溢出”。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.通用数据传送指令通用数据传送指令(续)(续)v3)3)堆栈操作指令堆栈操作指令v80868086指令系统中指令系统中:v堆栈操作指令中操作数的类型只能是字,不能堆栈操作指令中操作数的类型只能是字,不能是字节。是字节。v立即数不能作为操作数。立即数不能作为操作数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统进栈指令
37、进栈指令v格式:格式:PUSH PUSH 源操作数源操作数v功能:源操作数入栈。功能:源操作数入栈。v指令的执行如下操作:指令的执行如下操作:v (SP) (SP) (SP) -2 (SP) -2 v (SS:SP) (SS:SP)源操作数源操作数 v说明:说明:v源操作数可以是寄存器或是内存操作数。源操作数可以是寄存器或是内存操作数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统出栈指令出栈指令v格式:格式:POP POP 目标操作数目标操作数v功能:数据出栈,存入目标操作数。功能:数据出栈,存入目标操作数。v指令的执行如下操作:指令的执行如下操作:v 目标操作数目标操
38、作数(SS:SP) (SS:SP) v (SP) (SP) (SP) +2 (SP) +2 v说明:说明:v目标操作数可以是段寄存器、目标操作数可以是段寄存器、1616位寄存器或内存位寄存器或内存操作数。操作数。v当目标操作数是段寄存器时,不能是当目标操作数是段寄存器时,不能是CSCS寄存器。寄存器。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统【例【例3-23-2】v设设(SS)=2011H(SS)=2011H,(SP)=0020H(SP)=0020H,依次执行下列汇编,依次执行下列汇编指令后,分析堆栈中的数据和寄存器指令后,分析堆栈中的数据和寄存器AXAX、BXBX、
39、SPSP的变化情况。的变化情况。MOV AX,0103HMOV AX,0103HMOV BX,1228HMOV BX,1228HPUSH AXPUSH AXPUSH BXPUSH BXPOP BXPOP BX第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统2.2.累加器专用传送指令累加器专用传送指令v(1 1)换码指令)换码指令v格式一:格式一:XLATXLATv格式二:格式二:XLAT XLAT 表格首地址表格首地址 v功能:将内存表格中
40、某一单元的值传送至寄存器功能:将内存表格中某一单元的值传送至寄存器ALAL,实现一种编码到另一种编码的转换。例如,实现一种编码到另一种编码的转换。例如,把字符的扫描码转换成把字符的扫描码转换成ASCIIASCII码。码。v指令的执行如下操作:指令的执行如下操作:v把数据段中偏移地址为把数据段中偏移地址为BX+ALBX+AL的内存单元的内容的内存单元的内容送到送到ALAL中,即:中,即:(AL) (AL) ( BX + AL) ( BX + AL)。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统XLATXLAT指令使用说明指令使用说明v源操作数、目标操作数均隐含。源操作数、
41、目标操作数均隐含。v该指令隐含说明:寄存器该指令隐含说明:寄存器BXBX保存内存表格的首地保存内存表格的首地址;寄存器址;寄存器ALAL保存表格中某单元在此表格中的偏保存表格中某单元在此表格中的偏移量。因此,在使用该指令之前,必须先初始化移量。因此,在使用该指令之前,必须先初始化BXBX和和ALAL这两个寄存器。这两个寄存器。v该指令能访问的内存表格中的数据只能是字节类该指令能访问的内存表格中的数据只能是字节类型的。型的。v该指令能访问的内存表格的最大容量是该指令能访问的内存表格的最大容量是256256字节。字节。v格式二中的表格首地址部分,只是为了提高程序格式二中的表格首地址部分,只是为了提
42、高程序的可读性而设置的。指令执行时,使用的可读性而设置的。指令执行时,使用BXBX的值作的值作为表格首地址。为表格首地址。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统XLATXLAT指令用法举例指令用法举例v若若(DS)=2000H(DS)=2000H,(BX)=0020H(BX)=0020H,(AL)=9H(AL)=9H,v则执行指令则执行指令XLATXLAT后,后,(AL)=39H(AL)=39H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统(2 2)输入)输入/ /输出指令(输出指令(I/OI/O指令)指令)v(1 1)输入指令)输入指令v
43、格式一:格式一:IN ALIN AL,端口地址,端口地址v格式二:格式二:IN AXIN AX,端口地址,端口地址v格式三:格式三:IN ALIN AL,DXDXv格式四:格式四:IN AXIN AX,DXDXv功能:从指令中指定的功能:从指令中指定的I/OI/O端口读入一字节数据端口读入一字节数据到到ALAL或一个字数据到或一个字数据到AXAX。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统(2 2)输出指令)输出指令v格式一:格式一:OUT OUT 端口地址,端口地址,ALALv格式二:格式二:OUT OUT 端口地址,端口地址,AXAXv格式三:格式三:OUT DX
44、OUT DX,ALALv格式四:格式四:OUT DXOUT DX,AXAXv功能:将功能:将ALAL或或AXAX的内容输出到一个的内容输出到一个8 8位位I/OI/O端口或端口或1616位位I/OI/O端口。端口。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统IN/OUTIN/OUT指令的使用说明指令的使用说明v采用格式一和格式二时,端口地址的取值范围是:采用格式一和格式二时,端口地址的取值范围是:0 0FFHFFH,可以寻址,可以寻址256256个个I/OI/O端口。端口。v当端口地址值超过当端口地址值超过255D255D时,只能采用格式三或格时,只能采用格式三或格式四
45、,把端口地址保存到寄存器式四,把端口地址保存到寄存器DXDX中,此时,端中,此时,端口地址的取值范围是:口地址的取值范围是:0 0FFFFHFFFFH,可以寻址,可以寻址6553665536个个I/OI/O端口。端口。v当端口是当端口是8 8位时,目标操作数选用位时,目标操作数选用ALAL寄存器;当寄存器;当端口是端口是1616位时,目标操作数选位时,目标操作数选AXAX寄存器。寄存器。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统IN/OUTIN/OUT指令的使用举例指令的使用举例vMOV DX,60HMOV DX,60H; ;端口地址送端口地址送DXDX寄存器中寄存器
46、中vIN AL,DXIN AL,DX; ;从从60H60H端口写入一个端口写入一个8 8位数位数vOUT 90H,AXOUT 90H,AX; ;将将1616位数输出到位数输出到90H90H端口端口第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.地址传送指令地址传送指令v在汇编程序中,地址是一种特殊操作数,区别于在汇编程序中,地址是一种特殊操作数,区别于一般数据操作数,它无符号,长度为一般数据操作数,它无符号,长度为1616位。位。v在在80868086系统中,有系统中,有专门的指令进行地址传送。专门的指令进行地址传送。第第3 3章章 80868086寻址方式与指令系
47、统寻址方式与指令系统(1 1)取有效地址指令)取有效地址指令LEALEAv格式:格式:LEA r16LEA r16,memmemv功能:取内存单元功能:取内存单元memmem的有效地址,送到的有效地址,送到1616位寄位寄存器存器r16r16中,即:中,即:r16 r16 EA(mem) EA(mem)。v例如,设例如,设DS=2100HDS=2100H,BX=100HBX=100H,SI=10HSI=10H,(DS:110H)=1234H(DS:110H)=1234H,则指令:,则指令:vLEA BX,BX+SI LEA BX,BX+SI v执行后,执行后,(BX)=(BX)+(SI)=11
48、0H(BX)=(BX)+(SI)=110H。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)地址指针装入)地址指针装入DSDS指令指令LDSLDSv格式:格式:LDS r16LDS r16,m32m32v功能:把内存中的功能:把内存中的3232位源操作数中的低位源操作数中的低1616位送到位送到指定寄存器指定寄存器r16r16中,高中,高1616位送到段寄存器位送到段寄存器DSDS中。中。即:即:r16 r16 m32 m32低低1616位;位;DSDS m32 m32高高1616位。位。v(3 3)地址指针装入)地址指针装入ESES指令指令LESLESv把上述
49、指令中的把上述指令中的DSDS换成换成ESES,即成为,即成为LESLES指令。指令。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统4.4.标志传送指令标志传送指令v标志寄存器用于记载指令执行引起的状态变化及标志寄存器用于记载指令执行引起的状态变化及一些特殊控制位,以此作为控制程序执行的依据。一些特殊控制位,以此作为控制程序执行的依据。v标志寄存器是特殊寄存器,不能像一般数据寄存标志寄存器是特殊寄存器,不能像一般数据寄存器那样随意操作,以免其中的值发生变化。器那样随意操作,以免其中的值发生变化。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1
50、)取标志指令)取标志指令LAHFLAHFv格式:格式:LAHFLAHFv该指令中的源操作数隐含为标志寄存器低该指令中的源操作数隐含为标志寄存器低8 8位,位,目标操作数隐含为目标操作数隐含为AHAH。v功能:把功能:把1616位的标志寄存器低位的标志寄存器低8 8位送寄存器位送寄存器AHAH。v(2 2)置标志指令)置标志指令SAHFSAHFv格式:格式:SAHFSAHFv该指令中的源操作数隐含为该指令中的源操作数隐含为AHAH,目标操作数隐含,目标操作数隐含为标志寄存器。为标志寄存器。v功能:把寄存器功能:把寄存器AHAH中内容送至中内容送至1616位的标志寄存器位的标志寄存器低低8 8位位
51、,此操作是此操作是LAHFLAHF的逆操作。的逆操作。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-33-3】 编写汇编程序段,把标志寄存器的编写汇编程序段,把标志寄存器的CFCF位求反,其他位不变。位求反,其他位不变。LAHFLAHF; ;取标志寄存器的低取标志寄存器的低8 8位位XOR AH,01HXOR AH,01H; ;最低位求反最低位求反, ,其他位不变其他位不变SAHFSAHF; ;送入标志寄存器的低送入标志寄存器的低8 8位位第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)标志入栈指令)标志入栈指令PUSHFPU
52、SHFv格式:格式:PUSHFPUSHFv该指令中的源操作数隐含为标志寄存器,目标操该指令中的源操作数隐含为标志寄存器,目标操作数隐含为堆栈区。作数隐含为堆栈区。v功能:标志寄存器入栈。功能:标志寄存器入栈。v SP SP SP SP2 2; v (SP + 1(SP + 1,SP) SP) FLAG FLAG。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)标志弹出指令)标志弹出指令POPFPOPFv格式:格式:POPFPOPFv该指令中的源操作数隐含为堆栈区,目标操作数该指令中的源操作数隐含为堆栈区,目标操作数隐含为标志寄存器。隐含为标志寄存器。v功能:数据
53、出栈到标志寄存器。功能:数据出栈到标志寄存器。v FLAG FLAG (SP+1 (SP+1,SP)SP); v SP SP SP + 2 SP + 2。v此操作是此操作是LAHFLAHF的逆操作。的逆操作。vSAHFSAHF和和POPFPOPF指令直接改变标志寄存器的值。利用指令直接改变标志寄存器的值。利用这一特性,可以非常方便地改变有关的标志位。这一特性,可以非常方便地改变有关的标志位。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-43-4】 编写汇编程序段,把标志寄存器编写汇编程序段,把标志寄存器TFTF位清零,其他标志位不变。位清零,其他标志位不变。
54、PUSHFPUSHF; ;标志寄存器入栈标志寄存器入栈POP AXPOP AX; ;取标志寄存器内容取标志寄存器内容AND AX,0FEFFHAND AX,0FEFFH;TF;TF清零清零, ,其他位不变其他位不变PUSH AXPUSH AX; ;新值入栈新值入栈POPFPOPF; ;送入标志寄存器送入标志寄存器第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统5.5.数据类型转换指令数据类型转换指令v(1 1)字节转换为字指令)字节转换为字指令v格式:格式:CBWCBWv功能:把寄存器功能:把寄存器ALAL中数据的符号位扩到中数据的符号位扩到AHAH寄存器寄存器中,使字节转
55、换为字。中,使字节转换为字。v指令的执行如下操作:当指令的执行如下操作:当AL80HAL80H时,时,AHAH00H00H;当当ALAL80H80H时,时,AHAHFFHFFH。v说明:说明:v该指令中的源操作数隐含为寄存器该指令中的源操作数隐含为寄存器ALAL,目标操作,目标操作数隐含为寄存器数隐含为寄存器AXAX。v一个用补码表示的数经一个用补码表示的数经CBWCBW指令进行符号位扩展指令进行符号位扩展后,数值大小不变。后,数值大小不变。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)字转换为双字指令)字转换为双字指令v格式:格式:CWDCWDv功能:把寄存
56、器功能:把寄存器AXAX中数据的符号位扩到中数据的符号位扩到DXDX寄存器寄存器中,使字转换为双字。中,使字转换为双字。v指令的执行如下操作:当指令的执行如下操作:当AL8000HALBAB;如果;如果SF=1SF=1,则,则ABABAB;如果;如果SF=0SF=0,则,则ABA99或或AF=1AF=1,则进行,则进行(AL)(AL)(AL)+06H(AL)+06H修正,同时修正,同时AFAF置置1 1。v 若若ALAL的高的高4 4位位99或或CF=1CF=1,则进行,则进行(AL)(AL)(AL)+60H(AL)+60H修正,同时修正,同时CFCF置置1 1。v说明:说明:v目标操作数隐含
57、为寄存器目标操作数隐含为寄存器ALAL。vDAADAA指令紧跟在加法指令之后用。指令紧跟在加法指令之后用。v指令执行后,影响指令执行后,影响CFCF、PFPF、AFAF、ZFZF、SFSF,对,对OFOF无无意义。意义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-83-8】 编写汇编程序段,用压缩编写汇编程序段,用压缩BCDBCD码编码码编码并计算并计算12D+ 28D12D+ 28D。MOV AL,12HMOV AL,12HADD AL,28H ADD AL,28H ;AL=3AH,AF=1,CF=0;AL=3AH,AF=1,CF=0DAA DAA ;A
58、L=40H;AL=40H第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)压缩)压缩BCDBCD数减法调整指令数减法调整指令v格式:格式:DASDASv功能:功能:v 若若ALAL的低的低4 4位位99或或AF=1AF=1,则进行,则进行(AL)(AL)(AL)-(AL)-06H06H修正,同时修正,同时AFAF置置1 1。v 若若ALAL的高的高4 4位位99或或CF=1CF=1,则进行,则进行(AL)(AL)(AL)-(AL)-60H60H修正,同时修正,同时CFCF置置1 1。v说明:说明:v目标操作数隐含为寄存器目标操作数隐含为寄存器ALAL。vDASDA
59、S指令紧跟在减法指令之后用。指令紧跟在减法指令之后用。v该指令执行后,影响标志:该指令执行后,影响标志:CFCF、PFPF、AFAF、ZFZF、SFSF,对,对OFOF无意义。无意义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-93-9】 编写汇编程序段,用压缩编写汇编程序段,用压缩BCDBCD码编码码编码并计算并计算37D-19D37D-19D。MOV AL,37HMOV AL,37HSUB AL,19H SUB AL,19H ;AL=1EH,AF=1,CF=0;AL=1EH,AF=1,CF=0DAS DAS ;AL=18H,AF=1;AL=18H,AF
60、=1第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)非压缩的)非压缩的BCDBCD码的加法调整指令(码的加法调整指令(ASCIIASCII码码的加法调整指令)的加法调整指令)v非压缩的非压缩的BCDBCD码用码用8 8个二进制位表示个二进制位表示1 1位十进制数,位十进制数,通常只用低通常只用低4 4位,高位,高4 4位置位置0 0。数字。数字0 09 9的的ASCIIASCII码码为为30H30H39H39H,其低,其低4 4位的编码与位的编码与BCDBCD编码一致,所编码一致,所以又把非压缩的以又把非压缩的BCDBCD码调整称为码调整称为ASCIIASCII
61、码调整。码调整。v格式:格式:AAA AAA 第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统AAAAAA指令的功能指令的功能v 若若ALAL中低中低4 4位位999或或AF=1AF=1,则进行,则进行(AL)(AL)(AL)+06H(AL)+06H修正,同时,修正,同时,(AH)(AH)(AH)+1(AH)+1,AFAF置置1 1。v 清除清除ALAL寄存器的高寄存器的高4 4位。位。v AF AF值送值送CFCF。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统AAAAAA指令的使用说明指令的使用说明v目标操作数隐含为寄存器目标操作数隐含为寄存器AH
62、AH和和ALAL。vAAAAAA指令紧跟在加法指令之后用。指令紧跟在加法指令之后用。v该指令执行后,影响标志:该指令执行后,影响标志:CFCF、AFAF,对,对PFPF、OFOF、ZFZF和和SFSF的影响不确定。的影响不确定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-103-10】 编写汇编程序段,用非压缩编写汇编程序段,用非压缩BCDBCD码码编码并计算编码并计算7+97+9。MOV AL,7 MOV AL,7 ;AL=37H;AL=37HADD AL,9 ADD AL,9 ;AL=70H,AF=1,CF=0;AL=70H,AF=1,CF=0AAA
63、AAA ;AL=06H,CF=AF=1;AL=06H,CF=AF=1第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)非压缩的)非压缩的BCDBCD码的减法调整指令(码的减法调整指令(ASCIIASCII码码的减法调整指令)的减法调整指令)v格式:格式:AASAASv功能:功能:v 如果如果ALAL中低中低4 4位小于位小于9 9且且AF=0AF=0,由跳过,由跳过;v 如果如果ALAL中低中低4 4位大于位大于9 9或或AF=1AF=1(即低(即低4 4位向高位向高4 4位有借位),减位有借位),减6 6调整,且调整,且AFAF置置1 1;v 清除清除ALAL寄
64、存器的高寄存器的高4 4位;位;v AF AF值送值送CFCF。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统AASAAS指令的使用说明指令的使用说明v目标操作数隐含为寄存器目标操作数隐含为寄存器AHAH和和ALAL。vAASAAS指令紧跟在减法指令之后用。指令紧跟在减法指令之后用。v该指令执行后,影响标志:该指令执行后,影响标志:CFCF、AFAF,对,对PFPF、OFOF、ZFZF和和SFSF的影响不确定。的影响不确定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-113-11】 编写汇编程序段,用非压缩编写汇编程序段,用非压缩BC
65、DBCD码码编码并计算编码并计算17-917-9。MOV AL,7H MOV AL,7H ;AL=07H;AL=07HMOV AH,1H MOV AH,1H ;AH=1H;AH=1HSUB AL,9H SUB AL,9H ;AL=0FEH,AF=1,CF=1;AL=0FEH,AF=1,CF=1AAS AAS ;AL=8H,CF=AF=1,AH=0;AL=8H,CF=AF=1,AH=0第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(5 5)非压缩的)非压缩的BCDBCD码的乘法调整指令(码的乘法调整指令(ASCIIASCII码码的乘法调整指令)的乘法调整指令)v格式:格式
66、:AAMAAMv功能:把功能:把ALAL寄存器的内容除以寄存器的内容除以1010,商放在,商放在AHAH寄存寄存器中,余数保存在器中,余数保存在ALAL寄存器中,用于寄存器中,用于MULMUL之后,之后,把把ALAL中的乘积调整成非压缩的中的乘积调整成非压缩的BCDBCD码,结果存于码,结果存于寄存器寄存器AXAX中。中。v说明:说明:v目标操作数隐含为寄存器目标操作数隐含为寄存器AHAH和和ALAL。vAAMAAM指令紧跟在指令紧跟在MULMUL指令之后用。指令之后用。v该指令执行后,影响标志:该指令执行后,影响标志:PFPF、ZFZF和和SFSF,对,对CFCF、AFAF和和OFOF的影响
67、不确定。的影响不确定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-123-12】 编写汇编程序,用非压缩编写汇编程序,用非压缩BCDBCD码编码编码并计算码并计算9 9 3 3。MOV AL,9H MOV AL,9H ;AL=0000 1001B;AL=0000 1001BMOV BL,3H MOV BL,3H ;BL=0000 0011B;BL=0000 0011BMUL BL ;AH=0,AL=00011011B=27DMUL BL ;AH=0,AL=00011011B=27DAAM AAM ;AH=02H,AL=07H(;AH=02H,AL=07H(
68、因为因为2727 10=210=2 7)7)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(6 6)非压缩的)非压缩的BCDBCD码的除法调整指令(码的除法调整指令(ASCIIASCII码码的除法调整指令)的除法调整指令)v格式:格式:AADAADv功能:将功能:将AHAH寄存器的内容乘以寄存器的内容乘以1010后加上后加上ALAL的内容,的内容,结果回送结果回送ALAL,同时将,同时将AHAH清清0 0。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统AADAAD指令使用说明指令使用说明v被除数是被除数是2 2位十进制数,存于寄存器位十进制数,存于
69、寄存器AXAX中,中,AHAH中中为十位上的数,为十位上的数,ALAL中为个位上的数,除数是中为个位上的数,除数是1 1位位十进制数。十进制数。v该指令用在该指令用在DIVDIV之前对被除数进行调整,然后,之前对被除数进行调整,然后,用用DIVDIV指令做除法,所得之商还要用指令做除法,所得之商还要用AAMAAM指令进行指令进行调整后,才可以得到正确的非压缩调整后,才可以得到正确的非压缩BCDBCD结果。结果。v该指令执行后,影响标志:该指令执行后,影响标志:PFPF、ZFZF和和SFSF,对,对CFCF、AFAF和和OFOF的影响不确定。的影响不确定。第第3 3章章 80868086寻址方式
70、与指令系统寻址方式与指令系统v【例【例3-133-13】 编写汇编程序段,用非压缩编写汇编程序段,用非压缩BCDBCD码码编码并计算编码并计算7373 2 2。MOV AX,0703HMOV AX,0703HMOV BL,02HMOV BL,02HAAD AAD ;(AL)=49H,(AH)=0;(AL)=49H,(AH)=0DIV BL DIV BL ;(AL)=24H(;(AL)=24H(商商),(AH)=01H(),(AH)=01H(余数余数) )AAM AAM ;(AL)=03H,(AH)=06H;(AL)=03H,(AH)=06H第第3 3章章 80868086寻址方式与指令系统寻址
71、方式与指令系统3.3.33.3.3位运算指令位运算指令v位运算指令分为:位运算指令分为:v逻辑运算指令逻辑运算指令v移位指令移位指令v循环移位指令循环移位指令第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.逻辑运算指令逻辑运算指令v逻辑非(逻辑非(NOTNOT)v逻辑与(逻辑与(ANDAND)v逻辑测试(逻辑测试(TESTTEST)v逻辑或(逻辑或(OROR)v逻辑异或(逻辑异或(XORXOR)指令)指令v这些逻辑运算指令的操作数可以是这些逻辑运算指令的操作数可以是8 8位、位、1616位,位,运算按位进行。对操作数的规定与运算按位进行。对操作数的规定与MOVMOV
72、指令相同。指令相同。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)逻辑非指令)逻辑非指令v格式:格式:NOT destNOT destv功能:功能:(dest) (dest) (dest) (dest)v说明:说明:v不影响标志位。不影响标志位。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)逻辑与指令)逻辑与指令v格式:格式:AND destAND dest,srcsrcv功能:功能:(dest) (dest) (dest) (dest) (src) (src)v说明:说明:v对标志位的影响是:对标志位的影响是:CFCF、OF
73、OF清零;影响清零;影响SFSF、ZFZF、PFPF;AFAF的值不定。的值不定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)逻辑测试指令)逻辑测试指令v格式:格式:TEST destTEST dest,srcsrcv功能:功能:(dest) (dest) (src) (src)v说明:说明:v执行相与操作,以便影响标志位,但不保留结果。执行相与操作,以便影响标志位,但不保留结果。v对标志位的影响是:对标志位的影响是:CFCF、OFOF清零;影响清零;影响SFSF、ZFZF、PFPF;AFAF的值不定。的值不定。第第3 3章章 80868086寻址方式与指令
74、系统寻址方式与指令系统v(4 4)逻辑或指令)逻辑或指令v格式:格式:OR destOR dest,srcsrcv功能:功能:(dest) (dest) (dest) (dest) (src) (src)v说明:说明:v对标志位的影响是:对标志位的影响是:CFCF、OFOF清零;影响清零;影响SFSF、ZFZF、PFPF;AFAF的值不定。的值不定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(5 5)逻辑异或指令)逻辑异或指令v格式:格式:XOR destXOR dest,srcsrcv功能:功能:(dest) (dest) (dest)(dest)(src)(sr
75、c)v说明:说明:v对标志位的影响是:对标志位的影响是:CFCF、OFOF清零;影响清零;影响SFSF、ZFZF、PFPF;AFAF的值不定。的值不定。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如:AND AL,BL AND AL,BL ;AL;ALALAL BLBLXOR AX,DIXOR AX,DIOR BX,0FF02H OR BX,0FF02H ;(BX);(BX)(BX)(BX) FF02HFF02HNOT BYTE PTR BX NOT BYTE PTR BX ; ; 字节内容求反字节内容求反TEST AH,4 ;AHTEST AH,4 ;AH
76、4,AH4,AH不变不变, ,只改变标志只改变标志第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-143-14】 编写汇编程序段,把数字编写汇编程序段,把数字8 8,变成,变成字符字符“8 8”。MOV AL,8HMOV AL,8HOR AL,30H OR AL,30H ;AL=38H=8;AL=38H=8v【例【例4-154-15】 编写汇编程序段,从端口编写汇编程序段,从端口80H80H读取读取一字节,将其一字节,将其D1D1位求反后,从位求反后,从80H80H送出。送出。IN AL,80HIN AL,80HXOR AL,00000010BXOR AL,0
77、0000010BOUT 80H,ALOUT 80H,AL第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-163-16】 编写汇编程序段,将寄存器编写汇编程序段,将寄存器AXAX清零。清零。XOR AX,AXXOR AX,AXv还有哪些可以将还有哪些可以将AXAX清零的指令?比较之。清零的指令?比较之。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统2.2.移位指令移位指令v移位指令可以对寄存器或存储单元的内容按字节移位指令可以对寄存器或存储单元的内容按字节或字进行操作或字进行操作。第第3 3章章 80868086寻址方式与指令系统寻址方式与
78、指令系统v(1 1)逻辑左移指令)逻辑左移指令v格式:格式:SHL destSHL dest,CNTCNTv功能:目标操作数左移功能:目标操作数左移CNTCNT次,最低位补次,最低位补0 0,最高,最高位移至标志位位移至标志位CFCF中。中。v说明:说明:vCNTCNT代表移动次数。当代表移动次数。当CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF、ZFZF、SFSF、PFPF的值由运算结果定。的值由运算结果定。vCNT = 1CNT = 1时,若移位后符号位发生变化,则标志时,若移位后符号位发生变化,则标志位位OF=1OF=1,否则,否则OF=0OF=0。v
79、CNT 1CNT 1时,对时,对OFOF无定义。无定义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)逻辑右移指令)逻辑右移指令v格式:格式:SHR destSHR dest,CNTCNTv功能:目标操作数右移功能:目标操作数右移CNTCNT次,最低位移至标志次,最低位移至标志位位CFCF中,最高位补中,最高位补0 0。v说明:说明:vCNTCNT代表移动次数。当代表移动次数。当CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF、ZFZF、SFSF、PFPF的值由运算结果定。的值由运算结果定。vCNT = 1CNT = 1时,若
80、移位后符号位发生变化,则标志时,若移位后符号位发生变化,则标志位位OF=1OF=1,否则,否则OF=0OF=0。vCNT 1CNT 1时,对时,对OFOF无定义。无定义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)算术左移指令)算术左移指令v格式:格式:SAL destSAL dest,CNTCNTv功能:目标操作数左移功能:目标操作数左移CNTCNT次,最低位补次,最低位补0 0,最高,最高位移至标志位位移至标志位CFCF中。中。v说明:说明:vCNTCNT代表移动次数。当代表移动次数。当CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说
81、明。vCFCF、ZFZF、SFSF、PFPF的值由运算结果定。的值由运算结果定。vCNT = 1CNT = 1时,若移位后符号位发生变化,则标志时,若移位后符号位发生变化,则标志位位OF=1OF=1,否则,否则OF=0OF=0。vCNT 1CNT 1时,对时,对OFOF无定义。无定义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)算术右移指令)算术右移指令v格式:格式:SAR destSAR dest,CNTCNTv功能:目标操作数右移功能:目标操作数右移CNTCNT次,最低位移至标志次,最低位移至标志位位CFCF中,最高位不变。中,最高位不变。v说明:说明:
82、vCNTCNT代表移动次数。当代表移动次数。当CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF、ZFZF、SFSF、PFPF的值由运算结果定。的值由运算结果定。vCNT = 1CNT = 1时,若移位后符号位发生变化,则标志时,若移位后符号位发生变化,则标志位位OF=1OF=1,否则,否则OF=0OF=0。vCNT 1CNT 1时,对时,对OFOF无定义。无定义。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如,分别给出下列移位指令执行结果。设例如,分别给出下列移位指令执行结果。设AL=0B4H=10110100BAL=0B4H=10
83、110100B,CF = 1CF = 1,CL = 4CL = 4。SAL AL,1 SAL AL,1 ;AL=01101000B,CF=1,OF=1;AL=01101000B,CF=1,OF=1SAR AL,1 SAR AL,1 ;AL=11011010B,CF=0,OF=0;AL=11011010B,CF=0,OF=0SHL AL,1 SHL AL,1 ;AL=01101000B,CF=1,OF=1;AL=01101000B,CF=1,OF=1SHR AL,CL SHR AL,CL ;AL=00001011B,CF=0,OF;AL=00001011B,CF=0,OF无定义无定义第第3 3章
84、章 80868086寻址方式与指令系统寻址方式与指令系统移位指令的使用说明移位指令的使用说明v这组指令除了可以实现基本的移位操作外,还可这组指令除了可以实现基本的移位操作外,还可以用于实现数倍增(左移)或倍减(右移),使以用于实现数倍增(左移)或倍减(右移),使用这种方法比直接使用乘、除法效率要高得多。用这种方法比直接使用乘、除法效率要高得多。v在不溢出的情况下,可用逻辑移位指令实现无符在不溢出的情况下,可用逻辑移位指令实现无符号数的乘、除,算术移位指令实现符号数的乘、号数的乘、除,算术移位指令实现符号数的乘、除。除。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【
85、例3-173-17】 设无符号数设无符号数X X在寄存器在寄存器ALAL中,用移中,用移位指令实现位指令实现X * 10X * 10的运算。的运算。MOV AH,0MOV AH,0SAL AX,1 SAL AX,1 ;AX;AX数数X*2X*2MOV BX,AXMOV BX,AXMOV CL,2MOV CL,2SAL AX,CL SAL AX,CL ;AX;AX数数X*8X*8ADD AX,BX ADD AX,BX ;AX;AX数数X*10X*10第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.循环移位指令循环移位指令第第3 3章章 80868086寻址方式与指令系
86、统寻址方式与指令系统v(1 1)不带进位位循环左移指令)不带进位位循环左移指令v格式:格式:ROL destROL dest,CNTCNTv功能:目标操作数循环左移功能:目标操作数循环左移CNTCNT次,最高位移至次,最高位移至最低位的同时移至标志位最低位的同时移至标志位CFCF中。中。v说明:说明:vCNTCNT代表移动次数。代表移动次数。CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF由运算结果定;不影响由运算结果定;不影响SFSF、ZFZF、AFAF、PFPF;对;对OFOF的影响同的影响同SHLSHL。第第3 3章章 80868086寻址方式与指令系统
87、寻址方式与指令系统v(2 2)不带进位位循环右移指令)不带进位位循环右移指令v格式:格式:ROR destROR dest,CNTCNTv功能:目标操作数循环右移功能:目标操作数循环右移CNTCNT次,最低位移至次,最低位移至最高位的同时移至标志位最高位的同时移至标志位CFCF中。中。v说明:说明:vCNTCNT代表移动次数,代表移动次数,CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF由运算结果定;不影响由运算结果定;不影响SFSF、ZFZF、AFAF、PFPF;对;对OFOF的影响同的影响同SHLSHL。第第3 3章章 80868086寻址方式与指令系统寻
88、址方式与指令系统v(3 3)带进位位循环左移指令)带进位位循环左移指令v格式:格式:RCL destRCL dest,CNTCNTv功能:目标操作数及标志位功能:目标操作数及标志位CFCF一起循环左移一起循环左移CNTCNT次,最高位移至标志位中,标志位移至最低位。次,最高位移至标志位中,标志位移至最低位。v说明:说明:vCNTCNT代表移动次数,代表移动次数,CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF由运算结果定;不影响由运算结果定;不影响SFSF、ZFZF、AFAF、PFPF;对;对OFOF的影响同的影响同SHLSHL。第第3 3章章 8086808
89、6寻址方式与指令系统寻址方式与指令系统v(4 4)带进位位循环右移指令)带进位位循环右移指令v格式:格式:RCR destRCR dest,CNTCNTv功能:目标操作数及标志位功能:目标操作数及标志位CFCF一起循环右移一起循环右移CNTCNT次,最低位移至标志位中,标志位移至最高位。次,最低位移至标志位中,标志位移至最高位。v说明:说明:vCNTCNT代表移动次数,代表移动次数,CNT 1CNT 1时,必须由寄存器时,必须由寄存器CLCL说明。说明。vCFCF由运算结果定;不影响由运算结果定;不影响SFSF、ZFZF、AFAF、PFPF;对;对OFOF的影响同的影响同SHLSHL。第第3
90、3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如,设例如,设AL = 0101 0100BAL = 0101 0100B,CF = 1CF = 1,CL = 4CL = 4,则:则:ROL AL,1 ROL AL,1 ;AL=10101000B,CF=0,OF=1;AL=10101000B,CF=0,OF=1ROR AL,1 ROR AL,1 ;AL=00101010B,CF=0,OF=0;AL=00101010B,CF=0,OF=0RCL AL,1 RCL AL,1 ;AL=10101001B,CF=0,OF=1;AL=10101001B,CF=0,OF=1RCR AL,C
91、L RCR AL,CL ;AL=10010101B,CF=0,OF;AL=10010101B,CF=0,OF无定义无定义第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.43.3.4串操作指令串操作指令v所谓所谓“串串”是指一组数据。是指一组数据。v串操作指令的操作对象不是一字节或一个字,而串操作指令的操作对象不是一字节或一个字,而是内存中地址连续的一组字节或一组字。是内存中地址连续的一组字节或一组字。v在默认的情况下,串操作指令的源串存于数据段,在默认的情况下,串操作指令的源串存于数据段,目标串存于附加段。在每一次基本操作后,能够目标串存于附加段。在每一次基本操作后
92、,能够自动修改源及目标地址为下一次操作做好准备。自动修改源及目标地址为下一次操作做好准备。串操作指令前通常加上重复前缀,此时,基本操串操作指令前通常加上重复前缀,此时,基本操作在满足条件的情况下得到重复,直至完成预设作在满足条件的情况下得到重复,直至完成预设次数。次数。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.基本串操作指令基本串操作指令v(1 1)串传送指令)串传送指令v格式一:格式一:MOVS destMOVS dest,srcsrcv格式二:格式二:MOVSBMOVSBv格式三:格式三:MOVSWMOVSWv功能:功能:(ES: DI) (ES: DI)
93、 (DS:SI) (DS:SI);SISISI + 1 / 2SI + 1 / 2;DIDIDI + 1 / 2DI + 1 / 2第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统MOVSMOVS指令使用说明指令使用说明v格式一中的格式一中的destdest,srcsrc仅为了增加程序的可读性。仅为了增加程序的可读性。v字节操作时,使用格式二,地址调整量是字节操作时,使用格式二,地址调整量是1 1;字;字操作时,使用格式三,地址调整量是操作时,使用格式三,地址调整量是2 2。v地址是增或减由标志位地址是增或减由标志位DFDF决定:决定:DF = 0DF = 0,地址增;,地
94、址增;DF = 1DF = 1,地址减。,地址减。v寻址方式规定为寄存器间接寻址:源操作数隐含寻址方式规定为寄存器间接寻址:源操作数隐含为数据段,偏移地址由寄存器为数据段,偏移地址由寄存器SISI指明,允许段超指明,允许段超越。越。v目标操作数隐含为附加段,偏移地址由寄存器目标操作数隐含为附加段,偏移地址由寄存器DIDI指明,不允许段超越。指明,不允许段超越。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)串装入指令)串装入指令v格式一:格式一:LODS srcLODS srcv格式二:格式二:LODSBLODSBv格式三:格式三:LODSWLODSWv功能:功
95、能:AL AL (DS:SI) (DS:SI);SI SI SI + 1 / 2 SI + 1 / 2第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)串送存指令)串送存指令v格式一:格式一:STOS destSTOS destv格式二:格式二:STOSBSTOSBv格式三:格式三:STOSWSTOSWv功能:功能:(ES:DI) (ES:DI) AL AL;DI DI DI + 1 / 2 DI + 1 / 2第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)串比较指令)串比较指令v格式一:格式一:CMPS srcCMPS src,
96、destdestv格式二:格式二:CMPSBCMPSBv格式三:格式三:CMPSWCMPSWv功能:功能:(DS:SI) - (ES:DI)(DS:SI) - (ES:DI);SISISI + 1 / 2SI + 1 / 2;DI DI DI + 1 / 2 DI + 1 / 2第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(5 5)串扫描指令)串扫描指令v格式一:格式一:SCAS destSCAS destv格式二:格式二:SCASBSCASBv格式三:格式三:SCASWSCASWv功能:功能:AL/AX-(ES:DI)AL/AX-(ES:DI);DI DI DI +
97、 1 / 2 DI + 1 / 2v说明:说明:v指令指令STDSTD、CLDCLD用于设置方向标志。用于设置方向标志。STDSTD使使DFDF为为1 1,CLDCLD使使DFDF为为0 0。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统2.2.重复前缀指令重复前缀指令v基本串操作指令完成一个数据的操作,如果要操基本串操作指令完成一个数据的操作,如果要操作一组数据,就需要在基本串操作指令前加上重作一组数据,就需要在基本串操作指令前加上重复前缀。复前缀。v重复前缀指明该指令的基本操作是否被重复、重重复前缀指明该指令的基本操作是否被重复、重复的条件是什么。复的条件是什么。v基
98、本操作的重复次数隐含在寄存器基本操作的重复次数隐含在寄存器CXCX中。中。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)无条件重复前缀指令)无条件重复前缀指令v格式:格式:REPREPv功能:功能:REPREP前缀加在串指令前缀加在串指令MOVSMOVS、STOSSTOS之前,控之前,控制串指令重复执行。串指令重复执行的次数保存制串指令重复执行。串指令重复执行的次数保存在寄存器在寄存器CXCX中。每执行一次串指令,中。每执行一次串指令,CXCX(CX)-1(CX)-1,直到,直到CX=0CX=0为止。为止。第第3 3章章 80868086寻址方式与指令系统寻址
99、方式与指令系统v(2 2)相等重复前缀指令)相等重复前缀指令v格式一:格式一:REPEREPEv格式二:格式二:REPZREPZv功能:功能:REPZREPZ或或REPEREPE前缀加在串指令前缀加在串指令CMPSCMPS、SCASSCAS指指令前,控制串指令重复执行。当令前,控制串指令重复执行。当(CX)(CX)0 0且且ZF=1ZF=1时,串指令重复执行;当时,串指令重复执行;当(CX)=0(CX)=0或或ZF=0ZF=0时,串指时,串指令重复执行结束。令重复执行结束。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)不相等重复前缀)不相等重复前缀REPNER
100、EPNE或或REPNZREPNZv格式一:格式一:REPNEREPNEv格式二:格式二:REPNZREPNZv功能:功能:REPNZREPNZ或或REPNEREPNE前缀加在串指令前缀加在串指令CMPSCMPS、SCASSCAS指令前,控制串指令重复执行。当指令前,控制串指令重复执行。当(CX)(CX)0 0且且ZF=0ZF=0时,串指令重复执行;当时,串指令重复执行;当(CX)=0(CX)=0或或ZF=1ZF=1时,时,串指令重复执行结束。串指令重复执行结束。v说明:说明:v带前缀的串操作指令执行后,带前缀的串操作指令执行后,CX -1CX -1操作不影响操作不影响标志位。标志位。第第3 3
101、章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-183-18】 编写汇编程序段,把自编写汇编程序段,把自SAREASAREA开始开始的的100100个字复制到个字复制到DAREADAREA开始的区域中。开始的区域中。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)源、目标区没有重叠)源、目标区没有重叠MOV AX,SEG SAREA MOV AX,SEG SAREA ; ;MOV DS,AX ;MOV DS,AX ;源区段地址送段寄存器源区段地址送段寄存器DSDSMOV AX,SEG DAREA MOV AX,SEG DAREA MOV
102、ES,AX ;MOV ES,AX ;目标区段地址送段寄存器目标区段地址送段寄存器DSDSLEA SI,SAREA ;LEA SI,SAREA ;源区首字的偏移地址送源区首字的偏移地址送SISILEA DI,DAREA LEA DI,DAREA ; ;目标区首字的偏移地址送目标区首字的偏移地址送DIDIMOV CX,100 ;MOV CX,100 ;串长送寄存器串长送寄存器CXCXCLD ;DF=0,CLD ;DF=0,地址增地址增REP MOVSW ;REP MOVSW ;串传送串传送第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统(2 2)源、目标区有重叠)源、目标区有重
103、叠MOV CX,100 MOV CX,100 ; ;串长送寄存器串长送寄存器CXCXMOV AX,SEG SAREA MOV AX,SEG SAREA MOV DS,AX MOV DS,AX ; ;源区段地址送源区段地址送DSDSMOV AX,SEG DAREA MOV AX,SEG DAREA MOV ES,AX ;MOV ES,AX ;目标区段地址送目标区段地址送DSDSLEA SI,SAREA LEA SI,SAREA ADD SI,CX ;ADD SI,CX ;源区末字的偏移地址送源区末字的偏移地址送SISILEA DI,DAREA LEA DI,DAREA ADD DI,CX ;AD
104、D DI,CX ;目标区末字的偏移地址送目标区末字的偏移地址送DIDISTD ;DF=1,STD ;DF=1,地址减地址减REP MOVSW ;REP MOVSW ;串传送串传送第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-193-19】 编写汇编程序段,将内存编写汇编程序段,将内存DS:2100DS:2100DS:2110DS:2110存储区清存储区清0 0。MOV ES,DS MOV ES,DS ; ;目标段段地址送目标段段地址送ESESMOV DI,2100 MOV DI,2100 ; ;目标段首字节偏移地址送目标段首字节偏移地址送DIDIMOV CX
105、,10H MOV CX,10H ; ;串长送寄存器串长送寄存器CXCXCLD ;CLD ;设置方向增设置方向增MOV AL,0MOV AL,0REP STOSB REP STOSB ; ;重复串送存重复串送存第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.53.3.5控制转移指令控制转移指令v80868086程序的执行顺序由代码段寄存器程序的执行顺序由代码段寄存器CSCS和指令指和指令指针寄存器针寄存器IPIP的值决定。的值决定。v程序可以按顺序执行,也可以根据情况改变程序程序可以按顺序执行,也可以根据情况改变程序的执行顺序。的执行顺序。v控制转移指令就是通过改变控
106、制转移指令就是通过改变CSCS和和IPIP的值来实现程的值来实现程序的转移。序的转移。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v控制转移指令根据程序转移地址的不同,分为段控制转移指令根据程序转移地址的不同,分为段内转移和段间转移。内转移和段间转移。v段内转移是指程序在同一代码段内转移,这时只段内转移是指程序在同一代码段内转移,这时只要改变要改变IPIP的值。的值。v段间转移指程序将转移到其他段,此时段间转移指程序将转移到其他段,此时CSCS和和IPIP的的值同时改变。值同时改变。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.无条件转移指
107、令无条件转移指令v无条件转移指令执行后,程序无条件转移到段内无条件转移指令执行后,程序无条件转移到段内由指令中给出的目标地址处。由指令中给出的目标地址处。v(1 1)段内直接转移指令)段内直接转移指令v格式一:格式一:JMP JMP 标号标号v格式二:格式二:JMP JMP 立即数立即数v指令完成的操作:指令完成的操作:IPIP(IP)+(IP)+以标号或立即数给以标号或立即数给出的偏移量,出的偏移量,(CS)(CS)不变。不变。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v例如:例如:JMP 2010HJMP 2010H ;IP ;IP2010H2010HJMP SH
108、ORTJMP SHORT L L;IP;IP(IP)+8(IP)+8位移量位移量JMP NEARJMP NEARNEXTNEXT;IP;IP(IP)+16(IP)+16位移量位移量第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)段内间接转移指令)段内间接转移指令v格式一:格式一:JMP JMP 寄存器寄存器v格式二:格式二:JMP JMP 存储单元存储单元v指令完成的操作:指令完成的操作:(IP)(IP)寄存器或存储单元的值,寄存器或存储单元的值,(CS)(CS)不变。不变。v例如:例如:JMP BXJMP BX;IP;IP(BX)(BX)JMP WORD PT
109、R SIJMP WORD PTR SI;IP;IP(DS:SI)(DS:SI)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)段间直接转移)段间直接转移v格式:格式:JMP JMP FARFAR PTR PTR标号标号v指令完成的操作:指令完成的操作:(IP)(IP)标号所在存储单元的偏标号所在存储单元的偏移地址,移地址,(CS)(CS)标号所在存储单元的段地址。标号所在存储单元的段地址。v例如:例如:JMP FAR PTR NEXTJMP FAR PTR NEXT;(IP);(IP)标号标号NEXTNEXT的偏移地址的偏移地址 ;(CS);(CS)标号标号NE
110、XTNEXT的段地址的段地址第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)段间间接转移)段间间接转移v格式:格式:JMP DWORD PTR JMP DWORD PTR 存储单元存储单元v指令完成的操作:(指令完成的操作:(IPIP)标号指出的双字存储标号指出的双字存储单元的低单元的低1616位,(位,(CSCS)标号给出的双字存储单标号给出的双字存储单元的高元的高1616位。位。v例如:例如:JMP DWORD PTR SI JMP DWORD PTR SI ;IP;IP(DS:SI),CS(DS:SI),CS(DS:SI+2)(DS:SI+2)第第3 3章
111、章 80868086寻址方式与指令系统寻址方式与指令系统2.2.条件转移指令条件转移指令v格式:格式:Jcc Jcc 标号标号v功能:以标志位的状态作为转移依据。如果满足功能:以标志位的状态作为转移依据。如果满足转移条件,则转移到标号指示的指令处;否则,转移条件,则转移到标号指示的指令处;否则,顺序执行下一条指令。顺序执行下一条指令。v说明:说明:vcccc代表跳转条件,代表跳转条件,short-labelshort-label表明该指令只能表明该指令只能实现段内短转移,参数形式通常为符号地址。实现段内短转移,参数形式通常为符号地址。第第3 3章章 80868086寻址方式与指令系统寻址方式与
112、指令系统v(1 1)根据单个标志位的状态判断的转移指令)根据单个标志位的状态判断的转移指令指指 令令转转 移移 条条 件件说说 明明JC destCF=1有进位有进位/借位时,转移借位时,转移JNC destCF=0无进位无进位/借位时,转移借位时,转移JZ/JE destZF=1相等或等于相等或等于0时,转移时,转移JNZ/JNE destZF=0不相等或等于不相等或等于0时,转移时,转移JS destSF=1为负数时,转移为负数时,转移JNS destSF=0为正数时,转移为正数时,转移JO destOF=1有溢出时,转移有溢出时,转移JNO destOF=0无溢出时,转移无溢出时,转移J
113、P destPF=11的个数为偶数时,转移的个数为偶数时,转移JNP destPF=01的个数为奇数时,转移的个数为奇数时,转移第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统JZJZ指令用法举例指令用法举例v例如:例如:vSUB AX,0SUB AX,0vJZ ZEROJZ ZERO; ;当当AX=0AX=0时时, ,程序转移到程序转移到ZEROZERO处执行处执行第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)根据两个无符号数的比较结果判断的转移)根据两个无符号数的比较结果判断的转移指令指令指 令转 移 条 件说 明JA/JNBE des
114、tCF0且ZF0XY时,转移JAE/JNB destCF0或ZF1XY时,转移JB/JNAE destCF1且ZF0X0AX0时时, ,程序转移到程序转移到POSITIVEPOSITIVE处执行处执行第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)根据两个带符号数的比较结果判断的转移)根据两个带符号数的比较结果判断的转移指令指令指 令转 移 条 件说 明JG/JNLE destSFOF且ZF0XY时,转移JGE/JNL destSFOF或ZF1XY时,转移JL/JNGE destSFOF且ZF0XBXAXBX时时, ,程序转移到程序转移到GREATERGREAT
115、ER处执行处执行第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)若)若CXCX为为0 0则转移的转移指令则转移的转移指令v格式:格式:JCXZ JCXZ 目标地址目标地址v功能:当(功能:当(CXCX)=0=0时,程序转移至目标地址处。时,程序转移至目标地址处。v例如:例如:CMP CX,0CMP CX,0JCXZ ZEROJCXZ ZERO; ;当当CX=0CX=0时时, ,程序转移到程序转移到ZEROZERO第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-203-20】 在内存数据段在内存数据段2010H2010H单元存放了
116、一单元存放了一个个1616位无符号数。编写汇编程序段,判断该数是位无符号数。编写汇编程序段,判断该数是否是偶数。如果该数是偶数,则将否是偶数。如果该数是偶数,则将CHCH置置1 1,否则,否则CHCH清清0 0。 MOV AX,2010H MOV AX,2010H TEST AX,01H TEST AX,01H JZ ISEVEN JZ ISEVEN MOV CH,0 MOV CH,0 JMP FINISH JMP FINISHISEVEN:ISEVEN: MOV CH,1 MOV CH,1 FINISH:FINISH: 第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.
117、3.循环控制指令循环控制指令v循环控制指令用于控制程序重复执行。循环控制指令用于控制程序重复执行。v循环循环控制控制指令提供了程序段循环的控制及手段。指令提供了程序段循环的控制及手段。v循环控制循环控制指令都用指令都用CXCX寄存器作为循环次数计算器,寄存器作为循环次数计算器,表示某程序段的最大循环次数,且循环体每执行表示某程序段的最大循环次数,且循环体每执行一次,一次,CXCX被减去被减去1 1。v8088/8086 CPU8088/8086 CPU规定:被循环的程序段必须在同规定:被循环的程序段必须在同一段内,且长度不能大于一段内,且长度不能大于256256字节。字节。v循环控制指令不影响
118、标志位。循环控制指令不影响标志位。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)循环指令)循环指令v格式:格式:LOOP LOOP 目标地址目标地址v功能:功能:v CX CX CX - 1 CX - 1v 如果如果CX = 0CX = 0,结束循环,执行后续语句;否,结束循环,执行后续语句;否则:则:v 转移到标号处,循环体被重复。转移到标号处,循环体被重复。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)相等循环指令)相等循环指令v格式:格式:LOOPZ/LOOPE LOOPZ/LOOPE 目标地址目标地址v功能:功能:v
119、CX CX CX - 1 CX - 1v 如果如果CX = 0CX = 0或或ZF= 0ZF= 0,结束循环,执行后续语,结束循环,执行后续语句;否则:句;否则:v 转移到标号处,循环体被重复。转移到标号处,循环体被重复。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)不相等循环指令)不相等循环指令v格式:格式:LOOPNZ/LOONE LOOPNZ/LOONE 目标地址目标地址v功能:功能:v CX CX CX - 1 CX - 1v 如果如果CX =0CX =0或或ZF=1ZF=1,结束循环,执行后续语句;,结束循环,执行后续语句;否则:否则:v 转移到标号
120、处,循环体被重复。转移到标号处,循环体被重复。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v【例【例3-213-21】 在首地址为在首地址为ArrayArray的存储区域已存入的存储区域已存入长度为长度为M M的字数组,编写汇编程序段,统计该数的字数组,编写汇编程序段,统计该数组中组中0 0元素的个数,统计结果存入元素的个数,统计结果存入ResultResult单元。单元。 MOVMOV CX,M CX,M MOVMOV Result,0 Result,0 MOVMOV SI,0 SI,0 AGAIN:AGAIN: MOVMOVAX,ArraySI AX,ArraySI
121、 CMP CMP AX,0 AX,0 JNZ JNZ NEXT NEXT INC INC ResultResult NEXT:NEXT: ADD ADD SI,2 SI,2 LOOPLOOPAGAIN AGAIN ; ;进入下一轮循环进入下一轮循环第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统vLOOP AGAINLOOP AGAIN等效于下列语句:等效于下列语句:DEC CXDEC CXJNZ AGAINJNZ AGAINv但是,但是,LOOPLOOP指令中完成指令中完成CXCXCX-1CX-1的操作不影响标的操作不影响标志位,而志位,而DECDEC指令则对标志位有影响
122、。指令则对标志位有影响。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统4.4.过程调用与返回指令过程调用与返回指令v需要反复被调用的具有一定功能的程序段可以被需要反复被调用的具有一定功能的程序段可以被设计成过程(也称为子程序),以供需要时调用。设计成过程(也称为子程序),以供需要时调用。在过程中需要安排返回指令,使得过程结束时,在过程中需要安排返回指令,使得过程结束时,返回到调用处。返回到调用处。v过程与调用程序在同一段内,称过程与调用程序在同一段内,称“段内调用段内调用”;过程与调用程序不在同一段内,称过程与调用程序不在同一段内,称“段间调用段间调用”。v过程调用指令过
123、程调用指令CALLCALL和返回指令和返回指令RETRET均不影响标志均不影响标志位,但影响堆栈内容。位,但影响堆栈内容。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)过程调用指令)过程调用指令v段内直接调用指令段内直接调用指令v格式:格式:CALL CALL 过程名过程名v指令完成的操作:指令完成的操作:v (SP)(SP)(SP)-2(SP)-2;v (SS:SP)(SS:SP)(IP)(IP);v (IP)(IP)(IP)+16(IP)+16位偏移量。位偏移量。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v段内间接调用指令段内间接
124、调用指令v格式:格式:CALL CALL 寄存器寄存器v指令完成的操作:指令完成的操作:v (SP)(SP)(SP)-2(SP)-2;v (SS:SP)(SS:SP)(IP)(IP);v (IP)(IP)寄存器的值。寄存器的值。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v段间直接调用指令段间直接调用指令v格式:格式:CALL FAR PTR CALL FAR PTR 过程名过程名v指令完成的操作:指令完成的操作:v (SP)(SP)(SP)-2(SP)-2;v (SS:SP)(SS:SP)(CS)(CS);v (SP) (SP)(SP)-2(SP)-2;v (SS:S
125、P) (SS:SP)(IP)(IP);v (IP) (IP)过程入口偏移地址;过程入口偏移地址;v (CS) (CS)过程入口段地址。过程入口段地址。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v段间间接调用指令段间间接调用指令v格式:格式:CALL DWORD PTR CALL DWORD PTR 存储单元地址存储单元地址v指令完成的操作:指令完成的操作:v (SP)(SP)(SP)-2(SP)-2;v (SS:SP)(SS:SP)(CS)(CS);v (SP) (SP)(SP)-2(SP)-2;v (SS:SP) (SS:SP)(IP)(IP);v (IP) (IP
126、)双字存储单元低双字存储单元低1616位数据;位数据;v (CS) (CS)双字存储单元高双字存储单元高1616位数据。位数据。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)过程返回指令)过程返回指令v无参数段内返回无参数段内返回v格式:格式:RETRETv指令完成的操作:指令完成的操作:v (IP)(IP)(SS:SP)(SS:SP); v (SP)(SP)(SP)+2(SP)+2。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v有参数段内返回有参数段内返回v格式:格式:RET nRET nv指令完成的操作:指令完成的操作:v (IP)
127、(IP)(SS:SP)(SS:SP); v (SP)(SP)(SP)+2+n(SP)+2+n。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v无参数段间返回无参数段间返回v格式:格式:RETRETv指令完成的操作:指令完成的操作:v (IP)(IP)(SS:SP)(SS:SP); v (SP)(SP)(SP)+2(SP)+2。v (CS) (CS)(SS:SP)(SS:SP); v (SP) (SP)(SP)+2(SP)+2。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v有参数段间返回有参数段间返回v格式:格式:RETRETv指令完成的操作:指令完
128、成的操作:v (IP)(IP)(SS:SP)(SS:SP); v (SP)(SP)(SP)+2(SP)+2。v (CS) (CS)(SS:SP)(SS:SP); v (SP) (SP)(SP)+2+n(SP)+2+n。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统5.5.中断指令中断指令v中断是输入中断是输入/ /输出程序设计中常用的控制方式,输出程序设计中常用的控制方式,是指计算机暂时停止当前正在执行的程序而转去是指计算机暂时停止当前正在执行的程序而转去执行处理某事件的中断服务程序。执行处理某事件的中断服务程序。v当中断服务程序执行完后,再恢复执行被暂时停当中断服务程序
129、执行完后,再恢复执行被暂时停止的程序。止的程序。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(1 1)中断指令)中断指令v格式:格式:INT nINT nv功能:产生一个类型为功能:产生一个类型为n n的软中断。的软中断。v指令完成的操作:指令完成的操作:v 标志寄存器入栈;标志寄存器入栈;v 断点地址入栈,断点地址入栈,CSCS先入栈,然后先入栈,然后IPIP入栈;入栈;v 从中断向量表中获取中断服务程序入口地址,从中断向量表中获取中断服务程序入口地址,即:即:v IP IP ( 0:4n+1,0:4n) ( 0:4n+1,0:4n)v CS CS ( 0:4n+3
130、,0:4n+2) ( 0:4n+3,0:4n+2)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)溢出中断指令)溢出中断指令INTOINTOv格式:格式:INTOINTOv功能:检测功能:检测OFOF标志位。当标志位。当OF=1OF=1时,产生中断类型时,产生中断类型为为4 4的中断;当的中断;当OF=0OF=0时,不起作用。时,不起作用。v指令完成的操作(当产生中断类型为指令完成的操作(当产生中断类型为4 4的中断时):的中断时):v 标志寄存器入栈;标志寄存器入栈;v 断点地址入栈,断点地址入栈,CSCS先入栈,然后先入栈,然后IPIP入栈;入栈;v 从中断
131、向量表中获取中断服务程序入口地址,从中断向量表中获取中断服务程序入口地址,即:即: IP IP ( 0:13,0:12) ( 0:13,0:12) CS CS ( 0:15,0:14) ( 0:15,0:14)第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)中断返回指令)中断返回指令IRETIRETv格式:格式:IRETIRETv功能:从中断服务程序返回断点处,并将标志寄功能:从中断服务程序返回断点处,并将标志寄存器的值从堆栈弹出,继续执行原程序。本指令存器的值从堆栈弹出,继续执行原程序。本指令用于中断服务程序中。用于中断服务程序中。v指令完成的操作:指令完成的
132、操作:v 断点出栈:断点出栈:IPIP先出栈,先出栈,CSCS后出栈;后出栈;v 标志寄存器出栈。标志寄存器出栈。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统3.3.63.3.6处理器控制指令处理器控制指令v处理器控制指令用于控制处理器控制指令用于控制CPUCPU的动作,修改标志的动作,修改标志寄存器的标志位,实现对寄存器的标志位,实现对CPUCPU的管理。的管理。v标志位操作指令完成对标志位置位、复位等操作,标志位操作指令完成对标志位置位、复位等操作,共有共有7 7条条。v外部同步指令用于控制外部同步指令用于控制CPUCPU的动作,这类指令不的动作,这类指令不影响标志
133、位。影响标志位。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统1.1.标志位操作指令标志位操作指令指 令 格 式操 作说 明STCCF1进位标志置1CLCCF0进位标志清0CMCCFCF进位标志取反STDDF1方向标志置1CLDDF0方向标志清0STIIF1中断允许标志置1,开中断CLIIF0中断允许标志清0,关中断第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统2.2.外部同步指令外部同步指令v(1 1)处理器暂停指令)处理器暂停指令HLTHLTv格式:格式:HLTHLTv功能:使处理器处于暂停状态。功能:使处理器处于暂停状态。v说明:由该指令引起的
134、说明:由该指令引起的CPUCPU暂停,只有复位暂停,只有复位(RESETRESET信号)、外中断请求(信号)、外中断请求(NMINMI信号或信号或INTRINTR信信号)可使其退出。常用于等待中断或多处理机系号)可使其退出。常用于等待中断或多处理机系统的同步操作。统的同步操作。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(2 2)处理器等待指令)处理器等待指令WAITWAITv格式:格式:WAITWAITv功能:处理器检测功能:处理器检测 引脚信号,当引脚信号,当 信号为高电平信号为高电平时,处理器处于空转状态,不做任何操作;当时,处理器处于空转状态,不做任何操作;当
135、 为低电平时,处理器退出空转状态,执行后续指为低电平时,处理器退出空转状态,执行后续指令。令。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(3 3)处理器交权指令)处理器交权指令ESCESCv格式:格式:ESC ESC v功能:该指令将功能:该指令将CPUCPU的控制权交给协处理器。的控制权交给协处理器。第第3 3章章 80868086寻址方式与指令系统寻址方式与指令系统v(4 4)封锁总线指令)封锁总线指令LOCKLOCKv格式:格式:LOCK LOCK 其他指令其他指令v功能:该指令是一个前缀,可放在任何指令的前功能:该指令是一个前缀,可放在任何指令的前面。面。CPUCPU执行到该指令时,将总线封锁,独占总执行到该指令时,将总线封锁,独占总线,直到该指令执行完毕,才解除对总线的封锁。线,直到该指令执行完毕,才解除对总线的封锁。通常用于在共享资源的多处理器系统中,对系统通常用于在共享资源的多处理器系统中,对系统资源进行控制。资源进行控制。