欢迎来到天天文库
浏览记录
ID:52510897
大小:461.05 KB
页数:39页
时间:2020-04-09
《汇编语言子程序设计.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本章主要教学内容本章主要教学目的及要求1.理解掌握子程序调用与返回指令;2.掌握子程序设计的基本过程和设计方法;3.能熟练设计子支程序。1.子程序调用与返回指令。2.子程序设计的基本过程和设计方法。7.1概述7.1.1子程序设计的概念含义:被独立出来的程序段称为子程序或过程主程序与子程序之间的关系主程序子程序CALLSUB1(断点1:)CALLSUB2(断点2:)HTLSUB1:RETSUB2:RET7.1.2子程序的特性(1)功能独立(2)通用性(3)可浮动性(4)可递归和可重入性7.1.3子程序的优点(1)简化了程序设计过程,使程序设计时间大量节省。(2)缩短了程序的长度,节省了
2、计算机汇编源程序的时间和程序的存储空间。(3)增加了程序的可读性,便于对程序的修改、调试。(4)方便了程序的模块化、结构化和自顶向下的程序设计。7.2子程序调用和返回指令7.2.1子程序调用指令类型段内调用主程序和子程序处在同一代码段,只改变IP值段间调用主程序和子程序处不在同一代码段,既改变IP值也改变CS值段内直接调用格式:CALLDST/NEARPTRDST功能:(1)SP←SP-2(SP)←IP(2)IP←IP+D16段内间接调用格式:CALLDST/WORDPTRDST功能:(1)SP←SP-2(SP)←IP(2)IP←(EA)例:CALLMULL段间直接调用格式:CALL
3、FARPTRDST功能:(1)SP←SP-2(SP)←CSSP←SP-2(SP)←IP(2)IP←子程序偏移地址CS←子程序段地址例:CALLBXCALLWORDPTR[SI]段间直接调用格式:CALLDWORDPTRDST功能:(1)SP←SP-2(SP)←CSSP←SP-2(SP)←IP(2)IP←(EA)CS←(EA+2)例:CALLFARPTRMULL例:CALLDWORDPTR[BX]从栈顶弹出一个字数据送入IP7.2.2返回指令功能:从堆栈的栈顶弹出数据作为返回地址含义:实现子程序执行完后要返回主程序的指令分类:段内返回和段间返回从栈顶弹出两个字数据分别送入IP和CS类型
4、段内返回RET格式:RET功能:IP←(SP)SP←SP+2RETn格式:RETn功能:IP←(SP)SP←SP+2SP←SP+n段间返回RET格式:RET功能:IP←(SP)SP←SP+2CS←(SP)SP←SP+2RETn格式:RETn功能:IP←(SP)SP←SP+2CS←(SP)SP←SP+2SP←SP+n7.3子程序的定义、调用和返回7.3.1子程序定义1.子程序定义伪指令格式:〈子程序名〉PROCNEAR/FAR┆┆RET〈子程序名〉ENDP说明:(1)主程序和子程序在同一代码段中,定义为NEAR型。(2)主程序和子程序不在同一代码段中,定义为FAR型。(3)可将主程序定
5、义为FAR型,看作是DOS调用的一个过程。2.子程序调用方法说明包括:(1)子程序名;(2)子程序功能;(3)占用寄存器;(4)入口参数;(5)输出参数;(6)子程序调用示例。3.现场保护和现场恢复现场保护:在子程序的功能实现前把将要用到的寄存器中的原有内容保存起来现场恢复:子程序的功能实现后,将数据取出再送回原来的寄存器中例:子程序SUB1中用到了寄存器AX、BX、CX、DX,则可能的现场保护和现场恢复如下:SUB1PROCPUSHAX;现场保护PUSHBXPUSHCXPUSHDX┆;子程序功能段POPDX;现场恢复POPCXPOPBXPOPAXRETSUB1ENDP注意:现场保护
6、应与现场恢复的顺序正好相反。4.子程序的设计方法(1)利用过程定义伪指令声明;(2)利用RET指令返回主程序;(3)对堆栈的压入和弹出操作要成对使用;(4)现场保护和现场恢复;(5)应安排在代码段的主程序之外,也可以放在主程序开始之前;(6)允许嵌套和递归;(7)可以与主程序共用一个数据段,也可以使用不同的数据段;(8)编写可以很灵活,但一定要保证堆栈操作的正确性;(9)处理好子程序和主程序间的参数传递问题(见7.4节);(10)提供必要的子程序说明信息。子程序定义应用举例【例7-1】求两个数的最大公约数子程序子程序调用方法说明:;子程序名:MCDST;功能:求两个正整数的最大公约数
7、;;入口参数:AX和BX中存放两个正整数;;出口参数:CX中存放求得的最大公约数;;寄存器占用:使用AX、BX、CX、DX寄存器,CX中内容被改变,AX、BX、DX中的内容保持不变。子程序清单:MCDSTPROCNEAR/FARPUSHAX;保护现场PUSHBXPUSHDXAGAIN:XORDX,DX;AX值扩展到DXAX中DIVBX;商存入AX,余数存入DXANDDX,DXJZEXIT;余数为0转EXITMOVAX,BX;余数不为0更新被除数MOVBX,
此文档下载收益归作者所有