网站大量收购独家精品文档,联系QQ:2885784924

汇编语言过程调用与C语言函数调用的异同.docVIP

汇编语言过程调用与C语言函数调用的异同.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
汇编语言过程调用与C语言函数调用的异同.doc

汇编语言过程调用与C语言函数调用的异同 学号: 姓名: 内容摘要:本文主要对基于Intel 80X86CPU 系列的32位高级汇编语言过程调用与基于C99标准的C语言函数调用进行比较。在程序设计中,有类程序不能独立运行它们需要被另一个程序调用后才能运行,汇编语言称这类程序为过程,对该类程序调用即称为过程调用。与之相对应在高级语言C语言中对程序进行模块化设计而形成用函数完成特定的功能的程序设计。汇编过程调用以堆栈结构为核心包括定义、调用机制应用、变量访问等关键行为。在C语言中则包括定义、参数定义、数据传递等。 关键词:函数、过程、数据传递、堆栈 过程定义与函数定义的异同 相同点: 都遵循先定义后使用的规则,并且要指定过程的名字和函数的名字以便以后按名调用。 一般来说汇编语言的过程调用和C函数调用(该函数不是Void类型)在过程和函数中至少有一个返回指令。 过程名和函数名的取名都按标识符取名规则取名。 都可定义有参过程或函数,过程或函数体包括声明部分和语句部分。 汇编语言可以定义空过程,C函数可以定义空函数。 不同点: (1)汇编过程定义 过程名 PROC [NEAR/FAR] ………………………………………………………….. 过程名 ENDP (2)C函数定义 类型名 函数名(形式参数列表) { 函数体 } 2.过程定义是要用到@noframe,该单词让程序员在过程里建立用普通指令访问堆栈的指针EBP,为自动局部变量分配堆栈空间、过程结束时撤销用普通指令访问堆栈的指针、回收自动变量和形参占用的堆栈空间,用正确的RET指令返回调用程序。而函数调用不会用到该单词。 3.形参定义格式不同: 汇编语言过程中形参的定义 过程名(形参表) [var]形参名:类型标识符 C语言函数 类型名 函数名(类型:变量名,…….) 过程调用与函数调用的形式的异同 相同点: 1.最终都是通过调用栈来实现过程和函数的调用。 2.两者都可以进行嵌套调用和递归调用。 不同点: 1.格式不同: 汇编调用过程指令格式 Call 过程名 C函数调用语句 把函数调用单独作为一个语句。例如:printf_star(); 2.在调用有参数过程时,调用程序在call 指令之前必须将实参值或实参的地址压入堆栈。 .调用 过程调用与函数调用的数据传递的异同 相同点: 都包括值传递和引用传递的形式 形参都可以从实参得到一个值。 主函数可以调用其他的函数,但其他的函数不能调用主函数。在主函数前用函数不需要申明,在主函数后用需要申明。 1.汇编过程调用时可以直接利用CPU的通用寄存器资源,在过程调用前的机器状态和过程返回后的机器状态一致,所以要保护寄存器。 2.汇编过程执行时要先把原来的基地址寄存器ebp值入栈,因为在程序执行中ebp要另作他用,可以由此寻址获得函数参数。 3. C语言函数调用与之相比具有一下区别:C语言中函数访问参数的方法就是先通过PUSH BP保存BP,MOV BP,SP把当前的堆栈指针传递给BP.第一个参数的地址就在BP+4,第二个参数的地址就在BP+6,...比如MOV AX,WORD PTR[BP+4]就可以把第一个参数值传给AX 寄存器.而需要留意的是C传递参数的顺序是和其它语言相反的.C语言是把参数的地址从右到左压入堆栈,所以越后面的参数,在堆栈中的地址越靠前. 四、过程调用与函数调用的步骤的异同 1、在定义过程和函数中指定的形参在未出现调用时它们并不占用存储单元,在发生调用时它们的形参被临时分配存储单元。在汇编语言中调用一个过程发生在寄存器中,主过程需要和子过程建立传递结构。调用程序首先把实参值或实参的地址压入堆栈,执行CALL指令把返回地址压入堆栈。调用程序构建传递结构的使命结束,接着将ESP的值复制给EBP,从此EBP代表传递结构的基址然后为局部变量分配内存空间,最后保护机器状态。此后还需要清除传递结构。 在C语言中则主要是在内存中进行值传递和地址传递然后进行相关运算。 2、在C语言中通过return语句将函数值带回主函数,在汇编中则通过执行RET指令在栈顶确定返回的地址。 3、调用结束后,C语言中形参单元被释放。在汇编过程中一般来说,退出一个程序有两种办法,一是利用中断,二是利用 ret 语句返回。用 ret 语句要先进行堆栈初始化方可。 相同点: 汇编语言中的ret指令和C语言中的return();语句的功能都是使子程序在功能

文档评论(0)

zhangningclb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档