《第六章子程序结构52666.ppt》由会员分享,可在线阅读,更多相关《第六章子程序结构52666.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第六章第六章 子程序结构子程序结构子程序的概念子程序的定义子程序设计方法子程序应用举例子程序的嵌套与递归调用子程序的概念子程序的概念在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。调用子程序的程序称为主调程序或主程序。子程序的定义子程序的定义子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下:过程名 PROC NEAR/FAR 过程名 ENDP其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。一般过程
2、名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。子程序设计方法子程序设计方法信息的保护与恢复主程序与子程序参数传递方式信息的保护与恢复信息的保护与恢复例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。PROG PROCPUSH AXPUSH BX PUSH CX;保护现场PUSH DX POP DXPOP CXPOP BX;恢复现场POP AXRET;返回断点处PROCENDP主程序与子程序参数传递方式主程序与子程序参数传递方式(1)寄存器法(2)约定单元法(3)堆栈法子程序应用举例子程序应用举例【例】将一个给定的二进制数按位转换成
3、相应的ASCII码字符串,送到指定的存储单元并显示。如二进制数10010011转换成字符串为10010011。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8倍和16倍二进制数的转换。入口参数:DX存放待转换的二进制数CX存放待转换数的位数(8位或16位)DI存放ASCII码首地址出口参数:转换后的字符串存放在以DI作指针的字节存贮区中程序如下:DATASEGMENTNUM8DB93HNUM16DW0ABCDHASCBUFDB20DUP(0)DATAENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACKSTART:MOVAX,DAT
4、AMOVDS,AXMOVDX,0MOVDL,NUM8;转换二进制数送转换二进制数送DXMOVCX,8;置位数置位数8LEADI,ASCBUF;字符串首址字符串首址DICALLBTASC;调用子程序调用子程序BTASCMOVDI,BYTE PTR 0DHMOVDI+1,BYTE PTR 0AH MOVDI+2,BYTE PTR$LEADX,ASCBUFMOVAH,9INT21HMOVDX,NUM16MOVCX,16;置位数置位数16LEADI,ASCBUFCALLBTASC MOVDL,BYTE PTR 0DHMOVDL+1,BYTE PTR 0AHMOVDL+2,BYTE PTR;显示转换后的
5、字符串显示转换后的字符串LEADX,ASCBUF MOVAH,9 INT21HBTASC PROCPUSHAX;保存保存AXMOVAL,0CMPCX,8;比较比较8位数位数JNEL1;直接转换直接转换16位数位数MOVDH,DL;8位数转换送位数转换送DHL1:ROLDX,,1;DX最高位移入最高位移入CFRCLAL,1;CF移入移入AL最低位最低位ADDAL,30HMOVDI,ALINCDILOOPL1POP AXRETBTASCENDPCODEENDSEND START子程序的嵌套与递归调用子程序的嵌套与递归调用1子程序的嵌套 子程序不但可以被主程序调用,而且也可以被其他子程序调用。我们把
6、一个子程序调用另一个子程序称为子程序的嵌套调用。2子程序的递归调用 子程序的递归调用是指一个子程序直接或间接地调用自己。递归子程序一般对应于数学上对函数的递归定义,它往往能设计出效率较高的程序,完成相当复杂的计算,因而是很有用的。【例】试 编 制 计 算 N!(N0)的 程 序。N!=N*(N-1)*(N-2)*1其递归定义如下:0!=1N!=N*(N-1)!(N1)计算N!的子程序FACT的流程图如图所示。【例例】计计算算5!的的程程序序示示例例,RESULT是是保保存存阶阶乘乘的的存存储单元。储单元。程序如下程序如下:STACK SEGMENT STACKDB 200 DUP(0)STACK ENDSDATASEGMENTNDW 5RESULTDW?DATAENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,NCALLFACTMOVAX,RESULTMOVAH,4CHINT21HFACTPROCCMPAX,0JNEL1MOV RESULT,1JMPEXITL1:PUSH AXDECAXCALL FACTPOPAXMOV RESULTMOV RESNLT,AXEXIT:RETFACT ENDPCODE ENDSENDSTART