子程序的调用.ppt

子程序的调用.ppt

ID:48733182

大小:146.00 KB

页数:46页

时间:2020-01-20

子程序的调用.ppt_第1页
子程序的调用.ppt_第2页
子程序的调用.ppt_第3页
子程序的调用.ppt_第4页
子程序的调用.ppt_第5页
资源描述:

《子程序的调用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、子程序的调用子程序的结构子程序的定义子程序的调用与返回指令子程序的编程原则参数的传递子程序的定义1.基本概念功能相对独立的一段程序.输入输出处理过程均可编写为相应的子程序.使程序的模块化,便于代码复用、简化编程。2.子程序的定义过程定义伪指令过程名PROC[NEAR/FAR];过程的开始,FAR、NEAR过程的属性过程体RET过程名ENDP;过程结束3.注意问题1)过程体内必须有一条RET指令被执行proc1procmovax,0proc1endpproc2procmovbx,-1retprocendp子程序的定义2)调用程序和过程在同一程序段时,属性选择NEAR,当调用程序和过程不在同

2、一程序段时,应选择FAR3)在调用时,NEAR和FAR可以强制改变CALLFARPTRNEARPROCCALLNEARPTRFARPROC子程序的定义子过程的调用与返回指令子过程的调用是个”有去有回”的过程,子程序执行完后必须返回CALL指令的下一条指令处,因此必须对CALL指令的下条指令的地址进行保存.保存地址的操作是通过堆栈来完成.不是采用PUSHPOP指令来实现,而是用CALLRET指令隐含完成.1.子程序的调用指令指令格式:CALLDSTDST是子程序的子程序名或子程序的首地址.可以采用与转移指令有关的四种转移的寻址方式之一,即:段内直接调用段内间接调用段间直接调用段间间接

3、调用.段内、段间:调用程序和子程序在同一段内,为段内调用;否则段间调用;直接、间接:DST为子程序名(子程序首地址),是转移地址,该有效地址直接出现在CALL指中;若有效地址出现在寄存器中间接得到,则为间接调用子过程的调用与返回指令1)段内直接调用SP=SP-2;SS:[SP]CALL下一条指令的IPIP=IP+D16(DST为16位)2)段内间接调用SP=SP-2;SS:[SP]CALL下一条指令的IPIP=DST中的有效地址EA(DST为16位)子过程的调用与返回指令3)段间直接调用SP=SP-2;SS:[SP]返回地址的段地址SP=SP-2;SS:[SP]返回地址的偏移值IP=DST的

4、偏移地址CS=DST的段地址4)段间间接调用SP=SP-2;SS:[SP]返回地址的段地址SP=SP-2;SS:[SP]返回地址的偏移值IP=EA的低16位CS=EA的高16位子过程的调用与返回指令例题:判断下列CALL指令的寻址方式:1)PRO1为过程名,属性为NEARCALLPRO12)PRO2为过程名,属性为FARCALLPRO23)设过程的偏移地址在BX中,则有指令:CALLBX4)设过程的偏移地址在[BX]中,则有指令:CALL[BX]子过程的调用与返回指令5)设过程地址在数据段addi所指的单元中,则有指令:CALLDWORDPTRaddi6)设过程地址在[BX]中,则有指令:C

5、ALLDWORDPTR[BX]子过程的调用与返回指令2.子程序的返回指令指令格式:RET/RETN/RETF指令功能:RET:返回地址出栈IP(段内)RETF:返回地址出栈IP(段内段间)和CS寄存器(段间)RETN:返回地址出栈IP(段内段间)和CS寄存器(段间)再将N个(必须是偶数)字节数据弹出来,保持栈的平衡。子过程的调用与返回指令3.注意:1)CALL和RET均不影响标志2)NEAR属性的过程,RET是段内返回,汇编后仍为RET;如果是FAR属性的过程,RET是段间返回,汇编后RET为RETF.3)段内调用返回只需设置IP4)段间调用返回需设置IP和CS,多模块采用此设计方法子过程的

6、调用与返回指令4.子程序调用方式举例分析下面程序段,说明各种调用子程序的方法和寻址方式:datasegmentnprocdwnearpfprocddfarpdataendscode1segmentassumecs:code1,cs:dataMainprocfar子过程的调用与返回指令movax,datamovds,axcallnearpleaax,nearpcallaxcallnprocleabx,nproccallwordptr[bx]callfarpcallfprocleabx,fproccalldwordptr[bx]movah,4chint21hMainendpNearpprocne

7、ar……retNearpendpCode1endsendmaincode2segmentassumecs:code2Farpprocfar….retFarpendsCode2ends子程序的编程原则1.分析题意,进行模块分解,画出流程图.2.对子程序做说明.说明内容:子程序名,功能,入口参数,出口参数,执行时间等3.主程序中的寄存器信息内容的保存和恢复主程序调用和返回时断点信息的保存和恢复4.注意堆栈的使用.

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

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

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