淮阴师范学院微机原理课件 第三章.ppt_第1页
淮阴师范学院微机原理课件 第三章.ppt_第2页
淮阴师范学院微机原理课件 第三章.ppt_第3页
淮阴师范学院微机原理课件 第三章.ppt_第4页
淮阴师范学院微机原理课件 第三章.ppt_第5页
已阅读5页,还剩182页未读 继续免费阅读

下载本文档

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

文档简介

第3章指令系统,一、基本数据类型二、指令格式三、寻址方式四、通用指令,3.1基本数据类型,字、双字的对齐数字数据类型指针数据类型串数据类型,字、双字的对齐数字数据类型:整数(无符号及有符号数)、浮点数(单精度、双精度、双扩展精度)指针数据类型(内存单元的地址):near、far串数据类型位、字节、字或双字的连续序列,3.2指令及指令格式,3.2.1基本概念:用编码表示CPU的一个基本操作,称为一条指令。全部指令集称为指令系统。指令系统反映CPU的基本功能,是硬件设计人员和程序员能见到的机器的主要属性,,一个CPU的指令系统是固定的,不同类型的CPU其指令系统不同;同一系列向上兼容。程序是为要解决的问题编写出来的指令集合。用户为解决自己的问题所编写的程序称为源程序。,用二进制数编码表示的指令,称为机器指令或机器码。机器语言是机器码及其使用的一组规则。用机器语言编写的程序称为目标程序。,助记符是有助记忆、并能描述指令功能的符号。通常是指令功能的英文单词的缩写。例数的传送指令用助记符MOV加法用ADD,转移用JMP等用助记符等表示的指令称为汇编格式指令例MOVAL,0汇编语言是汇编格式指令、伪指令及其使用的一组规则。用汇编语言编写的程序称汇编语言程序。,3.2.2指令格式,例ADDAL,10HLOADREG:MOVEAX,SUBTOTAL,操作数指明参与操作的数据或数据所在的地方。了解操作数的来源、个数、类型、执行速度。,指令的一般格式是:标号:助记符操作数参数1,操作数参数280X86系列计算机通常使用单操作数和双操作数指令,标号,操作码的助记标识符,目的操作数,源操作数,操作数来源指明操作数所在的地方有三种来源:操作数在指令中,称立即数操作数如MOVAL,9操作数在寄存器中,称寄存器操作数指令中给出用符号表示的寄存器名。如MOVAL,BL操作数在内存单元中,称存储器操作数或内存操作数指令中给出该内存单元的地址。用表示存储器操作数如MOVAL,2000H,无操作数:指令只有一个操作码,没有操作数。,有两种可能:有些操作不需要操作数。如HLT,NOP等处理机控制指令。操作数隐含在指令中。如STC,CLC等处理机控制命令。AAA,DAA等调整指令。,单操作数:指令中给出一个操作数。,有两种可能:有些操作只需要一个操作数如INCAL;(AL)(AL)+1有些操作将另一个操作数隐含在指令中如MULBL;(AX)(AL)(BL),操作数类型,指令应指明参与操作的数是字节还是字,即操作数的类型。通常操作数的类型可由操作数本身隐含给出。只在特殊情况下需要指明。,8086/8088:有的操作既可对字节操作,又可对字操作有的操作只允许对字操作,指令中有寄存器操作数,由寄存器操作数决定类型。,例:MOVBX,AL;字节操作,BXALMOVBX,AX;字操作,BXAL,BX+1AH,指令操作数中无寄存器,则由内存操作数的类型决定。,例MOVBX,0,指令中无类型的依据,需对存储器操作数加类型说明。,用PTR属性伪操作说明类型。MOVbytePTRBX,0字节操作,BX0MOVwordPTRBX,0字操作,BX0,BX+10,执行速度,寄存器操作数立即数操作数存储器操作数,三条指令:操作类型相同,都是传送指令,且目的操作数相同,不同的是源操作数。,对同一类型指令,执行速度:,3.3寻址方式指明操作数的来源,即寻找(得到)操作数的方法。,以数据传送指令MOV为例介绍寻址方式。指令MOVdst,src执行(dst)(src)即:源操作数的内容不变,目的操作数源操作数,一、立即数寻址(P45)例1:MOVAX,1090H(若CS=1000H,IP=100H),所有的算术指令都允许源操作数是立即数(DIV、IDIV除外),这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在码段区域中。立即数可以是8位的,也可以是16位.立即寻址主要是用来给寄存器赋初值.,二、寄存器寻址(P46),MOVAX,BX,若AX=1234H,BX=4567H,4567H,4567H,AX,BX,源操作数和目的操作数能在以下寄存器中:32位操作数:EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP8位操作数:AH,BH,CH,DH,AL,BL,CL,DL16位操作数:AX,BX,CX,DX,SI,DI,SP,BPCS,DS,ES,SS,FS,SG,EFLAGS,系统寄存器GDTR、IDTR,如:MOVAX,BXMOVAL,BH*SRC和DST的字长一致MOVAH,BX,操作数在指定的寄存器中,例1MOVAX,2056H执行后:(AX)=2056H例2MOVBL,AH执行前:(BL)=12H,(AH)=78H执行后:(BL)=78H(AH)=78H,三、直接寻址(P47-48“位移量”),存储器操作数的有效地址EA在指令中直接给出。例1MOVAL,2000H默认段寄存器为DS。操作数所在内存单元的物理地址为:PA=(DS)10H+EA,MOVAX,2000H(若DS=3000H)DS30000偏移量2000+实际地址32000H,内存操作数的物理地址为:PA=(DS)10H+EA=3000H10H+2000H=32000H,执行后(AX)=7A54H,在汇编语言程序中,不直接用数值表示偏移地址,而用符号代替数值表示地址,称符号地址(变量名)。,例符号buffer表示一个地址。MOVAX,buffer或写成MOVAX,buffer源操作数为buffer指向的内存单元的内容,符号地址(变量名)经汇编连接后,与一个确定的数值地址相对应可用操作符Offset获取变量的偏移地址。故PA=(DS)10H+Offsetbuffer指令执行结果(AX)=0B0AH,存储器操作数的有效地址EA由寄存器给出,寄存器的内容为操作数的有效地址。可用的寄存器有BX、SI、DI、BP如:MOVAL,BXMOVAH,SIMOVDL,DIMOVDH,BP,四、寄存器间接寻址(P48“基地址”),另参见92页寄存器间接寻址示意图,例1,例2:MOVAX,DI若(DS)=3000H(DI)=2000H则内存操作数的物理地址为:PA=(DS)10H+(DI)=32000H执行后(AX)=(32000H)=400BH,例3:MOVAX,BP若(SS)=4000H(BP)=3000H则内存操作数的物理地址为:PA=(SS)10H+(BP)=43000H指令执行后(AX)=(43000H)=0102H,五、寄存器相对寻址(P48“基地址+位移量”)又称变址寻址,即以基准寄存器BX、BP、SI、DI加上给定的8位或16位偏移量作为操作数的有效地址。操作数的有效地址由一个寄存器与一个偏移量相加得到,偏移量(相对量)在指令中给出,范围在0000FFFFH可用的寄存器有BX、DI、SI、BP,与寄存器间接寻址相同如:MOVAL,BX+10HMOVAH,DI+20HMOVDL,30HSIMOVDH,40HBP,默认段寄存器的关系与寄存器间接寻址相同使用BX、SI、DI,默认段寄存器为DS(BX)PA=(DS)10H+(SI)+偏移量(DI)使用BP,默认段寄存器为SSPA=(SS)10H+(BP)+偏移量,例1:MOVAX,BX+30H若(DS)=2000H(BX)=1000H则内存操作数的物理地址为:PA=(DS)10H+(BX)+30H=21030H指令执行后:(AX)=(21030H)=8976H,例2:MOVAX,60HBP若(SS)=3000H(BP)=200H则内存操作数的物理地址为:PA=(SS)10H+(BP)+60H=30260H指令执行后:(AX)=(30260H)=0ABCH,六、基址加变址寻址操作数的有效地址由一个基址寄存器与一个变址寄存器之和给出。可用的基址寄存器为BX、BP变址寄存器为SI、DI如MOVAL,BX+SIMOVAX,BXDIMOVDL,BP+SIMOVDX,BPDI,基址加变址寻址即以某一基地址寄存器(通常为BX、BP)的内容,加上某一变址寄存器(通常为SI,DI)的内容,形成操作数的有效地址。段地址规则同上。,例1:MOVAX,BX+SI若(DS)=3200H,(BX)=0456H,(SI)=1094H,其寻址示意图如图3-5所示,7、相对基址加变址寻址(P49“基地址+索引+位移量”),操作数的有效地址由基址寄存器、变址寄存器、偏移量三者之和给出。可用的寄存器与基址加变址寻址方式相同基址寄存器有BX、BP变址寄存器有SI、DI如MOVAL,BX+SI+10HMOVAX,20HBXDIMOVDL,BP+SI+30HMOVDX,40HBPDI,相对基址加变址寻址即以某一基地址寄存器(通常为BX、BP)的内容,加上某一变址寄存器(通常为SI,DI)的内容,再加上给定的8位或16位偏移量,形成了操作数的有效地址。,例1:MOVAX,BX+SI+1000H若(DS)=3000H(BX)=0700H(SI)=0300H则内存操作数的物理地址为:PA=(DS)10H+(BX)+(SI)+10H=32000H,D:DEBUG-A0AFA:0100MOVCL,AXError0AFA:0100MOVAX,DXError0AFA:0100MOVAL,CXError0AFA:0100MOVCX,BP+BXError0AFA:0100MOVAH,SI+DIError0AFA:0100MOVBL,AX+CXError0AFA:0100-,利用DEBUG可判断下列寻址方式错:,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,分析:(1)MovAX,1300H指令的源操作数为立即寻址方式且为字操作,所以该指令执行完后,AX=1300H。,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(2)MOVAL,BL指令的源操作数为寄存器寻址方式址为字节操作,所以该指令执行完后,AL00H,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(3)MovAX,1300H指令的源操作数为直接寻址方式且为字操作,执行该指令时,是将DS10H+1300H31300的字内容送Ax,所以该指令执行完后,AX=9854H。,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(4)MOVAL,BX指令的源操作数为寄存器间接寻址方式且为字节操作,执行该指令时,是将DS10H+BX30200H的内容送AL,所以该指令执行完后,AL24H。,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(5)MOVAL,1100HBx指令的源操作数为寄存器加位移量寻址方式且为字节操作,执行该指令时,是将DS*10H+BX+1100H31300H的内容送AL,所以该指令执行完后,AL=54H。,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(6)MOVAX,BXSI指令的源操作数为基址变址寻址方式且为字操作,执行该指令时是将DS10H+BX+SI30202H的内容送AX,所以该指令执行完后,AXF0ACH。,1、设有关寄存器及存储器单元的内容如下:DS3000H,BX0200H,SI0002H,30200H24H,30202H0ACH,30203H=0F0H,31300H54H,31301H98H,31302H6DH。问下列各条指令执行完后,AL或AX寄存器的内容各是什么?,(7)MOVAL,1100HBxSI指令的源操作数为基址变址加位移量寻址方式且为字节操作,执行该指令时,是将DS10H+BX+SI+1100H31302H的内容送AL,所以该指令执行完后,AL=6DH。,一.数据传送指令二.算术运算指令三.逻辑运算指令四.控制转移指令五.处理机控制指令六.串操作指令,3.4IA-32通用指令,概述1.指令助记符表2.学习指令的要点3.利用DEBUG程序,学习指令系统4.指令中操作数的表示5.书写指令注意事项,1.指令助记符表,2.学习指令的要点从以下几个方面来掌握一条指令:指令的助记符指令的格式:操作数的个数、类型执行的操作:指令执行后的结果包括:哪些寄存器、内存单元的值发生了变化,对标志位有无影响,哪些受影响只介绍常用的指令,其他需要时可自学。,4.指令中操作数的表示,对双操作数指令不能两个同为存储器操作数MOVDI,SI目的操作数不能是立即数ADD3,AL两个操作数的类型应相同SUBAX,BL,一、数据传送指令,通用数据传送指令,地址传送指令,累加器专用指令,标志寄存器传送指令,1.通用数据传送指令(1)基本传送指令MOVDST,SRC源操作数寄存器、存储器、立即数目的操作数寄存器、存储器执行的操作:DSTSRCCPU内部寄存器之间的数据传送(除CS,IP外)MOVAL,BLMOVDS,BXMOVDX,DIMOVAX,DXMOVSI,BP,传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。,立即数传送到CPU内部通用寄存器组(AX,BX,CX,DX,BP,SP,DI,SI)MOVCL,4MOVDX,03FFHMOVDI,04BFHCPU内部寄存器(除CS,IP外)与存储器(所有寻址方式)之间的数据传送MOVBX,BUFFERMOVDI,CXMOVAL,2000MOVSI,BLOCKBPMOVAX,SIMOVDS,DATSI+BX立即数给存储单元赋值MOVWORDPTR2000,10MOVBYTEPTRBX+DI,30,注意事项:1.立即数不能直接送段寄存器MOVDS,3000H2.目标操作数不允许用立即数方式MOV2000H,AL3.不允许在两个存储单元间传送数据MOV2000H,3000H4.不允许在两个段寄存器之间传送数据MOVDS,ES5.MOV指令不影响标志位。例1:把地址为AREA1(段内偏移量)的存储单元的内容,传送至同一段内的地址为AREA2的存储单元中。,MovAL,AREA1MovAREA2,AL,例2:若要传送的不是一个字节,而是一个数据块,(例如内有100个字节),如何实现?,movsi,offsetarea1movdi,offsetarea2movcx,100Again:moval,si;movdi,alincsiincdideccxjnzagain,几个不能送的解决办法:MOVAL,mem1;通过寄存器AL作桥梁MOVmem2,AL;用来解决存存MOVAX,DS;通过AX解决:MOVES,AX;段寄段寄MOVAX,data;通过AX解决:MOVDS,AX;段寄立即数,2、交换指令XCHGOPRD1,OPRD2在寄存器间或寄存器与存储器间交换信息(不允许使用段寄存器)。源操作数:寄存器、存储器目的操作数:寄存器、存储器执行的操作:(OPRD1)(OPRD2)例:XCHGBX,BP+SI(BX)=6F30H(BP)=0200H(SI)=0046H(SS)=2F00H(2F246H)=1234H,3、堆栈操作指令PUSHOPRDPOPOPRD堆栈按照先进后出的原则组织的一段内存区域。8088中规定堆栈设置在堆栈段(SS段)内,堆栈指针SP的初值决定了堆栈的大小。SP始终指向堆栈的顶部,即始终指向最后推入堆栈的信息所在的单元。操作数:16位通用寄存器;段寄存器;16位内存操作数(除立即数之外的任何寻址方式)。执行的操作:,设(AX)=1020H,执行示意图如图,(SP),低地址,存储区(SS段),执行前(AX)=1020,(SP),低地址,存储区(SS段),执行后,20,10,AH,AL,2-8,(SP)-1,(SP)-2,作用:,压栈指令的格式为:PUSHregPUSHmem/regPUSHsegregPOP指令的格式同PUSH指令,堆栈指令使用时应注意两点:堆栈操作总是按字进行不能从栈顶弹出一个字给CS,4、累加器专用传送指令IN,OUT,所谓专用只限于用累加器AL或AX来传送信息。完成的操作:CPUI/O端口(1)输入指令IN格式:INAL,port;port端口号0255HINAX,DX;DX表示的端口范围达64K例:INAL,80H;(AL)(80H)INAX,DX;(AX)((DX)+1,(DX)),例:OUT68H,AX;(68+1,68H)(AX)OUTDX,AL;(DX)(AL)在使用间接的IN/OUT指令时,在指令执行前,应先用传送指令对DX寄存器设置好端口号,如:MOVDX,220HINAL,DX;将220H端口内容读入AL累加器,(2)输出指令OUT格式:OUTport,ALOUTDX,AX,5、扩展指令,(1)CWDCWD能把在AX中的字的符号扩展到DX中,形成32位的操作数。若AXBABS=1ABS=0ABS=1ABOS=1A9,故进行加6调整,01101111+0000011001110101,AAA加法后进行ASCII调整指令。,这条指令对在AL中的由两个未组合的十进制操作数相加后的结果进行校正,产生一个未组合的十进制数。两个未组合的十进制数可以直接用ADD指令相加,但要得到正确的未组合的十进制结果,必须在加法指令以后,紧接着用一条AAA指令来加以校正,则在AX中就可以得到正确的结果。所谓未组合的十进制数,就是一位十进制数,也即十进制数字的ASCII码的高四位置为0以后所形成的数码。即6为00000110,7为00000111等。当这样的两个数相加(必须有一个在AL中)以后,要在AX中得到正确的仍是未组合的十进制结果,就必须进行调整。因为6713,则应该在AL中为00000011,而在AH中(若初始值为0)为00000001。,00000110+0000011100001101,但加法是按二进制规则进行的,在未调整前AL中的值为:,若(AL右移一位操作数2算术移位指令适用于带符号数的运算。逻辑移位指令适用于无符号数的运算。,例3:请求出AL中“1”的个数,存在AH中。MOVAH,0Again:SHLAL,1ADCAH,0CMPAL,0JNZAGAINHLTMOVAH,0MOVCL,8Again:SHLAL,1JNCNextINCAHNext:DECCLJNZAgainHLT,JNC若无进位则转移JNZ若不为0则转移,3.循环移位指令ROLOPRD,CNT循环左移操作数:通用寄存器、存储器CNT:移位次数,当CNT1时,应将其赋给CL寄存器执行的操作:注:该指令影响标志位C视结果而定;O只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0)O=1,否则O=0。,C,OPRD,ROROPRD,CNT循环右移操作数:通用寄存器、存储器CNT:移位次数,当CNT1时,应将其赋给CL寄存器执行的操作:注:该指令影响标志位C视结果而定;O只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0)O=1,否则O=0。,C,OPRD,RCLOPRD,CNT带进位的循环左移操作数:通用寄存器、存储器CNT:移位次数,当CNT1时,应将其赋给CL寄存器执行的操作:注:该指令影响标志位C视结果而定;O只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0)O=1,否则O=0。,C,OPRD,RCROPRD,CNT带进位的循环右移操作数:通用寄存器、存储器CNT:移位次数,当CNT1时,应将其赋给CL寄存器执行的操作:注:该指令影响标志位C视结果而定;O只当CNT=1时有效,移位后当最高有效位发生变化时(如1变0)O=1,否则O=0。,C,OPRD,例4:在内存某一缓冲区中,存放着若干用BCD码表示的十进制数,每一个单元中存放两位,要求将它们转换成ASC码,存放在缓冲区,高4位的BCD码转换的ASC码放在地址较高的单元。,BCDBUFASCBUF,6523020024353633323230,综合例题,开始,设地址,设转换个数,转换低4位,取数,存结果,转换高4位,存结果,CX-1-CX,CX=0?,结束,流程图,MOVSI,OffsetBCDBUFMOVDI,OffsetASCBUFMOVCH,CountAgain:MOVAL,SIINCSIMOVBL,ALANDAL,0FHORAL,30HMOVDI,ALINCDIMOVAL,BL;0110,0101MOVCL,4SHRAL,CL;0000,0110ORAL,30H;0011,0110MOVDI,ALINCDIDECCHJNZAgainHLT,BCDBUFASCBUF,6523020024353633323230,011001010000010100001111001100000000010100110101,SI,DI,逻辑移位可用于无符号数乘除算术移位、带符号数、左移一次,相当于乘2右移一次,相当于除2例将AL中的带符号数乘10,若(AL)=XSALAL,1;(AL)=2XMOVBL,AL;(BL)=2XSALAL,1;(AL)=4XSALAL,1;(AL)=8XADDAL,BL;(AL)=(8X+2X)=10X,分类,指令,功能,无条件转移指令,条件转移指令,循环指令,子程序调用及返回指令,中断指令,JMPOPRD,JNZOPRD(等),LOOPOPEDLOOPE/LOOPZOPRDLOOPNE/LOOPNZOPRD,CALLOPRDRET,INTNINTOIRET,无条件转移,根据上一条指令设置的标志位的情况转移,计数非零循环,计数非零循环且结果为0循环,计数非零循环且结果不为0循环,调用子程序,从子程序返回,软中断,溢出时中断,中断返回,重点掌握:JMP,JZ,JNZ,JC,LOOPCALL,RET,INTN,IRET,3.4.6控制转移指令,段内转移,段间转移,段内直接短转移,段内直接近转移,段内间接转移,段间直接转移,段间间接转移,JMPSHORTOPRD,JMPNEAROPRD,JMPWORDPTROPRD,JMPFARPTROPRD,JMPDWORDPTROPRD,1.无条件转移指令,JMP,分类,名称,指令,-128127,-3276832767,-3276832767,转移范围,段间,段间,2.条件转移指令,根据上一条指令影响的状态位来判断是否转移。特点:1.条件转移指令全部为段内转移2.目标地址在当前指令的-128127范围内。3.目标地址由操作数OPRD确定。3.条件转移指令不影响标志位。,051001D87403A20020F4,+127,-128,10510610710810910a10b10c10d10e,Addax,bxJznextMov2000,axNext:hlt,根据单个条件标志的设置情况转移,根据组合条件标志的设置情况转移主要用来比较两个数的大小,无符号数大小的比较,带符号数大小的比较,例1:两无符号数相加,结果正确则Ax中存入1,若溢出则AX中存入0。,Movax,xMovbx,yAddbx,axJoerrorMovax,1Jmpexiterror:movax,0exit:hlt,例2:有一组无符号数,与50比较,大于50的存入另一存储区,小于或等于50的放弃。,MOVsi,Offsetarray1MOVdi,Offsetarray2Movcx,nAgain:Moval,siIncsiCmpal,50JbenextMovdi,alIncdinext:DeccxJnzagainHlt,05A2001085,array1,array2,A285,MOVSI,OffsetStringMOVCX,0AHMOVAL,20H;空格的ASCII码为20HMOVAH,0H;结果在AH中AGAIN:CMPAL,SIJZADDAJMPCONTADDA:INCAHCONT:INCSIDECCXJNZAGAINHLT,例3:数出长度为10的,以STRING为首地址的字符串中空格的个数。,41424320454620482049,string,3.重复操作指令(循环指令)LOOPOPRD,CX循环次数,循环体,LOOPZ(CX=0?Z=0?),Y,N,MOVSI,OffsetSTRINGMOVCX,0AHMOVAL,20H;空格的ASCII码为20HMOVAH,0H;结果在AH中AGAIN:CMPAL,SIJZADDAJMPCONTADDA:INCAHCONT:INCSILOOPAGAINHLT,例4:数出长度为10的,以STRING为首地址的字符串中空格的个数。,循环条件:CX0(CX)-1CX(CX)=0?是,循环结束否,继续循环,转向的地址范围在-128+127之间,4.子程序调用及返回指令,段内调用,段间调用,直接调用,间接转移,直接调用,间接调用,CALLNEARPTROPRD,CALLFARPTROPRD,CALLDWORDPTROPRD,CALLRET,分类,名称,指令,CALLWORDPTROPRD,CALLchange,CALLBX,CALLfarptrtran,CALLDWORDPTRBX,举例,返回,返回,带立即数返回,RET,RETEXP,RET,RET6,near-标号,far-标号,16位寄存器存储器,存储器(32位),操作数,操作:段内调用:CALL标号段内返回:RET,CALL在很多方面与无条件指令相似它也使控制流发生转移,但是,CALL指令调用一个过程,通常是要返回的,为此,CALL指令要保存返回地址(CALL指令的下一条要执行的指令的地址)。以便返回.,传送程序控制至位于堆栈顶部的返回地址。此地址是由CALL指令放在堆栈上的。通常返回指令返回至CALL指令的下一条指令。,5.中断指令,中断子程序:是一种特殊的子程序,(DOS系统中有大量这样的子程,用户也可以编写这样的子程)特殊在它的调用方法与普通的子程序不同。,中断调用指令INT,格式INTN;其中N=0FFH即0255,中断返回指令IRET格式IRET,3.4.7、串操作指令,串的基本概念顺序存放在内存中的一组数据,称为串。用串的首(末)地址、元素类型、串的长度表示。,串操作种类,1.串传送指令,名称格式功能,状态标志,控制标志,OSZAPC,DIT,字节串传送指令,字串传送指令,重复前缀,MOVSB,MOVSW,REP,字节串传送,字串传送,无条件重复,不影响,不影响,不影响,设置D,设置D,D为方向标志(DirectionFlag)D=1,串操作时地址自动减量,指令STDD=0,串操作时地址自动增量,指令CLD,MOVSB执行的操作:DISI(SI)(SI)1(DI)(DI)1MOVSW执行的操作:DISI(SI)(SI)2(DI)(DI)2作用:将SI指向的数据段中的一个字(字节)传送到DI指向的附加段,并自动修改SI、DI的内容,使其指向下一个单元。注意:该指令指定用SI、DI,且规定SI指向数据段,DI指向附加段。,REP作用:与MOVSB、MOVSW配合使用,将数据段中的一串数据传送到附加段。执行的操作:重复MOVSB或MOVSW的操作,直到CX=0。,CX=0?,CX-1CX,MOVS,REPMOVS,Y,N,例1:将数据段中起始地址为Souce的100个字节的数据传送到附加段的Dest指向的单元中。LEASI,SouceLEADI,DestMOVCX,100CLDAgain:MOVSBDECCXJNZAgainHLT,23D005AB92,Souce,Dest,增址传送,23D005,SI,DI,SIDISI+1SIDI+1DI,DS,ES,MOVSI,OffsetSouce,LEASI,Souce+99LEADI,Dest+99MOVCX,50STDAgain:MOVSWDECCXJNZAgainHLT,减址传送,23D005AB92,Souce+99,Dest+99,AB92,例2:字传送,SI,DI,SIDISI-2SIDI-2DI,例3:与REP指令配合传送100个数。,LEASI,SouceLEADI,DestMOVCX,100CLDAgain:MOVSWDECCXJNZAgainHLT,LEASI,SouceLEADI,DestMOVCX,100CLDREPMOVSWHLT,CX不为0时重复执行判CX=0?是,传送完毕;否,进行CX1CX执行REP后的串操作。重复,2.串比较指令,名称格式功能,状态标志,控制标志,OSZAPC,DIT,字节串比较指令,字串比较指令,重复前缀,CMPSB,CMPSW,REP,REPE/REPZ,REPNE/REPNZ,字节串比较,字串比较,无条件重复,当相等/为零重复,当不相等/不为零重复,不影响,不影响,不影响,设置D,设置D,REPE和REPZ是同一条指令的两种不同表示形式。REPNE和REPNZ是同一条指令的两种不同表示形式。,OSZAPC,OSZAPC,CMPSB执行的操作:DISI(Flag)(SI)(SI)1(DI)(DI)1CMPSW执行的操作:DISI(Flag)(SI)(SI)2(DI)(DI)2作用:将SI指向的数据段中的一个字(字节)与DI指向的附加段中的一个字(字节)相减,不保存结果,只设置标志位,并自动修改SI、DI的内容,使其指向下一个单元。注意:该指令指定用SI、DI,且规定SI指向数据段,DI指向附加段。,可根据ZF判断两串比较结果。若ZF=1,两串相等,此时:CX=0,表明串中所有元素已比较完毕SI、DI指向串尾的下一单元。若ZF=0,两串不等,此时:CX的值为剩下的未比较的元素个数。SI、DI指向不相等元素的下一元素。,REP作用:与CMPSB、CMPSW配合使用执行的操作:重复CMPSB或CMPSW的操作,直到CX=0。,CX=0?,CX-1CX,CMPS,REPCMPS,Y,N,REPE/REPZ,REPNE/REPNZ作用:与CMPSB、CMPSW配合使用。执行的操作:,CX=0?andZ=0?,CX-1CX,CMPS,REPECMPS,REPE/REPZ重复CMPSB或CMPSW的操作,直到CX=0且Z=0。,REPNE/REPNZ重复CMPSB或CMPSW的操作,直到CX=0且Z=1,CX不为0且两数相等时循环,Y,N,CX=0?andZ=1?,CX-1CX,CMPS,REPNECNPS,CX不为0且两数不相等时循环,Y,N,例4:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们是否相同,将不同的第一个字节找出来。,Leasi,souceLeadi,destMovcx,50CldAgain:CmpsbJnzFoundDeccxJnzAgainjmpexitFound:decsimoval,siExit:hlt,23D005AB92,Souce,Dest,23D005A192,SI,DI,例5:字比较。,Leasi,souceLeadi,destMovcx,25CldAgain:CmpswJnzFoundDeccxJnzAgainjmpexitFound:decsidecsimovax,siExit:hlt,23D005AB92,Souce,Dest,23D005A192,SI,DI,例6:在内存的DS和ES段中,各有长度为50字节的字符串,试比较它们是否相同。(与Repe/Repz配合使用),Leasi,souceLeadi,destMovcx,50CldRepeCmpsbJnzFoundjmpexitFound:decsimoval,siExit:hlt,CX不为0且si与di相等(ZF=1)时重复检测CX=0?或ZF=0?是,退出否,进行CX1CX执行REPE后的串操作。重复,23D005AB92,Souce,Dest,23D005A192,SI,DI,3.串扫描指令,名称格式功能,状态标志,控制标志,OSZAPC,DIT,字节串扫描指令,字串扫描指令,重复前缀,SCASB,SCASW,REPE/REPZ,REPNE/REPNZ,字节串扫描,字串扫描,当相等/为零重复,当不相等/不为零重复,不影响,不影响,设置D,设置D,OSZAPC,OSZAPC,SCASB执行的操作:(AL)DI(Flag)(DI)(DI)1SCASW执行的操作:AXDI(Flag)(DI)(DI)2作用:将AL(AX)的内容减去DI指向的附加段中的一个字(字节),结果不保存,只影响标志位。并自动修改DI的内容,使其指向下一个单元。注意:该指令指定用DI,且规定DI指向附加段。,REPE/REPE,REPNE/REPNZ作用:与SCASB、SCASW配合使用,将数据段中的一串数据传送到附加段。执行的操作:,CX=0?andZ=0?,CX-1CX,SCAS,REPESCAS,REPE/REPE重复SCASB或SCASW的操作,直到CX=0且Z=0。,REPNE/REPNZ重复SCASB或SCASW的操作,直到CX=0且Z=1,CX不为0且两数相等时循环,Y,N,CX=0?andZ=1?,CX-1CX,SCAS,REPNESCAS,CX不为0且两数不相等时循环,Y,N,4.存入串指令,名称格式功能,状态标志,控制标志,OSZAPC,DIT,字节串存入指令,字串存入指令,重复前缀,STOSB,STOSW,REP,字节串存入

温馨提示

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

评论

0/150

提交评论