编译原理课件:8-第八章_存储空间组织-4节_第1页
编译原理课件:8-第八章_存储空间组织-4节_第2页
编译原理课件:8-第八章_存储空间组织-4节_第3页
编译原理课件:8-第八章_存储空间组织-4节_第4页
编译原理课件:8-第八章_存储空间组织-4节_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、8.4 简单的栈式存储分配简单的栈式存储分配 C语言语言过程的数据区过程的数据区数数 组组 区区活动记录活动记录 8.4.1 8.4.1 语言特性:语言特性: 过程允许递归调用过程允许递归调用;8.4.2 8.4.2 存储区结构:存储区结构: 例:例:全局数据说明全局数据说明Main()Main() main main中数据说明中数据说明 R R; Void R()Void R() R R中数据说明中数据说明 Q Q; Void Q()Void Q() Q Q中数据说明中数据说明 R R L L处处 过程调用顺序:过程调用顺序:mainRmainR1 1QRQR2 2存储空间:存储空间:TOP

2、 R2数组区数组区SP 活动记录活动记录Q数组区数组区活动记录活动记录R1数组区数组区活动记录活动记录main数组区数组区活动记录活动记录全局数据区全局数据区SPSP:现行过程活动记录的起点;:现行过程活动记录的起点;TOPTOP:已占用存储空间的栈顶单元;:已占用存储空间的栈顶单元;8.4.3 C 的活动记录的活动记录TOPTOP临时单元临时单元内情向量内情向量局部变量局部变量形式单元形式单元参数个数参数个数返回地址返回地址SPSP老老SPSP 动态链动态链连接数据连接数据参数参数TOPTOP临时单元临时单元内情向量内情向量局部变量局部变量形式单元形式单元参数个数参数个数返回地址返回地址SP

3、SP老老SPSPInt xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) ; 临时变量临时变量T1第第1维维长维维长d1M维数:维数:1M起始地址起始地址a局部变量:局部变量:b形参形参 :c参数个数:参数个数:1 1返回地址返回地址老老SPSP过程过程R R的的活动记录活动记录L=9L=98.4.4 8.4.4 主要处理工作主要处理工作1. C1. C语言过程调用语言过程调用 过程调用过程调用中间代码:中间代码:par T1 par TnCall P, n (n为参数个数为参数个数)+

4、4+4形式单元形式单元+3+3参数个数参数个数+2+2返回地址返回地址+1+1老老SPSPTOPQSPR1main全局数据区全局数据区对:对:Par Par Ti ( i i=1=1n ),n ),目标代码:目标代码: 传地址:传地址:(i+3)TOP:=Addr(i+3)TOP:=AddrTi 或或传值:传值:(i+3)TOP:=(i+3)TOP:=Ti对:对:Call P, nCall P, n 目标代码:目标代码: * * 1 1TOP:=SP (TOP:=SP (保护工作环境保护工作环境) ) * * 参数个数:参数个数:3TOP:= n3TOP:= n * * 转子:转子: JSR

5、PJSR PInt xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) L处处 调用顺序调用顺序 MainMain R R1 1 Q Q R R2 2调用过程调用过程R R的中间代码:的中间代码: par 1par 1 call R , 1 call R , 1 Int xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) L处处 104形参形参 c1103参数个数参数个数1102101

6、老老SPSP50 100TOPQ99SP 50R1mainX 10X 10 全局数据区全局数据区调用顺序调用顺序过程调用过程调用中间代码:中间代码: par 1par 1 call R , 1 call R , 1 对:对:Par Par Ti ( i i=1=1n )n )(i+3)TOP:=Addr(i+3)TOP:=AddrTi(或或Ti)Ti)对:对:Call P, nCall P, n* * 1 1TOP:=SPTOP:=SP* * 3TOP:=n ( 3TOP:=n (参数个数参数个数) )* * JSR P ( JSR P (转子转子) )MainMain R R1 1Q Q R

7、 R2 22.2.过程进入过程进入 过程定义的中间代码:过程定义的中间代码: proc 过程名过程名 过程体过程体 return (m) endproc过程进入过程进入新新TOP形式单元形式单元参数个数参数个数+1+1返回地址返回地址新新SP老老SP(QSP(Q的的SP)SP)TOPQSPR1main全局数据区全局数据区 建立新的工作环境(建立新的工作环境(SPSP,TOPTOP) 保护返回地址保护返回地址目标代码:目标代码: SP:=TOP+1 (SP:=TOP+1 (新新SP)SP) 1SP= 1SP=返回地址返回地址 TOP:=TOP+L (TOP:=TOP+L (新新TOP)TOP)L

8、 L:过程活动记录大小,静态确定:过程活动记录大小,静态确定 Int xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) TOP108107106105104形参形参 c1103参数个数参数个数1102返回地址返回地址101SP 老老SPSP50 100TOPQ99SP 50R1mainX X 1010全局数据区全局数据区调用顺序调用顺序过程进入过程进入MainMain R R1 1Q Q R R2 2SP:=TOP+1SP:=TOP+11SP=1SP=返回地址返回地址 TOP:=TOP+

9、L TOP:=TOP+L 3.3.数组分配空间数组分配空间 将将TOP+1TOP+1填入数组内情向量的填入数组内情向量的a a处处( (起始地址起始地址) ); 数组大小数组大小=M=M, TOP:=TOP+MTOP:=TOP+MVoid R(int c) int b , M3; b=5; Mc=x+2; if Mc5 Q; TOP M2111 M1110 数组区数组区M0109 TOP 临时变量临时变量T1108第第1维维长维维长d13107M维数维数1106M起始地址起始地址a 109 105b5104形参形参 c1103参数个数参数个数1102返回地址返回地址101SP老老SPSP50

10、100R R2 2数数据据区区R R2 2活活动动记记录录内情内情向量向量4. 4. 引用各种数据的方式引用各种数据的方式 参数、局部量、临时单元、内情向量:参数、局部量、临时单元、内情向量: 设相对数设相对数= t ,以,以SPSP为变址器访问:为变址器访问:tSPtSP 数组元素数组元素 * * 从内情向量查出从内情向量查出a a,维长等,计算出相对数,维长等,计算出相对数t t ; * * 变址访问变址访问 tata 全局量:从全局数据区取;全局量:从全局数据区取;TOP M2111+10M112 110+9M0109+8临时变量临时变量T112 108+7第第1维维长维维长d13107

11、+6M维数维数1106+5M起始地址起始地址a109 105+4b5104+3+3形参形参 c1103+2+2参数个数参数个数1102+1+1返回地址返回地址101SP 老老SPSP50 100Q9950R1mainX 10X 10Void R(int c) int b, M3; b=5; Mc=x+2; if Mc5 Q; 对名字的访问:对名字的访问:. 局部名:局部名: b = 4SP. 参数:参数: c = 3SP. 临时变量:临时变量:T1 = 8SP. 内情向量中,内情向量中, 数组起始地址数组起始地址a = 5SP对名字的访问:对名字的访问:. 数组元素数组元素M1: * 取出内情

12、向量中,数组起始取出内情向量中,数组起始 地址地址a; 即:即: 5SP=109; * 计算出计算出M1的相对数的相对数=1; * M1: = 1109 . 全局量全局量x: = 0全局全局SPTOP M2111+10M112 110+9M0109+8临时变量临时变量T112 108+7第第1维维长维维长d13107+6M维数维数1106+5M起始地址起始地址a 109 105+4b5104+3+3形参形参 c1103+2+2参数个数参数个数1102+1+1返回地址返回地址101SP 老老SPSP50 100Q9950R1mainX 10X 10Void R(int c) int b, M3; b=5; Mc=x+2; if Mc5 Q; 5.5.过程返回过程返回 TOP形式单元形式单元参数个数参数个数返回地址返回地址SP老老SP(QSP(Q的的SP)SP)TOPQSPR1main全局数据区全局数据区过程定义的中间代码:过程定义的中间代码: proc 过程名过程名 过程体过程体 return (m) e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论