DOS Windows汇编语言程序设计教程 7-302-11082-4k 第三章 3.4.pptVIP

DOS Windows汇编语言程序设计教程 7-302-11082-4k 第三章 3.4.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.4?子程序与扩展子程序 在程序设计中,常常会遇到某些功能完全相同的程序段在同一程序的多处或不同程序中出现,如求一个数的阶乘,比较两数大小,求字符串的长度,数制转换等等。为了节省存贮空间,减少编制程序的重复劳动,可以将这些多次重复的程序段从整个程序中独立出来,附加一些额外语句,将它编制成一种具有公用性的,独立的程序段——子程序,并通过适当的方法把它与其他程序段链接起来,这种程序设计的方法就称为子程序设计。 子程序结构的优点: 可以减小程序的长度,节省了计算机汇编源程序的时间和程序的存储空间。 子程序可以重复使用,使得程序设计时间可以大量节省。 增加了程序的可读性,方便对程序的修改、调试。 子程序是模块化、结构化、自顶向下程序设计的基础 MASM6.x子程序定义的方法 一般过程定义(子程序)伪指令。 子程序在汇编语言中也称为过程(Procedure),它相当于高级语言C++的函数和VB的过程 扩展过程定义(扩展子程序)伪指令。 一般过程定义(子程序)伪指令 过程定义的一般格式为: 过程名 PROC [NEAR/FAR] . . ;过程定义体 . RET 过程名 ENDP 过程名由程序员来命名,命名方法同变量名,同一源程序中不能有相同的过程名。 PROC为过程定义开始伪指令,ENDP为过程定义结束伪指令,PROC-ENDP必须配对使用;配对的PROC-ENDP前面的过程名应相同。 NEAR/FAR定义了过程的属性,NEAR属性的过程只能被相同代码段的程序调用,称为段内近调用;FAR 属性的过程只能被相同或不同代码段的程序调用,称为段间远调用。 子程序的结构形式 一个完整的子程序一般包括下列内容: (1) 子程序的说明部分 (2) 子程序的调用和返回 (3) 子程序的现场保护和现场恢复 子程序的说明部分 子程序的说明部分一般包括如下内容 : (1)子程序名。命名时要见名知意。 (2)子程序的功能。说明子程序完成的任务。 (3)子程序的入口参数。说明子程序运行所需参数及存放位置。 (4)子程序的出口参数。说明子程序的运行结果的参数及存放位置。 (5)子程序所占用的寄存器和工作单元。 (6)子程序调用示例。 举例 ;子程序名:B16TOD ;子程序的功能:完成将一个16位二进制数(无符号数)转换为对应的十进制数的 ;ASCII码,存放在共享存储区SHALLUNIT ;子程序的入口参数:存放在BINNUM存储单元 ;子程序的出口参数:存放在共享存储区SHALLUNIT和共享存储单元ADDRESS ;子程序所占用的寄存器和:AX,DX,SI,BX ;子程序调用示例: 子程序的调用和返回 CALL指令的执行分成两步 : 第一步,保护返回地址(CALL指令下一条指令的地址),利用堆栈实现,即将返回地址压入堆栈; 第二步,转向子程序,即把子程序的首地址送入IP或CS:IP RET指令的功能是返回主程序,即把子程序的返回地址送入IP或CS:IP。 子程序的现场保护和现场恢复 在主程序调用子程序时已经占用了一定数量的寄存器,子程序执行时又要使用寄存器,子程序执行完返回主程序后,又要保证主程序按原来状态继续执行,这就需要对那些在主程序中使用过了的寄存器,在子程序中又要用,且它们在主程序中的值又不能被覆盖时(因为子程序返回后主程序还要使用),这些寄存器的内容在子程序体执行之前必须加以保护,这就称为现场保护 子程序执行完再恢复这些寄存器的内容,称为现场恢复。子程序的现场保护和现场恢复既可以在主程序中完成,也可以在子程序中完成,但为了使程序结构清晰,我们一般在子程序中完成现场保护和现场恢复。 子程序的现场保护和现场恢复方法有两种 利用堆栈实现现场保护和现场恢复(利用PUSH/POP指令实现)。 利用内存单元实现现场保护和现场恢复(利用MOV指令实现)。 利用堆栈实现现场保护和恢复 过程名 PROC [NEAR/FAR] PUSH AX. . . ;保护现场 . PUSH DX . . ;过程定义体 . POP DX . . ;恢复现场 . POP AX RET 过程名 ENDP 3.4.2 子程序参数传递方法 主程序在调用子程序之前,必须把要子程序处理的数据传送给子程序,这些加工处理的数据就称为子程序的输入参数,也叫入口参数。 当子程序执行完返回主程序时,应该把本次处理的结果返回给主程序,这些加工处理的结果就称为输出参数,也称为子程序的出口参数。

您可能关注的文档

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档