汇编语言第5章王爽版(子程序调用指令)

汇编语言第5章王爽版(子程序调用指令)

ID:1508912

大小:141.00 KB

页数:24页

时间:2017-11-12

汇编语言第5章王爽版(子程序调用指令)_第1页
汇编语言第5章王爽版(子程序调用指令)_第2页
汇编语言第5章王爽版(子程序调用指令)_第3页
汇编语言第5章王爽版(子程序调用指令)_第4页
汇编语言第5章王爽版(子程序调用指令)_第5页
资源描述:

《汇编语言第5章王爽版(子程序调用指令)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章 结构化程序设计5.1子程序的概念5.2子程序的定义、调用和返回**5.3子程序的现场保护与参数传递**5.4子程序设计*5.5子程序的嵌套与递归调用5.6宏汇编程序设计教学基本内容5.1子程序的概念1、子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。过程(子程序):是指功能相对独立的一段程序。主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称

2、为子程序。2、程序中使用子程序的好处子程序作为一个功能性模块,供一个程序甚至多个程序使用:可以简化源程序结构;提高程序的可读性与可维护性;有利于代码复用;提高程序的设计效率。1、子程序的定义:由子程序定义伪指令PROC和ENDP来完成。其格式如下:子程序名PROC[NEAR/FAR]┆;过程体子程序名ENDP解释:(1)子程序名是子程序入口地址的符号表示。同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。(2)PROC表示子程序定义开始,ENDP表示子程序定义结束。(3)NEAR/FAR2、子程序的调用和返回

3、过程定义后,可在主程序中用CALL指令,反复调用。过程结束,由返回指令RET返回主程序。演示5.2子程序的定义、调用和返回主程序与子程序┋CALL过程名┋主程序┋RET子程序回到CALL指令后的指令处——返回地址5.2子程序的定义、调用和返回(续)子程序调用指令(CALL)CALL指令分成4种类型CALL子程序名;段内直接调用CALLr16/m16;段内间接调用CALLfarptr子程序;段间直接调用CALLfarptrmem;段间间接调用CALL指令需要保存返回地址:段内调用——偏移地址IP入栈SP←SP-2,SS:[

4、SP]←IP段间调用——偏移地址IP和段地址CS入栈SP←SP-2,SS:[SP]←CSSP←SP-2,SS:[SP]←IP5.2子程序的定义、调用和返回(续)子程序返回指令(RET)RET[n]功能:弹出CALL指令压入堆栈的返回地址段内返回——偏移地址IP出栈IP←SS:[SP],SP←SP+2段间返回——偏移地址IP和段地址CS出栈IP←SS:[SP],SP←SP+2CS←SS:[SP],SP←SP+2注意:在使用CALL和RET时,要保证过程的正确调用和返回说明:RET可以带参数子程序返回指令(RET)放在子程序

5、的末尾,它使子程序在执行完任务后将堆栈中的断点弹出,控制程序返回主程序继续执行被打断的程序。而返回地址(断点)就是子程序调用时入栈保护的断点地址IP(段内调用)或IP和CS值(段间调用)。通常,RET指令的类型是隐含的,它自动与子程序定义时的类型相匹配,如果是段内,返回时将栈顶的一个字弹给IP寄存器;如为段间,返回时先从栈顶弹出一个字给IP,接着再弹出一个字给CS。但是,当采用间接调用时,必须注意:保证CALL指令的类型与过程中RET指令的类型匹配,以免发生错误。例如CALLWORDPTR[BX]只能是段内调用,而CAL

6、LDWORDPTR[BX]能够调用一个远过程(段间调用),这样RET才能够识别返回类型。例:NEAR类型子程序codeSEGMENT;code段…CALLsubp;调用指令,xor指令的地址入栈xorax,ax…movah,4chint21hsubpPROCNEAR;子程序定义…RET;返回subpENDPcodeENDSENDSTART5、子程序的书写形式1.多处调用完成同一功能的子程序:codeSEGMENTstart:…CALLsub…CALLsub…MOVAH,4CHINT21HsubPROC、、、、RETsub

7、ENDPcodeENDSendstart2.模块化程序设计:多个子程序的调用codeSEGMENTbegin:CALLsub1CALLsub2CALLsub3MOVAH,4CHINT21Hsub1PROC、、RETsub1ENDPsub2PROC、、RETsub2ENDPsub3PROC、、RETsub3ENDPcodeENDSENDbegin子程序结构示例子程序的位置通常在主程序的所有可执行指令之前或之后,不能放在主程序的可执行指令序列内部,否则会破坏主程序结构5.3子程序的现场保护与参数传递PROGPROCPUSHA

8、XPUSHBXPUSHCX;保护现场PUSHDX┆┆POPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROGENDP例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用此方法保护和恢复现场。一、信息的保护与恢复二、主程序与过程的参数传递方式主程序-子程序的参数传递:入口参数——

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

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

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