汇编语言第5章王爽版(子程序调用指令).ppt
《汇编语言第5章王爽版(子程序调用指令).ppt》由会员分享,可在线阅读,更多相关《汇编语言第5章王爽版(子程序调用指令).ppt(24页珍藏版)》请在三一办公上搜索。
1、第5章结构化程序设计,5.1 子程序的概念5.2 子程序的定义、调用和返回*5.3 子程序的现场保护与参数传递*5.4 子程序设计*5.5 子程序的嵌套与递归调用5.6 宏汇编程序设计,教学基本内容,5.1 子程序的概念,1、子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。过程(子程序):是指功能相对独立的一段程序。主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。,、程序中使用子程序的好处子程序作为一个功能性模
2、块,供一个程序甚至多个程序使用:可以简化源程序结构;提高程序的可读性与可维护性;有利于代码复用;提高程序的设计效率。,1、子程序的定义:由子程序定义伪指令PROC和ENDP来完成。其格式如下:子程序名 PROC NEAR/FAR;过程体子程序名 ENDP解释:(1)子程序名是子程序入口地址的符号表示。同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。(2)PROC表示子程序定义开始,ENDP表示子程序定义结束。(3)NEAR/FAR2、子程序的调用和返回过程定义后,可在主程序中用CALL指令,反复调用。过程结束,由返回指令RET返回主程序。,演示,5.2 子程序的定义、调用和返回,
3、主程序与子程序,CALL 过程名,主程序,RET,子程序,回到CALL指令后的指令处返回地址,5.2 子程序的定义、调用和返回(续),子程序调用指令(CALL),CALL指令分成4种类型CALL子程序名;段内直接调用CALL r16/m16;段内间接调用CALL far ptr子程序;段间直接调用CALL far ptr mem;段间间接调用CALL指令需要保存返回地址:段内调用偏移地址IP入栈SPSP2,SS:SPIP段间调用偏移地址IP和段地址CS入栈SPSP2,SS:SPCSSPSP2,SS:SPIP,5.2 子程序的定义、调用和返回(续),子程序返回指令(RET),RETn功能:弹出C
4、ALL指令压入堆栈的返回地址段内返回偏移地址IP出栈 IPSS:SP,SPSP2段间返回偏移地址IP和段地址CS出栈IPSS:SP,SPSP2CSSS:SP,SPSP2,注意:在使用CALL和RET时,要保证过程的正确调用和返回说明:RET可以带参数,子程序返回指令(RET),放在子程序的末尾,它使子程序在执行完任务后将堆栈中的断点弹出,控制程序返回主程序继续执行被打断的程序。而返回地址(断点)就是子程序调用时入栈保护的断点地址IP(段内调用)或IP和CS值(段间调用)。通常,RET指令的类型是隐含的,它自动与子程序定义时的类型相匹配,如果是段内,返回时将栈顶的一个字弹给IP寄存器;如为段间,
5、返回时先从栈顶弹出一个字给IP,接着再弹出一个字给CS。但是,当采用间接调用时,必须注意:保证CALL指令的类型与过程中RET指令的类型匹配,以免发生错误。例如CALL WORD PTRBX只能是段内调用,而CALL DWORD PTRBX能够调用一个远过程(段间调用),这样RET才能够识别返回类型。,例:NEAR 类型子程序 code SEGMENT;code段 CALL subp;调用指令,xor指令的地址入栈 xor ax,ax mov ah,4ch int 21h subp PROC NEAR;子程序定义 RET;返回 subp ENDP code ENDS END START,、子程
6、序的书写形式,1多处调用完成同一功能的子程序:code SEGMENTstart:CALL sub CALL sub MOV AH,4CH INT 21Hsub PROC、RETsub ENDPcode ENDS end start,2模块化程序设计:多个子程序的调用code SEGMENTbegin:CALL sub1 CALL sub2 CALL sub3 MOV AH,4CH INT 21Hsub1 PROC、RETsub1 ENDPsub2 PROC、RETsub2 ENDPsub3 PROC、RETsub3 ENDPcode ENDS END begin,子程序结构示例,子程序的位置
7、通常在主程序的所有可执行指令之前或之后,不能放在主程序的可执行指令序列内部,否则会破坏主程序结构,5.3子程序的现场保护与参数传递,PROGPROCPUSHAXPUSHBX PUSHCX;保护现场PUSHDX POPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROGENDP,例如:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用此方法保护和恢复现场。,一、信息的保护与恢复,二、主程序与过程的参数传递方式,主程序子程序的参数传递:入口参数 也称入口条件,是指主程序调用子程序前,为子程序内部数据处理准备所需的预置值;出口参数 也称出口条件,是子程序返回主程序后
8、,把子程序处理的结果传递给主程序的数据。参数传递的基本方法有:(1)寄存器法:通过CPU寄存器传递参数。传递数据方便、快捷,但所能传递的数据长度和个数都有限。(2)变量法:通过内存单元(组)传递参数。传递数据的长度和个数可不受限制,程序设计比较灵活。(3)堆栈法:通过堆栈传递参数。用堆栈保存所要传递的数据或存储地址,利用堆栈数据存取的特点,是常用的参数传递方法。,例5-1:分别用三种参数传递方法编写求12的和的程序。要求将结果送到内存单元,并显示。,DATA SEGMENTSUM DB 0DATA ENDSSTACK SEGMENT DB 100 DUP(?)STACK ENDSCODE SE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 章王爽版 子程序 调用 指令
链接地址:https://www.31ppt.com/p-5993790.html