程序篇-子程序结构

程序篇-子程序结构

ID:42996892

大小:992.50 KB

页数:55页

时间:2019-09-27

程序篇-子程序结构_第1页
程序篇-子程序结构_第2页
程序篇-子程序结构_第3页
程序篇-子程序结构_第4页
程序篇-子程序结构_第5页
资源描述:

《程序篇-子程序结构》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章程序篇-子程序结构子程序又称为过程。它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它。有些程序对于某个用户可能只用到一次,但它是一般用户经常用到的,如十进制数转换成二进制数、二进制数转换成为十六进制数并显示输出等,对于这些常用的特定功能的程序段也经常编成子程序的形式供用户使用。一、过程定义伪操作它用在过程(子程序)的前后,使整个过程形成清晰的,具有特定

2、功能的代码块格式:ProcedurenamePROCAttribute...retProcedurenameENDP其中:过程名(标识符),它是子程序的入口符号地址那么过程的属性如何定义呢?调用程序和过程在同一个代码段中则使用NEAR属性。调用程序和过程不在同一个代码段中则使用FAR属性。例1、调用程序和子程序在统一代码段中:MAINPROCFAR┆CALLSUB┆RETMAINENDPSUB1PROCNEAR┆SUB1ENDPMAINPROCFAR┆CALLSUB┆RETSUB1PROCNEAR┆S

3、UBENDPMAINENDP或写成:即过程可以嵌套例2、调用程序和子程序不在同一个代码段中。SEG1SEGMENT┆SUB1PROCFAR┆RETSUB1ENDP┆CALLSUB1┆SEG1ENDS在另一段调用:必须用FAR属性,故SUB1过程必须定义为FAR属性SEG2SEGMENT┆CALLSUB1;┆SEG2ENDS注意:主程序可看成DOS的一个子过程,故用FAR属性。子程序的调用和返回已包括了返回地址的出、入栈,故在子程序中必须正确使用堆栈,否则将造成运行错误。在一进入子程序后应该将子程序所需

4、要使用的寄存器内容保存在堆栈中,在退出子程序前把寄存器内容恢复原状。二、主程序与子程序的参数传送调用程序在调用子程序时,经常需要传送一些参数给子程序;子程序运行完后也经常要回送一些信息给调用程序。参数传送(参数传送、过程通信):调用程序和子程序之间的信息传送。1、通过寄存器传送变量:利用寄存器在主—子程序之间传送数信息。例、十进制到十六进制转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。分析:(1)键盘输入的十进制数(ASCII),要将它转换成二进制数存放:子程序D

5、ECIBIN(2)二进制转换成十六进制数并显示:子程序BINIHEX(3)为避免屏幕上的重叠,必须有回车和换行功能:CRLF用三个子程序联合实现题目要求。将BX寄存器作为过程之间传送转换数据的“交通员”。开始调DECIBIN调CRLF调BINIHEX调CRLF结束从键盘取得十进制数,存于BX中显示回车和换行用十六进制形式显示BX中数主程序调用如下:mainprocfarrepeat:calldecibincallcrifcallbinihexcallcrifjmprepeatmainendp子程序定义

6、为NEARBX←0键盘输入数据数据在0---9D之间?退出扩展为16位数做运算—转换10bx+ax结果存入BX↓↓↓YNDECIBIN子程序(注:退出条件)decibinprocnearmovbx,0newchar:movah,1int21h subal,30hjlexitcmpal,9jgexitcbwxchgax,bx;交换后bx为新数,ax为以前的数movcx,10dmulcxxchgax,bx;交换后ax为新数,bx为以前的数*10 addbx,axjmpnewcharexit:retdeci

7、binendpBINIHEX子程序(上一章中的例1已讲过)CRLF子程序:回车的ASCII0dH换行的ASCII0aHcrlfprocnearmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21h retcrlfendp2、直接访问模块中的变量:如果过程和调用程序在同一源文件(同一程序模块)中,则过程可直接访问模块中的变量。 例、主程序MAIN和过程PROADD在同一源文件中,要求用过程PROADD累加数组中的所有元素并把和送到指定的存储单元中去(不考虑溢出情况)注

8、意:合理使用堆栈datasegmentarydw100dup(?) countdw100 sumdw? dataends子程序proadd结构pushax保护现场pushcxpushsileasi,ary做加法运算movcx,countxorax,ax next:addax,[si]恢复现场addsi,2 loopnextmovsum,ax结束popsipopcxpopaxMainprocfar assumecs:code,ds:datstart:. .

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。