- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IBM-PC汇编语言程序设计第6章 子程序结构.ppt
第六章 子程序设计结构 6.1 子程序的概念 6.2 子程序的定义 6.3 子程序设计方法 6.4 子程序应用举例 6.5 子程序的嵌套与递归调用 6.6 模块化程序设计 6.1 子程序的概念 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 6.2 子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下: 过程名 PROC [NEAR/FAR] ┆ 过程名 ENDP 其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。 一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。 6.3 子程序设计方法 1.信息的保护与恢复 2.主程序与子程序参数传递方式 1.信息的保护与恢复 例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。 PROG PROC PUSH AX PUSH BX PUSH CX ;保护现场 PUSH DX ┆ ┆ POP DX POP CX POP BX ;恢复现场 POP AX RET ;返回断点处 PROC ENDP 2.主程序与子程序参数传递方式 (1)寄存器法 (2)约定单元法 (3)堆栈法 6.4 子程序应用举例 【例6.1】将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元并显示。如二进制换成字符串为。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。 入口参数:DX存放待转换的二进制数 CX存放待转换数的位数(8位或16位) DI存放ASCII码首地址 出口参数:转换后的字符串存放在以DI作指针的字节存贮区中 程序如下: DATA SEGMENT NUM8 DB 93H NUM16 DW 0ABCDH ASCBUF DB 20 DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV DX,0 MOV DL,NUM8 ;转换二进制数送DX MOV CX,8 ;置位数8 LEA DI,ASCBUF ;字符串首址→DI CALL BTASC ;调用子程序BTASC MOV BYTE PTR [DI],0DH MOV BYTE PTR [DI+1],0AH MOV BYTE PTR [DI+2], ‘$’ LEA DX,ASCBUF MOV AH,9 INT 21H MOV DX,NUM16 MOV CX,16 ;置位数16 LEA DI,ASCBUF CALL BTASC MOV BYTE PTR [DI],0DH MOV BYTE PTR [DL+1],0AH MOV BYTE PTR [DL+2], ‘$’ ; 显示转换后的字符串 LEA DX, ASCBUF MOV AH,9 INT 21H BTASC PROC PUSH AX ;保存AX MOV AL,0 CMP CX,8 ;比较8位数 JNE L1 ;直接转换16位数 MOV DH,DL ;8位数转换送DH L1: ROL DX,,1 ;DX最高位移入CF RCL AL,1 ;CF移入AL最低位 ADD AL,30H MOV [DI],AL INC DI LOOP L1 POP AX RET BTASC ENDP CODE ENDS END START 6.5 子程序的嵌套与递归调用 1.子程序的嵌套 子程序不但可以被主程序调用,而且也可以被其他子程序调用。我们把一个子程序调用另一个子程序称为子程序的嵌套调用。 2.子程序的递归调用 子程序的递归调用是指一个子程序直接或间接地调用自己。递归子程序一般对应于数学上对函数的递归定义,它往往能设计出效率较高的程序,完成相当复杂的计算,因而是很有用的。 【例6.2】 【例6.2】试编制计算N! (N≥0)的程序。N!=N*(N-1)*(N-2)*……*1 其递归定义如下: 0!=1 N!=N*(N-1)! (N>1) 计算N!的子程序FACT的流程图如图6.1所示
文档评论(0)