汇编语言第6章:子程序设计ppt课件_第1页
汇编语言第6章:子程序设计ppt课件_第2页
汇编语言第6章:子程序设计ppt课件_第3页
汇编语言第6章:子程序设计ppt课件_第4页
汇编语言第6章:子程序设计ppt课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,第六章:子程序设计,6.1子程序的设计方法6.2子程序的嵌套6.3子程序举例,.,6.1子程序的设计方法,子程序:具有特定功能的,且可以多次反复调用的程序段,优点:节省存储空间;提高程序设计的效率和质量;使程序简洁、清晰、易读,便于维护,适用场合:出于程序模块化的考虑;某段程序在程序中多次出现,.,6.1子程序的设计方法,子程序的一般结构:,保护现场,子程序功能,恢复现场,返回主程序,子程序的入口地址:,现场:主程序中的一些中间运算结果,可能在子程序中被破坏,所以在子程序一开始要把它们保护起来,在子程序结束时,再将其还原,.,6.1.1过程定义伪操作,功能:定义了一个以PROC伪指令开始,以ENDP伪指令结束,以过程名命名的一个过程(或子程序段),语句格式:,procedure_namePROCNEAR,procedure_nameENDP,或procedure_namePROCFAR,RET,可以不写,缺省时默认为NEAR,子程序功能,.,6.1.1过程定义伪操作,说明:过程名为标识符,是子程序的入口的符号地址,可被CALL指令调用过程名的类型由PROC后的属性确定:NEAR-定义该过程为段内调用和返回FAR-定义该过程为段间调用和返回ENDP语句前的过程名与PROC前一致PROC与ENDP要成对出现在子程序段中至少有一条“RET”语句,以便返回主程序过程在程序段中定义,放在程序段的首部或尾部,.,6.1.1过程定义伪操作,CODESEGMENTsubrPROCsubrENDPCODEENDS,主程序段,过程定义,CODESEGMENTASSUMEsubrPROCsubrENDPCODEENDS,主程序段,过程定义,放在段尾,放在段首,例6.1,例6.2,.,CALL调用RET返回,6.1.2子程序的调用与返回,注:正确使用堆栈使得执行RET指令前SP能正确指向进入子程序时的返回地址,.,6.1.3保存与恢复寄存器,一般子程序中用到的寄存器应该在一进入子程序后就保存起来,在退出子程序前把寄存器内容恢复原状例:注:用来作为传递参数的寄存器除外,.,6.1.4子程序的参数传送,参数传送:或称为变量传送或过程通信,即调用程序和子程序之间的信息传送,入口参数:调用程序传递给子程序的,需要其加工处理的原始数据出口参数:子程序提供给调用程序的处理结果,.,6.1.4子程序的参数传送,参数传送方法:1.通过寄存器传送参数:就是子程序的入口参数和出口参数都是存放在约定的寄存器中例6.3:优点:使用方便、传递较快、节省内存缺点:参数很多时不能使用,.,decibinprocnearmovbx,0newchar:movah,1int21hsubal,30hjlexitcmpal,9djgexitcbw,cbwxchgax,bxmovcx,10dmulcxxchgax,bxaddbx,axjmpnewcharexit:retdecibinendp,.,6.1.4子程序的参数传送,参数传送方法:2.如过程和调用程序在同一源文件(同一程序模块)中,则过程可直接访问模块中的变量例6.4:优点:使用方便缺点:不易多次调用,.,6.1.4子程序的参数传送,参数传送方法:3.通过地址表传送参数地址:就是子程序的入口参数和出口参数都是存放在约定的内存单元中例6.4的改进:优点:编程方便、可以多次调用缺点:要建立一个地址表,.,6.1.4子程序的参数传送,参数传送方法:4.通过堆栈传送参数或参数地址:就是子程序的入口参数和出口参数都是通过堆栈来传送的例6.4的改进:,优点:不占用寄存器,不需定义单元,可以多次调用缺点:要使用堆栈,.,6.1.4子程序的参数传送,参数传送方法:5.多个模块之间的参数传递问题(1)外部符号局部符号:在本模块中定义,且在本模块中使用的符号外部符号:在本模块中定义,在其它模块中使用的符号,.,6.1.4子程序的参数传送,5.多个模块之间的参数传递问题1)PUBLIC伪操作格式:PUBLICsymbol,符号:包括变量、标号、过程名等等功能:在一个模块中定义的符号在提供给其它模块使用时,必须使用此伪操作将之定义成外部符号,.,6.1.4子程序的参数传送,5.多个模块之间的参数传递问题2)EXTRN伪操作格式:EXTRNsymbolname:type,符号:包括变量、标号、过程名等等功能:在另一个模块中定义且要在本模块中使用的符号必须用此伪操作说明例6.5,注:必须先有PUBLIC说明,后有EXTRN说明才能使用外部符号;不同模块中的局部符号可以重名,但外部符号不行,.,6.1.4子程序的参数传送,5.多个模块之间的参数传递问题(2)多个模块之间的参数传送方法:前面方法的综合应用例6.4的变形,.,6.2子程序的嵌套,子程序的嵌套:子程序中再调用一个子程序嵌套深度:嵌套的层数图6.5递归调用:子程序调用自身,.,6.3子程序举例,例6.9hexibinprocnearmovbx,0newchar:movah,key_inintdoscallsubal,30hjlexit;(al)9and(al)fadd_to:movcl,4shlbx,clmovah,0addbx,axjmpnewcharexit:rethexibinendp,.,subal,0jlexitcmpal,9jgafsubal,30hjmpadd_toaf:cmpal,ajlexitcmpal,fjgexitsubal,57hadd_to:,.,binidecprocnearmovcx,10000dcalldec_divmovcx,1000dcalldec_divmovcx,100dcalldec_divmovcx,10dcalldec_divmovcx,1dcalldec_divretbinidecendp,dec_divproc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论