《第6章子程序结构.ppt》由会员分享,可在线阅读,更多相关《第6章子程序结构.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6章章 子程序设计子程序设计6.1 子程序的概念子程序的概念6.2 子程序的定义子程序的定义6.3 子程序设计方法子程序设计方法6.4 子程序应用举例子程序应用举例6.5 子程序的嵌套与递归调用子程序的嵌套与递归调用6.1 子程序的概念子程序的概念 在在程程序序设设计计中中,我我们们会会发发现现一一些些多多次次无无规规律律重重复复的的程程序序段段或或语语句句序序列列。解解决决此此类类问问题题一一个个行行之之有有效效的的方方法法就就是是将将它它们们设设计计成成可可供供反反复复调调用用的的独独立立的的子子程程序序结结构构,以以便便在在需需要时调用。子程序又称过程。要时调用。子程序又称过程。6.
2、2 子程序的定义子程序的定义 子子程程序序的的定定义义是是由由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来来完完成的。其格式如下:成的。其格式如下:过程名过程名 PROC NEAR/FARPROC NEAR/FAR 过程名过程名 ENDPENDP其其中中PROCPROC表表示示过过程程定定义义开开始始,ENDPENDP表表示示过过程程定定义义结结束束。过程名是过程入口地址的符号表示。过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段属性、偏一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。移地址属性以及类型属性。6.3 子程序设
3、计方法子程序设计方法1信息的保护与恢复信息的保护与恢复2主程序与子程序参数传递方式主程序与子程序参数传递方式1信息的保护与恢复信息的保护与恢复 例如:若子程序例如:若子程序PROG中改变了寄存器中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。的值,则可采用如下方法保护和恢复现场。PROG PROC PUSHAX PUSHBX PUSHCX;保护现场保护现场 PUSHDX POPDX POPCX POPBX;恢复现场恢复现场 POPAX RET;返回断点返回断点PROG ENDP2主程序与子程序参数传递方式主程序与子程序参数传递方式(1)寄存器法)寄存器法(2)约定单元
4、法)约定单元法(3)堆栈法)堆栈法6.4 子程序应用举例子程序应用举例 【例例6.1】将将一一个个给给定定的的二二进进制制数数按按位位转转换换成成相相应应的的ASCII码码字字符符串串,送送到到指指定定的的存存储储单单元元并并显显示示。如如二二进进制制数数10010011转转换换成成字字符符串串为为10010011。要要求求将将转转换换过过程程写写成成子子程程序,且子程序应具有较好的通用性。序,且子程序应具有较好的通用性。入口参数:入口参数:DX存放待转换的二进制数存放待转换的二进制数CX存放待转换数的位数(存放待转换数的位数(8位或位或16位)位)DI存放存放ASCII码首地址码首地址出口参
5、数:转换后的字符串存放在出口参数:转换后的字符串存放在以以DI作指针的字节存储区中作指针的字节存储区中程序如下:程序如下:DATASEGMENTNUM8 DB93HNUM16 DW0ABCDHASCBUF DB20 DUP(0)DATAENDS CODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACK START:MOVAX,DATAMOVDS,AXMOVDX,0MOVDL,NUM8;转换二进制数送转换二进制数送DXMOVCX,8;置位数置位数8LEADI,ASCBUF;字符串首址字符串首址DICALLBTASC;调用子程序调用子程序BTASCMOVDI,0DHMO
6、VDI+1,0AH MOV DI+2,$LEA DX,ASCBUFMOV AH,9INT 21HMOV DX,NUM16MOV CX,16;置位数置位数16LEA DI,ASCBUFCALL BTASC MOV DL,0DHMOV DI+1,0AHMOV DI+2,;显示转换后的字符串显示转换后的字符串LEA DX,ASCBUF MOV AH,9 INT 21H BTASCPROCPUSHAX;保存保存AXCMPCX,8;比较比较8位数位数JNEL1;直接转换直接转换16位数位数MOVDH,DL;8位数转换送位数转换送DH L1:MOVAL,0 ROLDX,1;DX最高位移入最高位移入CFRC
7、LAL,1;CF移入移入AL最低位最低位ADDAL,30HMOVDI,AL INCDILOOP L1POPAXRETBTASCENDPCODEENDSENDSTART6.5 子程序的嵌套与递归调用子程序的嵌套与递归调用1子程序的嵌套子程序的嵌套 子子程程序序不不但但可可以以被被主主程程序序调调用用,而而且且也也可可以以被被其其他他子子程程序序调调用用。我我们们把把一一个个子子程程序序调调用用另另一一个个子子程序称为子程序的嵌套调用。程序称为子程序的嵌套调用。2子程序的递归调用子程序的递归调用 子子程程序序的的递递归归调调用用是是指指一一个个子子程程序序直直接接或或间间接接地地调调用用自自己己。
8、递递归归子子程程序序一一般般对对应应于于数数学学上上对对函函数数的的递递归归定定义义,它它往往往往能能设设计计出出效效率率较较高高的的程程序序,完完成相当复杂的计算,因而是很有用的。成相当复杂的计算,因而是很有用的。【例例6.2】试试编编制制计计算算N!(N0)的的程程序序。N!=N*(N-1)*(N-2)*1 其递归定义如下:其递归定义如下:0!=1 N!=N*(N-1)!(N1)计算计算N!的子程序的子程序FACT的流程图如图的流程图如图6.1所示。所示。【例例6.3】计算计算5!的程序示例,!的程序示例,RESULT是保存阶乘的存储单元。是保存阶乘的存储单元。程序如下:程序如下:STAC
9、K SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENT N DW 5RESULT DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATA MOVDS,AX MOVAX,N CALL FACT MOVAX,RESULT MOVAH,4CH INT21HFACT PROC NEAR CMPAX,0 JNEL1 MOVRESULT,1JMPEXIT L1:PUSHAXDEC AXCALLFACTPOPAX MUL RESULTMOVRESULT,AX EXIT:RET FACTENDP CODEENDSENDSTART FACT子程序的执行分为两个阶段,第一子程序的执行分为两个阶段,第一个阶段为递归调用阶;第二个阶段段为调用个阶段为递归调用阶;第二个阶段段为调用后的逐级返回完成乘法运算后的逐级返回完成乘法运算 阶段。阶段。