附录E过程调用语句的翻译和数据空间的安排剖析.ppt

附录E过程调用语句的翻译和数据空间的安排剖析.ppt

附录E过程调用语句的翻译和数据空间的安排剖析

附录E 过程调用语句的翻译和数据空间的安排 ——以C语言为例 C 的函数调用语句 CALL_S - id ( realParams ) ; 小结(一) 1、IA32的栈是用来存放临时数据。栈的增长方向是从高地址向低地址增长,按字节为单位编址。 2、EBP是栈基址的指针,永远指向栈底(高地址),ESP是栈指针,永远指向栈顶(低地址)。 3、CALL指令用来调用一个函数或过程,相当于以下两条指令: pushl %eip jmp _func 4、RET指令用来从一个函数或过程返回,与CALL相反。 5、ENTER是建立当前函数的栈框架,即相当于以下两条指令: pushl %ebp movl %esp,%ebp 6、LEAVE是释放当前函数或者过程的栈框架,与ENTER相反。 7、栈框架的建立由主调过程与被调过程合作完成,撤销则主要由被调完成,跟调用方式(_cdecl,_stdcall...)有关。 小结(二) 8、局部变量的分配,可以通过esp减去所需字节数 subl $8,%esp 局部变量的释放,通过leave指令完成; 局部变量的访问,可以通过ebp减去偏移量实现: movl -8(%ebp),%eax 9、对形式单元

文档评论(0)

1亿VIP精品文档

相关文档