TOP R的数组区 SP R的活动记录 Q的活动记录 主程序全局 数据区
TOP R 的数组区 SP R 的活动记录 Q 的活动记录 主程序全局 数据区
嵌套过程语言的栈式 分配方案 ●主要特点: (语言)一个过程可以引用包围它的任 外层过程所定义的标识符(如变量, 数组或过程等)。 (实现)一个过程执行时可以引用它的 任一外层过程的最新活动记录中的某些 数据
嵌套过程语言的栈式 分配方案 l主要特点: • (语言)一个过程可以引用包围它的任 一外层过程所定义的标识符(如变量, 数组或过程等)。 • (实现)一个过程执行时可以引用它的 任一外层过程的最新活动记录中的某些 数据
关键技术:解决对非局部量的引用(存 取) 设法跟踪每个外层过程的最新活动记录 AR的位置 跟踪办法: 1.用静态链(如PL/0的SL) 2.用嵌套层次显示表 DISPLAY
• 关键技术:解决对非局部量的引用(存 取)。 • 设法跟踪每个外层过程的最新活动记录 AR的位置。 • 跟踪办法: 1. 用静态链(如PL/0的SL)。 2. 用嵌套层次显示表DISPLAY
0)jp08转向主程序入口 1)jp02转向过程p入口 (2)int03过程p入口,为过程p开辟空间 const a=10 3)10d13取变量b的值到栈顶 var bc 4)1it010取常数10到栈顶 procedure p 5)opr02次栈顶与栈顶相加 6)sto14栈顶值送变量c中 begin 7)opr00退栈并返回调用点(16 c:=b+a 8)int05主程序入口开辟5个栈空间 end (9)opr016从命令行读入值置于栈顶 (10)sto03将栈顶值存入变量b中 begin (11)1od03将变量b的值取至栈顶 read(b) (12)1it00将常数值0进栈 (13)opr09次栈顶与栈顶是否不等 while bto do (14)jipc024等时转(24)(条件不满足转) b egin (15)ca102调用过程p call (16)1it02常数值2进栈 (17)1od04将变量c的值取至栈顶 write (2*c) (18)opr04次栈顶与栈顶相乘(2米c) read(b) (19)opr014栈顶值输出至屏幕 end (20)opr015换行 (21)opr016从命令行读取值到栈顶 en (22)sto03栈顶值送变量b中 (23)jmp011无条件转到循环入口(11) (24)opr00结束退栈
const a=10; var b,c; procedure p; begin c:=b+a; end; begin read(b); while b#0 do begin call p; write(2*c); read(b); end end. ( 0) jmp 0 8 转向主程序入口 ( 1) jmp 0 2 转向过程p入口 ( 2) int 0 3 过程p入口,为过程p开辟空间 ( 3) lod 1 3 取变量b的值到栈顶 ( 4) lit 0 10 取常数10到栈顶 ( 5) opr 0 2 次栈顶与栈顶相加 ( 6) sto 1 4 栈顶值送变量c中 ( 7) opr 0 0 退栈并返回调用点(16) ( 8) int 0 5 主程序入口开辟5个栈空间 ( 9) opr 0 16 从命令行读入值置于栈顶 (10) sto 0 3 将栈顶值存入变量b中 (11) lod 0 3 将变量b的值取至栈顶 (12) lit 0 0 将常数值0进栈 (13) opr 0 9 次栈顶与栈顶是否不等 (14) jpc 0 24 等时转(24)(条件不满足转) (15) cal 0 2 调用过程p (16) lit 0 2 常数值2进栈 (17) lod 0 4 将变量c的值取至栈顶 (18) opr 0 4 次栈顶与栈顶相乘(2*c) (19) opr 0 14 栈顶值输出至屏幕 (20) opr 0 15 换行 (21) opr 0 16 从命令行读取值到栈顶 (22) sto 0 3 栈顶值送变量b中 (23) jmp 0 11 无条件转到循环入口(11) (24) opr 0 0 结束退栈
目标代码解释执行时数据栈的布 局(运行栈的存储分配) 每个过程的AR有 3个联系单元: SL:静态链,指向定义该过程的直接外过程 (或主程序)运行时最新数据段的基地址。 DL:动态链,指向调用该过程前正在运行过 程的数据段基地址。 RA:返回地址,记录调用该过程时目标程序 的断点,即调用过程指令的下一条指令的地址。 局部变量 中间结果
目标代码解释执行时数据栈的布 局(运行栈的存储分配) 每个过程的AR有 3个联系单元: –SL: 静态链,指向定义该过程的直接外过程 (或主程序)运行时最新数据段的基地址。 –DL: 动态链,指向调用该过程前正在运行过 程的数据段基地址。 –RA: 返回地址,记录调用该过程时目标程序 的断点,即调用过程指令的下一条指令的地址。 局部变量 中间结果