PL0目标代码生成与解释运行.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PL0目标代码生成与解释运行

静态链的功能是在一个子过程要引用它的直接或间接父过程的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。 在过程返回时,解释程序通过返回地址恢复指令指针的值到调用前的地址, 静态链的功能是在一个子过程要引用它的直接或间接父过程的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。 小组成员: 隗千千 何瑞青 孙佳艺 刘梦瑶 许静静 房甜甜 PL/0编译程序的目标代码解释执行时的储存分配 2.7 PL/0编译程序的目标代码结构和代码生成 2.5 CONTENTS 1、目标代码结构 2、代码生成 2.5.1 目标代码结构 对PL/0语言的认识 Pascal PL/0子集 PL/0的编译程序的三个功能 1、分析处理PL/0语言源程序 2、编译生成类PCODE代码 3、在虚拟机上解释运行生成 的类PCODE代码 对PL/0语言的认识 (独立子程序)   (独立子程序) 词法分析 代码生成 语法分析 源程序编译正确通过 调用类PCODE解释程序 解释执行类PCODE代码 目标代码结构 PL/0编译程序的目标代码是假想栈式计算机的汇编语言。 假想栈式计算机的汇编语言 源语言 目标语言 拥有一个栈式数据段用于存放运行期数据。 拥有一个代码段用于存放类PCODE程序代码。 拥用数据段分配指针、指令指针、指令寄存器、局部段基址指针等寄存器。 栈 式 计 算 机 PL/0语言 类PCODE指令代码类型,包含三个字段:功能码f、层差l和另一个操作数a。 功能码 层次差 减 引用该变量 或 过程的分程序 说明该变量 或 过程的分程序 =层次差 层差用法的举例:gen(sto,lev-level,adr); lev:当前处理的过程层次。 level:被引用变量或过程所在层次。 fct = (lit, opr, lod, sto, cal, int, jmp, jpc); (* fct类型分别标识类PCODE的各条指令 *) ? instruction = packed record ??? f: fct;?????? (* function code *) ??? l: 0..levmax; (* level *) ??? a: 0..amax;?? (* displacement addr *) ? end; l a 操作数含义 见下页 指令格式 f CAL JMP STO INT sto l, a?store variable l, a(存储变量) STO 将栈顶的内容送人某变量单元中。 a域的含义同LOD 指令。 int 0, a?increment t-register by a(注册的增量) INT为被调用的过程(或主程序)在运行栈中开辟数据区。 a 域为开辟的单元个数。 jpc 0, a?jump conditional to a(有条件转入) JPC 条件转移指令,当栈顶的布尔值为非真时,转向a域的地址,否则顺序执行。 cal l, a?call procedure at level l a(呼叫过程) CAL 调用过程的指令。 a 为被调用过程的目标程序人口地址,L为层差。 opr 0, a execute opr a(执行命令) OPR OPR 的l域为0,a 域的内容决定操作含义,具体说明为(见下页): OPR LIT JPC lit 0, a?load constant a(负载常数) LIT 将常量值取到运行栈顶。 a域为常数值。 lod l, a?load variable l, a(负载变量) LOD 放到栈顶。 a 域是说明(定义)变量的过程,给变量分配的存储空间,相对该过程在运行栈基地址的偏移量。l为调用层与说明层的层差值。 jmp 0, a?jump to a(无条件转入) JMP 无条件转移指令,a 为转向地址。 LOD 目标指令有八条: OPR 的l域为0,a 域的内容决定操作含义,具体说明为: OPR a=0 过程调用结束后返回调用点,并释放被调过程在运行栈的数据空间 a=1 栈顶值取反结果在栈顶。 a=2~5 将栈顶和次栈顶内容做算术运算,结果存放在次栈顶。 a=6 对栈顶值做奇偶判断,奇数为真,偶数为假,结果在栈顶。 a=8~13 将栈顶和次栈顶内容做关系运算,结果存放次栈顶。 a=14 栈顶值输出到屏幕。 a=15 屏幕输出换行。 a=16 从命令行读人一个输入到栈顶。 a 为其他值均为非法指令。 参考类PCODE指令代码 类型,体会例中意思。 功能码 层次差 l

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档