欢迎来到天天文库
浏览记录
ID:56381717
大小:268.50 KB
页数:74页
时间:2020-06-14
《清华大学编译原理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第十章目标程序运行时的存储组织10.1概述(略)10.2数据表示(略)10.3目标程序运行时的栈式存储组织10.4参数传递10.5堆式存储组织的讨论(略)1数据空间的使用方法存储分配策略:静态存储分配栈式动态存储分配堆式动态存储分配栈式存储分配方案基本思想:运行时每当进入一个过程,就在栈顶为该过程分配所需的数据空间,当一个过程工作完毕之后,它在栈顶的数据空间也将被释放。2术语-过程活动记录:AR(ActivationRecord)为说明方便,假定程序是由过程组成,过程区分为源文本,运行时称作过程的激活。一个过程的一次执行所需要的信息使用一个连续的存储区来管
2、理,这个区(块)叫做一个活动记录或frame桢一般这个段要记录:临时值,如计算表达式时的中间工作单元。局部变量(数据)保存运行过程前的状态(程序计数器,寄存器值……)存取链(可选)对于非局部量的引用。控制链(可选)指向调用者的活动记录,释放栈。实参(形式单元)返回值(对函数)(有时可使用寄存器存放返回值)返回地址,保存该被调过程返回后的地址3简单的栈式分配方案语言结构特点:过程可递归调用,可含可变数据结构,但不允许嵌套定义,没有分程序结构。例:main全局变量的说明procR……endR;procQ……endQ;主程序执行语句endmain456嵌套过程语言
3、的栈式分配方案1、主要特点:(语言)一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)。(实现)一个过程可以引用它的任一外层过程的最新活动记录中的某些数据。72、关键技术:解决对非局部变量的引用(存取)也就是说,设法跟踪每个外层过程的最新活动记录AR的位置。3、跟踪办法:1.用静态链(如PL/0的SL)。2.用DISPLAY表。8consta=10;varb,c;procedurep;beginc:=b+a;end;beginread(b);whileb#0dobegincallp;write(2*c);read
4、(b);endend.(0)jmp08转向主程序入口(1)jmp02转向过程p入口(2)int03过程p入口,为过程p开辟空间(3)lod13取变量b的值到栈顶(4)lit010取常数10到栈顶(5)opr02次栈顶与栈顶相加(6)sto14栈顶值送变量c中(7)opr00退栈并返回调用点(16)(8)int05主程序入口开辟5个栈空间(9)opr016从命令行读入值置于栈顶(10)sto03将栈顶值存入变量b中(11)lod03将变量b的值取至栈顶(12)lit00将常数值0进栈(13)opr09次栈顶与栈顶是否不等(14)jpc024等时转(24)(
5、条件不满足转)(15)cal02调用过程p(16)lit02常数值2进栈(17)lod04将变量c的值取至栈顶(18)opr04次栈顶与栈顶相乘(2*c)(19)opr014栈顶值输出至屏幕(20)opr015换行(21)opr016从命令行读取值到栈顶(22)sto03栈顶值送变量b中(23)jmp011无条件转到循环入口(11)(24)opr00结束退栈9目标代码解释执行时数据栈的布局(运行栈的存储分配)每个过程的AR有3个联系单元:SL:静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址。DL:动态链,指向调用该过程前正在运行过程的
6、数据段基地址。RA:返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地址。局部变量中间结果10目标代码的解释执行运行栈M调用过程PSRADLSLb..ttbPM11解决对非局部变量的引用(存取)用Display表Display表——嵌套层次显示表当前激活过程的层次为K,它的Display表含有K+1个单元,依次存放着现行层,直接外层…直至最外层的每一过程的最新活动记录的基地址1213用Display表的方案(1)主程序--->(2)P--->(3)Q--->(4)R主程序的活动记录d[0]spdisplaytop(1)P的活动记录主程
7、序的活动记录d[1]d[0]displaysptop(2)14用Display表的方案主程序--->(2)P--->(3)Q--->(4)RR的活动记录Q的活动记录P的活动记录主程序的活动记录d[1]d[0]displaytopsp(3)(4)Q的活动记录P的活动记录主程序的活动记录displayd[2]d[1]d[0]sptop15DISPLAY表的维护和建立DISPLAY表d运行栈0主程活动记录地址1R活动记录地址...16当过程的层次为n,它的display为n+1个值。一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上本层
8、的SP值。全局DISPLAY地址17分程序结构Pro
此文档下载收益归作者所有