汇编语言过程调用与c语言函数调用的异同

汇编语言过程调用与c语言函数调用的异同

ID:12615740

大小:82.50 KB

页数:10页

时间:2018-07-18

汇编语言过程调用与c语言函数调用的异同_第1页
汇编语言过程调用与c语言函数调用的异同_第2页
汇编语言过程调用与c语言函数调用的异同_第3页
汇编语言过程调用与c语言函数调用的异同_第4页
汇编语言过程调用与c语言函数调用的异同_第5页
资源描述:

《汇编语言过程调用与c语言函数调用的异同》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、汇编语言过程调用与C语言函数调用的异同学号:姓名:内容摘要:本文主要对基于Intel80X86CPU系列的32位高级汇编语言过程调用与基于C99标准的C语言函数调用进行比较。在程序设计中,有类程序不能独立运行它们需要被另一个程序调用后才能运行,汇编语言称这类程序为过程,对该类程序调用即称为过程调用。与之相对应在高级语言C语言中对程序进行模块化设计而形成用函数完成特定的功能的程序设计。汇编过程调用以堆栈结构为核心包括定义、调用机制应用、变量访问等关键行为。在C语言中则包括定义、参数定义、数据传递等。关键词:函数、过程、数据传递、堆栈一、过程定义与函数定义的异同相同点:1.都遵循先

2、定义后使用的规则,并且要指定过程的名字和函数的名字以便以后按名调用。2.一般来说汇编语言的过程调用和C函数调用(该函数不是Void类型)在过程和函数中至少有一个返回指令。3.过程名和函数名的取名都按标识符取名规则取名。4.都可定义有参过程或函数,过程或函数体包括声明部分和语句部分。5.汇编语言可以定义空过程,C函数可以定义空函数。不同点:1.(1)汇编过程定义过程名PROC[NEAR/FAR]…………………………………………………………..过程名ENDP(2)C函数定义类型名函数名(形式参数列表){函数体}2.过程定义是要用到@noframe,该单词让程序员在过程里建立用普通指

3、令访问堆栈的指针EBP,为自动局部变量分配堆栈空间、过程结束时撤销用普通指令访问堆栈的指针、回收自动变量和形参占用的堆栈空间,用正确的RET指令返回调用程序。而函数调用不会用到该单词赵建州《32位汇编语言程序设计》第227页、广西师范大学计算机科学与信息工程学院2008.12。3.形参定义格式不同:汇编语言过程中形参的定义过程名(形参表)[var]形参名:类型标识符C语言函数类型名函数名(类型:变量名,…….)一、过程调用与函数调用的形式的异同相同点:1.最终都是通过调用栈来实现过程和函数的调用。2.两者都可以进行嵌套调用和递归调用。不同点:1.格式不同:汇编调用过程指令格式C

4、all过程名C函数调用语句把函数调用单独作为一个语句。例如:printf_star();2.在调用有参数过程时,调用程序在call指令之前必须将实参值或实参的地址压入堆栈。.调用一、过程调用与函数调用的数据传递的异同相同点:1.都包括值传递和引用传递的形式2.形参都可以从实参得到一个值。3.主函数可以调用其他的函数,但其他的函数不能调用主函数。在主函数前用函数不需要申明,在主函数后用需要申明。不同点:1.汇编过程调用时可以直接利用CPU的通用寄存器资源,在过程调用前的机器状态和过程返回后的机器状态一致,所以要保护寄存器。2.汇编过程执行时要先把原来的基地址寄存器ebp值入栈,因

5、为在程序执行中ebp要另作他用,可以由此寻址获得函数参数。3.C语言函数调用与之相比具有一下区别:C语言中函数访问参数的方法就是先通过"PUSHBP"保存BP,"MOVBP,SP"把当前的堆栈指针传递给BP.第一个参数的地址就在BP+4,第二个参数的地址就在BP+6,...比如"MOVAX,WORDPTR[BP+4]"就可以把第一个参数值传给AX寄存器.而需要留意的是C传递参数的顺序是和其它语言相反的.C语言是把参数的地址从右到左压入堆栈,所以越后面的参数,在堆栈中的地址越靠前.曹加恒等《新一代汇编语言程序设计》第170页、高等教育出版社北京2003年2月四、过程调用与函数调用

6、的步骤的异同1、在定义过程和函数中指定的形参在未出现调用时它们并不占用存储单元,在发生调用时它们的形参被临时分配存储单元。在汇编语言中调用一个过程发生在寄存器中,主过程需要和子过程建立传递结构。调用程序首先把实参值或实参的地址压入堆栈,执行CALL指令把返回地址压入堆栈。调用程序构建传递结构的使命结束,接着将ESP的值复制给EBP,从此EBP代表传递结构的基址然后为局部变量分配内存空间,最后保护机器状态。此后还需要清除传递结构。在C语言中则主要是在内存中进行值传递和地址传递然后进行相关运算。2、在C语言中通过return语句将函数值带回主函数,在汇编中则通过执行RET指令在栈顶

7、确定返回的地址。3、调用结束后,C语言中形参单元被释放。在汇编过程中一般来说,退出一个程序有两种办法,一是利用中断,二是利用ret语句返回。用ret语句要先进行堆栈初始化方可。五、过程调用与函数调用返回值的异同相同点:汇编语言中的ret指令和C语言中的return();语句的功能都是使子程序在功能完成之后返回调用程序继续执行。不同点:在汇编语言中需要call和ret的配合使用,返回指令根据是段内返回还是段间返回把返回地址弹出栈送IP,或者弹出栈送IP与CS,并且如果RET带有操作数,将对栈指

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。