- 1、本文档共73页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(m_1.0)第09章 运行时存储空间组织
第6章 符号表 DISPLAY 形式单元 m, n 2 连接数据 A 的TOP 。。。 B 的内情向量 z B1 的TOP 7.4.2 分程序的进入和退出 – 以 procedure 为例 数组 B 数组 C 到达标号 B1 处 进入分程序 B1 数组 B 分配之后 进入分程序 B2 进入分程序 B4 分配数组 C 之后 进入分程序 B5 e d B2 的 TOP C 的 内情向量 B4 的 TOP e B5 的TOP 第6章 符号表 7.4.3 过程调用,进入和返回 一个例子: 过程 Q 中的某一个分程序 B 里调用了过程 P B: Proc Q ( x1, x2, … , xn ) Begin Z, A ( 1: n ) Call P, m; … end 第6章 符号表 语句 Call P, m 的执行过程: B 的 TOP 送变址器 X : X := B.TOP 建立未来的 P 的连接数据和实现转子 : 2 [ X ] := SP 4 [ X ] := SP + d 5 [ X ] := X 6 [ X ] := m JSR P 进入 P 后立即执行: SP := X +1 0 [ SP ] := X + L (L 是过程 P 的活动纪录长度) 2 [ SP ] := 返回地址 第6章 符号表 P 出口的动作: X := 2 [ SP ] SP := 1 [ SP ] UJ 0 [ X ] DISPLAY 表 形参单元 变参个数 n 全局 D 表 返回地址 老 SP Q 的 TOP B.TOP z A 的内情向量 A 数组 X + lp Q.TOP 老的 SPQ 返回地址(到分程序) SPQ + d X ( 老 TOP) m 形参 d 建立 P 的 DISPLAY 表的方法: 根据 3 [ SP ] (即:4 [ X ]) 中所指的全局 D 表 ( Q 的 DISPLAY)从 Q 的 AR 中取出 D 表, 再加上过程 P 的层数 lP ,送到形参单元之上,形成本过程(P)的DISPLAY. 送 X 第6章 符号表 7.4.4 参数子程序 ALGOL 的换名形式参数对应的实参的处理方法:子程序,俗称 thunk 处理办法: 1,若实参是简单变量或者下标变量,thunk 直接计算该变量的地址; 2,若实参是一个其他表达式, thunk 的任务是计算此表达式的值并把它存放在某个确定的工作单元中,然后回送此单元的地址。 第6章 符号表 例子 过程 P 中的某个分程序 B 内通过语句 Q ( E ) 调用了过程 Q ,此处实参 E 是一个表达式。过程 Q 中的某一个分程序 B1 对 Q 的形式参数 Z 的引用意味着对 E 的 thunk 调用 Proc P B: Q ( E ) Proc Q ( Z ) B1: Z 第6章 符号表 注意: 1,B1 对 Q 的形式参数 Z 的引用意味着对 E 的 thunk 的调用,这个 thunk 必须工作在 P 的环境中; 2,如果参数表达式 E 中含有函数调用,会改写栈中 B.TOP 所指位置以上的部分,所以必须预先把 B 的 TOP 值暂时改称指向栈的最高位置(B1.TOP),以保护他们(实际上就是 Q 的数据区)不被破坏 。(具体解释见后面的图示) 第6章 符号表 4,JSR Z /* 间接转子,进入 thunk */ 1,2 [X] := 返回地址; 进入 thunk 后的执行 2,3 [X] := B.TOP ( thunk 所在的 B ); 3,B.TOP := X +3 ; /*指向现行栈顶的最高位置 */ 4,进行 thunk 的工作; 5,X := B.TOP - 3 ; 6,SP := 1 [X] ; /* 恢复 SP*/ 7,B.TOP := 3 [X] ; /* 恢复 B.TOP */ 8,X := 2 [X] ; 9,UJ 0 [X] ; /* 返回 Q */ 在栈顶 之上的 动作 具体的动作 (Z 中含有thunk 的入口地址) 1,X := B1.TOP; /* 现行栈顶地址送变址器 X */ 2,1 [X] := SP; /* 保护 SP */ 3,SP := 1 [SP] /* 把 SP 变成指向调用段 P 的活动纪录 */ 在栈顶之上的动作 栈的活动情况 B1.TOP SPP Q.TOP SP=SPQ SP=SPP
文档评论(0)