- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                汇编课件第5章节子程序设计
                    第5章  子程序设计 子程序设计 子程序的定义格式 子程序与调用程序 子程序与主程序的参数传递 子程序中寄存器的保护与恢复 子程序的嵌套与递归 子程序的定义格式 用伪指令PROC定义过程 子程序的定义格式 子程序的编写原则 能反复使用、提供不同主程序使用 采用较好的算法实现,节省内存、提高效率 建立相关文档,满足程序使用和维护的需要 说明文档中应包括:子程序的名称、功能、入口和出口参数、工作寄存器、工作单元以及创建日期和修改日期等 子程序的定义格式 过程定义举例 找出以MSG0为首地址,以‘#’作为结束的字数据区中的最小值。 子程序与调用程序 段内调用 供段内调用的子程序必须被定义为NEAR类型,且与主程序位于同一个代码段内。 子程序的位置通常在主程序的所有可执行指令之前或之后。 不能放在可执行的指令序列内部。 子程序与调用程序 段间调用 子程序必须被定义为FAR类型,并与主程序位于不同的代码段中。 段间调用子程序举例 从键盘上从一个长度小于100的字符串,存入以BUF为首地址的缓冲区。 其中如有大写字母则转换成对应的小写字母,字符串以回车键作为结束。 子程序实现大写字母的判断,并转换成小写字母,方法是大写字母的 ASCII 码加上 20H 即可 子程序与调用程序 定义子程序CHGE实现字符转换 子程序与调用程序 字符串的输入 利用BIOS功能调用:AH =00 		MOV   AH,   0  		INT     16H 输入结束的判断 		CMP   AL,  0DH 子程序与调用程序 子程序调用 利用调用(CALL)指令和返回(RET)指令实现对子程序的正确调用和返回。 CALL指令执行时压入堆栈的地址即是执行RET指令时供子程序返回主程序的地址。 段内调用时主调程序和子程序在同一个代码段内 CALL指令和RET指令的属性依赖于定义子程序时设置的属性。 子程序与主程序间的参数传递 利用寄存器传递参数 最常用的参数传递方式,最为快速直观。 由于寄存器的数量有限,故只适于传递少量数目的参数。 方法是主程序将子程序的入口参数放在指定的寄存器中,然后调用子程序对指定寄存器中的数据进行处理。 利用寄存器传递参数 从DAT数据区中取数判断正负,并输出相应符号: 利用寄存器传递参数 从DAT字数据区中取数,转换成5位十进制数对应的ASCII码: 利用寄存器传递参数 例子 现有一DAT为首地址的字数组共有10个元素,编程按5位十进制数形式显示该10个元素,并注明正负号。 要求比较正负和十进制转换分别用子程序实现 利用寄存器传递参数 子程序中寄存器的保护与恢复 如果子程序中需要使用的寄存器在主程序调用该子程序前已被使用时,需要在调用前对寄存器的值进行保护。 将子程序用到一些的寄存器压入堆栈进行保护 需要保护寄存器的条件 其中存放着主程序调用后仍要使用的内容 子程序可能要改变其中的内容 利用寄存器传递参数 子程序中寄存器的保护与恢复原则 当一个子程序是公用子程序时,通常保护和恢复子程序所用到的,除了作为出口参数的寄存器之外的所有寄存器。 在子程序的开始处将所有需要的寄存器入栈,返回主程序前再以相反的顺序出栈。 子程序与主程序间的参数传递 利用存储单元传递参数 适用于主程序向子程序传递的参数较多的场合,使用约定的存储单元传递参数。 方法是主程序将要传递给子程序的数据存入存储单元,而在子程序调用时将数据的首地址告诉子程序即可。 用存储单元传递参数举例 在以MSG为首地址的存储区分别存有一批数据,且以‘#’作为结束标志,编程利用子程序调用实现将其中的最小值并存储在RSLT单元中。 利用存储单元传递参数 递归子程序设计 递归子程序 子程序直接或间接地调用自身时称为递归调用。 含有递归调用的子程序称为递归调用子程序。 递归调用必须采用寄存器或堆栈传递参数,递归深度受到堆栈空间的限制。 递归程序必须有一个退出递归的测试语句,即递归是有条件的。 递归子程序设计 递归子程序设计 编程完成求N! 递归子程序设计 子程序设计 以 3! 为例的递归过程 子程序与主程序间的参数传递 利用堆栈传递参数 在主程序中将需要传递的数据压栈,然后调用子程序,在子程序中通过出栈操作读取数据。 利用堆栈传递参数 子程序中读取入口参数的方法 利用堆栈传递参数 出口参数传递 子程序返回前,先恢复所保护的寄存器。 将堆栈中保存的返回地址出栈并保存。 将出口参数压栈。 将返回地址重新压栈。 * 山东工商学院 * 格式: 	过程名    PROC    属性 		    …… 		    RET 	过程名    ENDP 过程名为标识符,是子程序入口的符号地址,属性是指NEAR 或 FAR 类型。 MSG0	DW  123,1ABH,9BCDH,0A99H,10,1234H,1A1BH,
                您可能关注的文档
最近下载
- 高二化学选择性必修三知识点 .pdf
 - 图形创意(第二版)林家阳 高教 全套课件.pdf VIP
 - 社区网格员安全培训课件.ppt VIP
 - 浅谈水体富营养化治理的国内外研究现状.pdf VIP
 - 公共管理研究方法(浙大)大学MOOC慕课 客观题答案.docx VIP
 - “十五五”档案战略规划与发展方向.docx VIP
 - 《创新创业基础——理论、案例与训练》 第七章 选择商业模式.pptx VIP
 - 国际快递实务 出境快件的检验检疫 PPT-海关快件监管流程.pptx VIP
 - 《老年人心理护理》精品课件——项目二 老年人认知变化及其应对.pptx
 - 一种硫化镉-硫铟锌异质结纳米棒阵列复合材料及其制备方法.pdf VIP
 
原创力文档
                        

文档评论(0)