文档详情

第7章-运行时存储空间组织.ppt

发布:2017-06-15约1.32万字共73页下载文档
文本预览下载声明
Pascal过程调用规则 (1)任何子程序都不能调用主程序,主程序可直接调用所有第1层的子程序。 (2)任何子程序(包括主程序)可直接调用自己的直接内层子程序,但不能直接调用隔层的内层子程序。 (3)内层子程序可以直接调用自己及它的任何一层外层子程序(不包括主程序)。 (4)并列子程序中后说明的可以调用先说明的,而先说明的不能调用后说明的(除非采用向前引用的方式)。 (5)一个子程序可以调用所有与自己的某个外层子程序并列,且其说明先于这个外层子程序的子程序。 (6)Pascal语言允许子程序自己调用自己,这种调用方式称为递归调用 嵌套过程语言活动记录 作业 P269 4 5 diaplay表在活动记录中的相对地址d在编译时能完全确定。 假定在现行过程中引用了某层过程(令其层次为k)的X变量,那么,可用下面两条指令获得X的地址: LD R1 (d+k)[SP] LD R2 dx[R1] 参数个数 返回地址 形式单元 临时单元 内情向量 局部变量 SP? 0 1 2 老SP TOP? Display 表 全局Diaplay 3 d … program P; var a, x : integer; procedure Q(b: integer); var i: integer; procedure R(u: integer; var v: integer); var c, d: integer; begin if u=1 then R(u+1, v) ...... v:=(a+c)*(b-d); ...... end {R} begin ...... R(1,x); ...... end {Q} procedure S; var c, i:integer; begin a:=1; Q(c); ...... end {S} begin a:=0; S; ...... end. {P} 主程序P ?过程 S ?过程 Q ?过程 R ?过程 R 0 0 返回地址 1 0(display) 2 a 3 x 4 0 5 返回地址 6 2(全局display) 7 0(形参个数) 8 0 9 5 10 主程序?过程 S c 11 i 12 TOP? SP ? 动态链 display 0 0 返回地址 1 0(display) 2 a 3 x 4 0 5 返回地址 6 2(全局display) 7 0(形参个数) 8 0 9 5 10 主程序P?过程 S ?过程 Q c 11 i 12 动态链 5 13 返回地址 14 9(全局display) 15 1(形参个数) 16 b(形参) 17 0 18 13 19 i 20 TOP? SP ? 0 0 返回地址 1 0(display) 2 a 3 x 4 0 5 返回地址 6 2(全局display) 7 0(形参个数) 8 0 9 5 10 主程序P?过程 S ?过程 Q ?过程 R c 11 i 12 动态链 5 13 返回地址 14 9(全局display) 15 1(形参个数) 16 b(形参) 17 0 18 13 19 i 20 13 21 返回地址 22 18(全局display) 23 2(形参个数) 24 u(形参) 25 v(形参) 26 0 27 13 28 21 29 c 30 d 31 TOP? SP ? 0 0 返回地址 1 0(display) 2 a 3 x 4 0 5 返回地址 6 2(全局display) 7 0(形参个数) 8 0 9 5 10 主程序P ?过程 S ?过程 Q ?过程 R ?过程 R c 11 i 12 动态链 5 13 返回地址 14 9(全局display) 15 1(形参个数) 16 b(形参) 17 0 18 13 19 i 20 13 21 返回地址 22 18(全局display) 23 2(形参个数) 24 u(形参) 25 v(形参) 26 0 27 13 28 21 29 c 30 d 31 TOP? SP ? 21 32 返回地址 33 27(全局display) 34 2(形参个数) 35 u(形参) 36 v(形参) 37 0 38 13 39 32 40 c 41 d 42 参数个数 返回地址 形式单元 临时单元 内情向量 局部变量 老SP Display 表 全局Diaplay 1. 每个par Ti(i=1,2,…n)可直接翻译成如下指令: (i+4)[TOP]:= Ti (传值) (i+4)[TOP]:=addr(Ti ) (传地址) 过程调用、过程进入、过程返回 TOP? SP ? 调用过程的 活动记录 ……
显示全部
相似文档