- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理---第8章运行环境
8.4 过程调用 过程(procedure) 子程序(subroutine)、函数(function) 过程的定义与调用 形参和实参的结合:参数计算与传递 调用与返回 * 工作方式 调用方:当前环境的保存与恢复 被调方:构造环境,参数绑定 * Main( ) { Sub1( 10 ) } Sub1( x ) { Sub2( x + 1 ) } Sub2( y ) { Sub3( ) } 过程调用实现 简单过程调用 实在参数的计算和保存 控制转移、返回地址的保存 实在参数和形式参数的结合(多种结合方式) 局部变量的处理 返回值的处理 递归过程调用与过程参数 每层过程调用信息的保存与相应信息的查找 * 活动记录中过程所用信息 用于表达式的计算 局部数据 寄存器、程序计数器(返回地址) 保存实在参数的值或地址 存放返回值 保存调用者活动记录地址等(SP) 用于存取嵌套外层过程中的非局部名(Display) * 访问链 控制链 返回值 实在参数 机器状态 局部变量 临时变量 数组存储区 本 过 程 …… 所 辖 分 第 临时工作单元 程 一 序 层 局部数组说明 存 分 储 程 局部变量 区 序 分程序TOP 本过程Display 形式单元(m+1个) 连 主调分程序TOP 接 全局Display地址 数 返回地址 据 主调过程SP 本过程TOP 例子——函数的活动记录 int sub( i, p ) int i; char *p; { char buf[32]; buf[i] = *(p + i); return i + 1; } * 临时变量: t1,t2,t3 局部变量:buf[32] 机器状态:R0, …, R9, SP, PC, PS 参数:i, p 返回值 控制链 Display 过程说明语句的翻译 分析参数的类型、分配地址 统计参数和返回值的空间需求 与调用语句配合完成形/实参数的结合 符号表处理 完成过程名的属性登记 * 说明语句: Procedure id(X1,X2,…,Xn) * 过程说明语句代码结构 说明语句: Procedure id(X1,X2,…,Xn) 代码结构 X1.code 按参数传递要求实现参数X1的传递,或者完成传递准备; X2.code 按参数传递要求实现参数X2的传递,或者完成传递准备; …… Xn.code 按参数传递要求实现参数Xn的传递,或者完成传递准备; 完成动态存储分配相关的工作; 进入过程体 * 过程调用语句的代码结构 过程调用语句id(E1,E2, … ,En) E1.code a1:=E1.place … En.code an:=En.place 动态存储分配相关工作 goto pc+n+1 param a1 … param an call id.place,n 需要一个队列存放a1, a2, …, an,以生成 过程调用的实现 1. 在过程 f 中调用过程 p 时 a. 对实在参数求值,将结果存入 p 的活动记录参数域 b. 在 p 的活动记录中存放返回地址和当前栈顶指针 c. 按照活动记录的大小,上移栈顶指针 d. 控制转到 p 的入口(过程体) * 临时变量 局部变量 机器状态 参数 返回值 控制链 Display 过程调用的实现 2. 进入过程p并执行P a. 初值寄存器值和其它状态信息 b. 执行过程体 3. 从过程 p 返回(对应return语句) a. p 在返回值域中保存返回值 b. 恢复原栈顶指针和其它寄存器 c. 按返回地址返回调用者 * 临时变量 局部变量 机器状态 参数 返回值 控制链 Display 国家精品课程 国家精品课程 * 第8章 运行环境 (Run-Time Enviroments) * 主要内容 绑定(Binding) 存储(Storage)组织(Organization)与分配(Allocation) 参数(Parameter)传递(Passing) 过程说明与调用 符号表(Symbol Table)管理 * 8.1 绑定(Binding) Binding的概念 将符号名和相应目标数据(的地址)对应起来 标识符与数据目标的对应 变量名──数据存储单元地址 过程名、函数名──程序段入口地址 相关问题 变量和过程的作用域,决定绑定的有效期 * * 分段式程序 Program layer Int a,b,c Begin …… Sub(a+b,b,a) …… End Subroutine sub(x,y,z) Real a,b,c Begin …… End 嵌套式程序 Program layer Int a,b,c
您可能关注的文档
最近下载
- 2023年上海第二工业大学网络工程专业《计算机组成原理》科目期末试卷B(有答案).docx VIP
- 2023年上海第二工业大学计算机应用技术专业《计算机组成原理》科目期末试卷B(有答案).docx VIP
- ODCC 阿里巴巴 浸没液冷数中心规范.pdf VIP
- 青少年无人机课程:开启天空探索之旅.pptx VIP
- 一种偏振光红外头痛治疗仪.pdf VIP
- 医疗技术人员能力评价表(内科).docx VIP
- 物性表_索尔维_PPSU Radel R-5500.pdf VIP
- 23、提高模板工程安装一次验收合格率.docx VIP
- 华东理工大学-食品科学与工程 实验二抗氧化剂实验方案苹果汁.docx VIP
- 《中文版Cinema 4D三维建模与视觉设计案例教程[R25]》项目1Cinema 4D基础知识 .pptx VIP
文档评论(0)