欢迎来到天天文库
浏览记录
ID:57006491
大小:79.00 KB
页数:27页
时间:2020-07-26
《汇编语言第七章 子程序课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、AssemblyLanguageProgramming第七章子程序把可以多次调用、能够完成特定操作功能的程序段编写成独立的程序模块,该程序模块称为子程序,又称为过程。调用这些子程序的程序称为主程序。1、子程序概念一、子程序概念在主程序中,如果调用到子程序,就需要把控制转移到子程序,这个过程称为转子。子程序执行完了,要把控制再返回到主程序,这个过程称为返主。2、主程序与子程序之间的关系调用子程序调用子程序调用子程序返回子程序主程序②③①②③①3、子程序的特性重复性:一个子程序只占用一段存储区域,但
2、可以多次被调用。它既避免了编程人员的重复劳动,又节省程序的存储空间。通用性:只能完成特定功能的子程序用处不大。没有通用性的子程序就不可能被多次调用。例如,一个只能实现5个字节加法运算的字节加法子程序就没有通用性。要能够得到广泛应用的通用的多字节加法子程序,字节数应该是任意的。子程序定义伪操作用在子程序的前后,使整个子程序形成清晰的、具有特定功能的代码块。其格式为:子程序PROC[NEAR
3、FAR]……………………子程序ENDP二、子程序的定义(P130)说明:①PROC和ENDP是子程序定义的关
4、键字。②子程序名为标识符,它是子程序入口的符号地址。它的写法与标号的写法相同。③NEAR和FAR是子程序的属性。在同一段内调用使用NEAR属性,但可以隐含;段间调用使用FAR属性。堆栈段SEGMENTSTACK……………………堆栈段ENDS程序整体结构图示数据段SEGMENT……………………堆栈段ENDS代码段SEGMENTASSUME…………程序启动地址:…………………………MOVAH,4CHINT21H子程序PROC……………………子程序ENDP代码段ENDSEND程序启动地址子程序调用指令
5、的格式:CALL子程序名
6、Reg
7、Mem三、子程序的调用与返回(P132)1、子程序的调用例如:CALL DISP;DISP是子程序名CALL BX;BX是子程序的偏移地址CALL WORD1;WORD1是子程序的偏移地址子程序返回指令的格式:RET;可以是近返回,也可以是远返回RETN;近返回,也可以是远返回RETF;远返回2、子程序的返回datasegmentstr1db'Hello,World!$'dataendscodesegmentassumecs:code,ds:databegin:
8、movax,datamovds,ax3、子程序设计与调用示例leadx,str1calldisplaymovah,4chint21hdisplayprocmovah,9int21hretdisplayendpcodeendsendbegin四、寄存器的保护与恢复(P141)主程序和子程序通常是分别编写的,它们所使用的寄存器往往会发生冲突(寄存器等同全局变量)。如果在主程序调用子程序之前的某个寄存器内容在从子程序返回后还有用,而子程序也使用了这一个寄存器,这就有可能破坏该寄存器的原有内容。为避免寄
9、存器发生冲突,在一进入子程序后,就应该把子程序所需要使用的寄存器内容保存在堆栈中,此过程称作现场保护。在退出子程序前把寄存器内容恢复原状,此过程称作现场恢复。现场保护与现场恢复分别使用压栈和弹出指令实现。SUBTPROCPUSHAXPUSHBXPUSHCX……………<子程序体>……………POPCXPOPBXPOPAXRETSUBTENDP保护现场恢复现场1、保护现场与恢复现场示例一般说来,子程序中用到的寄存器是应该保护的。但是,如果使用寄存器在主程序和子程序之间传送参数的话,则这些寄存器就不一定
10、需要保护。特别是用来向主程序回送结果的寄存器,就更不能压栈。否则,恢复寄存器时就破坏了应该向主程序传送的返回信息。从80286开始可用PUSHA/POPA指令,从80386开始可用的PUSHAD/POPAD指令,它们为子程序中保存和恢复寄存器内容提供了有力的支持。(见P65~P66)2、哪些寄存器需要保护?五、子程序的参数传递(P135)主程序在调用子程序时,经常需要传送一些参数给子程序,子程序运行完后也经常要回送一些信息给主程序。主程序和子程序之间的参数传送有三种方式:1、通过寄存器递递参数2
11、、直接通过内存单元传递参数3、通过堆栈传递参数例1:从键盘输入一个大写英文字母,输出对应的小写字母。codesegmentassumecs:codestart:callinputcalluppercalloutputmovah,4chint21hinputprocmovah,1int21hretInputendpupperprocaddal,20hretupperendpoutputprocmovdl,almovah,2int21hretoutputendpcodeendsendstart1、通
此文档下载收益归作者所有