8.2 函数调用过程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt
《8.2 函数调用过程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt》由会员分享,可在线阅读,更多相关《8.2 函数调用过程电子课件 计算机系统基础:C语言视角(RISC-V版).ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、8.2 函数调用过程电子课件 计算机系统基础:C语言视角(RISC-V版)函数函数调用过程调用过程调用调用/返回机制返回机制C C语言中的函数和汇编语言中的子例程相当语言中的函数和汇编语言中的子例程相当调用调用/返回机制相同返回机制相同调用的调用的3 3个步骤:个步骤:(1 1)调用者的变元)调用者的变元/实际参数实际参数/实参(实参(argumentargument)传给被调用者的形式参数传给被调用者的形式参数/形参(形参(parameterparameter),并),并且控制被传给被调用者;且控制被传给被调用者;(2 2)被调用者执行它的任务;)被调用者执行它的任务;(3 3)返回值被传回
2、给调用者,并且控制权返回调)返回值被传回给调用者,并且控制权返回调用者。用者。调用机制调用机制函数必须与调用者无关函数必须与调用者无关一个函数应该能够被一个函数应该能够被任何任何一个函数调用一个函数调用是否允许递归是否允许递归是否允许函数调用它本身是否允许函数调用它本身?问题:问题:为每为每个个函数分配一个栈帧?还是为每一函数分配一个栈帧?还是为每一次次函数调用分配一个栈帧?函数调用分配一个栈帧?C C语言允许递归语言允许递归为每一次函数调用,分配一个栈帧为每一次函数调用,分配一个栈帧存储局部数值存储局部数值当函数返回时,它的栈帧将被回收当函数返回时,它的栈帧将被回收运行时栈运行时栈在内存中为
3、每一次函数调用分配空间时,采用在内存中为每一次函数调用分配空间时,采用了栈机制了栈机制“栈帧栈帧”内存中能够用于栈帧分配的空间,就是内存中能够用于栈帧分配的空间,就是“运行运行时栈时栈”示例示例:计算计算S Sn n1#include 2 3 int Sn(int n);4 5 int main()6 7 int in=3;8 int sum;910 sum=Sn(in);11printf(Sn of%d is%dn,in,sum);12 1314 int Sn(int n)14 int Sn(int n)15 15 1616int result;int result;17171818if(n
4、=1)if(n=1)1919return 1;return 1;2020else else 2121 2222result=Sn(n-1)+n;result=Sn(n-1)+n;2323return result;return result;2424 25 25 n=3n=3S(3)S(3)=3+S(2)=3+S(2)=3+(2+S(1)=3+(2+S(1)=3=3+(2(2+1)1)=3=3+3+3=6 6递归递归调用机制调用机制在机器层在机器层实参实参被传递被传递给形参给形参栈帧栈帧被压入被压入/弹出弹出控制从一个函数转移到另一个控制从一个函数转移到另一个由调用函数,被调用函数完成由调用函
5、数,被调用函数完成函数函数调用步骤调用步骤第一,调用函数第一,调用函数形参寄存器形参寄存器x10 x17x10 x17(a0a7a0a7)实参实参如果需要(参数如果需要(参数 8 8个),个),实参实参运行时栈运行时栈第二,被调用函数第二,被调用函数完成栈帧的分配完成栈帧的分配保存寄存器保存寄存器运行时栈运行时栈如果需要(如数组、结构体等),如果需要(如数组、结构体等),局部变量局部变量运行时栈运行时栈第三,被调用函数第三,被调用函数执行任务执行任务第四,被调用函数第四,被调用函数当当完成工作时,完成工作时,栈帧栈帧弹出弹出,控制返回到调用函数,控制返回到调用函数最后,最后,调用函数调用函数取
6、回取回被调用函数的被调用函数的返回值返回值第一步第一步 函数调用函数调用mvmva0,s1a0,s1#实参实参-形参形参jaljalra,Snra,Sn1#include 2 3 int Sn(int n);4 5 int main()6 7 int in=3;8 int sum;910 sum=Sn(in);11printf(Sn of%d is%dn,in,sum);12 13寄存器的分配寄存器的分配main函数函数inx9/s1sum x18/s2Sn函数函数形参形参nx10/a0第二步第二步 开始被调用函数开始被调用函数首先,计算首先,计算SnSn栈帧的大小栈帧的大小要保存哪些寄存器要
7、保存哪些寄存器x1/rax1/ra:调用者的:调用者的返回地址返回地址 caller-savex8/fpx8/fp:调用者的:调用者的帧指针帧指针 callee-savex9/s1x9/s1:为:为局部变量局部变量分配的寄存器分配的寄存器 callee-savex10/a0 x10/a0:参数参数/返回值寄存器返回值寄存器 caller-save有哪些局部变量要分配到栈中等有哪些局部变量要分配到栈中等调整调整spsp指向栈帧的顶部指向栈帧的顶部然后,保存寄存器到栈帧,调整然后,保存寄存器到栈帧,调整fpfpSnSnSn:addisp,sp,-16#为为Sn函数分配栈帧函数分配栈帧swra,12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8.2 函数调用过程电子课件 计算机系统基础:C语言视角RISC-V版 函数 调用 过程 电子 课件 计算机系统 基础 语言 视角 RISC
限制150内