第六章子程序结构-1.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第六章子程序结构-1.ppt》由会员分享,可在线阅读,更多相关《第六章子程序结构-1.ppt(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第六章第六章 子程序结构子程序结构6.1 子程序的设计方法子程序的设计方法6.2 子程序的嵌套子程序的嵌套6.3 子程序举例子程序举例6.4 DOS系统功能调用系统功能调用6.1 子程序的设计方法子程序的设计方法6.1.1 过程定义伪操作过程定义伪操作6.1.2 子程序的调用和返回子程序的调用和返回6.1.3 保护与恢复寄存器保护与恢复寄存器6.1.4 子程序的参数传送子程序的参数传送 6.1.5 增强功能的过程定义伪操作增强功能的过程定义伪操作6.1.1 过程定义伪操作过程定义伪操作 过程名过程名 PROC NEAR(FAR)过程名过程名 ENDP(1)NEAR属性:调用程序和过程在同一个属
2、性:调用程序和过程在同一个 代码段中代码段中 (段内调用)(段内调用)(2)FAR属性:调用程序和过程不在同一个属性:调用程序和过程不在同一个 代码段中代码段中 (段间调用)(段间调用)code segmentmain proc far .call subr1 .retmain endp subr1 proc near .retsubr1 endpcode ends segx segmentsubt proc far .retsubt endp .call subt .segx endssegy segment .call far ptr subt .segy ends 6.1.2 子程序的调
3、用和返回子程序的调用和返回子程序调用:子程序调用:隐含使用堆栈保存返回地址隐含使用堆栈保存返回地址 call near ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序 call far ptr subp (1)保存返回地址保存返回地址 (2)转子程序转子程序子程序返回:子程序返回:ret(IP)(SP)(IP)(SP)(CS)6.1.3 保护与恢复寄存器保护与恢复寄存器 SUBT PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX POP DX POP CX;若若CX和和DX位置互换位置互换,意义如何意义如何?POP BX;原则上除了实
4、现过程通信的原则上除了实现过程通信的 POP AX;量以外都要进行现场保护量以外都要进行现场保护 RET SUBT ENDP【例例】延时程序,在实际应用中一般作为子程序调用,延时程序,在实际应用中一般作为子程序调用,现在我们把延时现在我们把延时1s的程序设计成子程序。的程序设计成子程序。程序内容如下:(省略段的定义)程序内容如下:(省略段的定义)DELAY1S:PUSHF ;现场保护现场保护PUSHBXPUSHCX MOVBX,3E8H;1000D LP2:MOVCX,176H LP1:PUSHF POPF LOOPLP1;延时延时1ms DECBXJNZLP2;延时延时1sPOPCXPOPB
5、XPOPFRET 从上面的子程序我们可以看出:子程序中因从上面的子程序我们可以看出:子程序中因为用到了为用到了BX,CX和标志寄存器,所以程序和标志寄存器,所以程序一开始就用了一开始就用了3条条PUSH指令,把这些寄存器指令,把这些寄存器内容压进堆栈,以保护内容压进堆栈,以保护CPU的现场;而在返的现场;而在返回前,它又用了回前,它又用了3条条POP指令指令(遵循遵循“先入后先入后出出”的原则的原则)把栈中内容弹回到寄存器中去。把栈中内容弹回到寄存器中去。当然,这些保护现场和恢复现场的工作在主当然,这些保护现场和恢复现场的工作在主程序不怕丢失这些内容时,可以不用,或者程序不怕丢失这些内容时,可
6、以不用,或者放在主程序中解决,但一般来说,放在子程放在主程序中解决,但一般来说,放在子程序中更妥当,也更通用些。序中更妥当,也更通用些。在编写实际子程序时要注意下列问题:在编写实际子程序时要注意下列问题:(1)入口信息入口信息。(2)出口信息出口信息。(3)现场的保护和恢复现场的保护和恢复。先仔细观察子程序中到底用。先仔细观察子程序中到底用了哪些寄存器,以便主程序调用它时注意保护和恢了哪些寄存器,以便主程序调用它时注意保护和恢复现场。复现场。(4)最后一条一定是最后一条一定是RET指令指令。在这一节里,我们只举了例在这一节里,我们只举了例1一个简单的子程序,但一个简单的子程序,但在实际应用中,
7、我们可以把各种功能的程序编成子在实际应用中,我们可以把各种功能的程序编成子程序。程序。例如,一个任意数的平方;把一组数进行排序;多倍例如,一个任意数的平方;把一组数进行排序;多倍精度的二精度的二十进制数相加;十进制数与二进制数的十进制数相加;十进制数与二进制数的转换等等,都可以编成子程序来调用。这种工作不转换等等,都可以编成子程序来调用。这种工作不仅对学习子程序来说是必要的,而且,对于熟练编仅对学习子程序来说是必要的,而且,对于熟练编程,程,积少成多积少成多积少成多积少成多也是必不可少的。也是必不可少的。另外,值得提出的是:另外,值得提出的是:子程序方式也可以利用到编写子程序方式也可以利用到编
8、写大型复杂的程序中去。大型复杂的程序中去。也就是说,也就是说,我们可以把一个我们可以把一个复杂的程序分割成很多独立的,关联较少的模块,复杂的程序分割成很多独立的,关联较少的模块,分别编写成子程序分别编写成子程序,然后,用一个主程序然后,用一个主程序(主要由调主要由调用子程序指令构成用子程序指令构成)把它们串联起来把它们串联起来。这样的程序不。这样的程序不但结构清晰,而且对调试也带来极大的方便。这一但结构清晰,而且对调试也带来极大的方便。这一点,点,在具体实践中会有更深刻的体会在具体实践中会有更深刻的体会在具体实践中会有更深刻的体会在具体实践中会有更深刻的体会。6.1.4 子程序的参数传送子程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 章子 程序结构
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内