- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章pl0代码生成
* PL/0编译程序的目标代码结构和代码生成 目标代码类pcode是一种假想栈式计算机的汇编语言。 指令格式: f l a f 功能码 l 层次差 (标识符引用层减去定义层) a 根据不同的指令有所区别 目标指令见下页 见P23页 * 指 令 功 能 表 * 代码生成 代码生成是由过程GEN完成。P417 GEN有3个参数,分别代表目标代码的功能码,层差和位移量。例如 gen(opr,0,16);从命令行读取值到栈顶 gen(sto,lev-level,adr) 将栈顶内容送到变量单元中, lev:当前处理的过程层次 level:被引用变量或过程所在层次 CX:为目标代码code数组的下标指针 * Code: array[0..cxmax] of instruction; p414 fct=(lit, opr, lod, sto, cal, int, jmp, jpc) P413 Instruction= packec record P413 f: fct; l: 0..levmax a: 0..amax; end; * CODE为一维数组,数组元素为记录型数据。每一个记录就是一条目标指令。 CX为指令的指针,由0开始顺序增加。 实际上目标代码的顺序是内层过程的排在前边,主程序的目标代码在最后。 下面我们给出一个PL/0源程序和对应的目标程序的清单。 在block入口处生成一条(jmp,0,0)指令,作为过程体入口指令,该指令的第3区域的0需分析到过程体入口时才返填。 * 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); endend. ( 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 结束退栈 * PL/0编译程序的目标代码生成是由GEN过程完成的 ,当语法分析正确,则调用目标代码生成过程以生成与PL/0语句等价功能的目标代码,直到编译正常结束。 注意:过程说明部分,变量和常量的说明都不产生目标代码。 对分程序体入口的处理(见程序文本P424页block 的过程体) begin (*block*) dx:=3; tx0:=tx; (*保留当前table表指针值,实际为过程名在table表中的位置*) table[tx].adr:=cx;(*保留当前code指针值到过程名的adr域*) gen(jmp,0,0); (jmp,0,0)指令,作为过程体入口指令,该指令的第3区域的0需分析到过程体入口时才返填。 * 录过程在code的入口到table中的adr域如下表所示: ???????????????????????????????????????????????????????????????? (*生成转向过程体入口的指令,该
您可能关注的文档
- 离子反应期末复习课.ppt
- 离子反应高二.ppt
- 离子液体固定化酶ppt.ppt
- 磁铁有磁性 汇报课.ppt
- 离心泵扬程的变化.pptx
- 福建华电漳平火电有限公司投标书.docx
- 离散作业_河北工业大学.doc
- 种植体的平台转移.pptx
- 种群的特征浙科版.ppt
- 种子发芽毒性实验.ppt
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
最近下载
- 某化工厂现场应急处置方案(58个).pdf VIP
- MBR运行调试及维护.doc VIP
- 新目标(第二版)视听说B3U7 测试试卷答案.pdf VIP
- 论工厂设备详细搬迁方案.doc VIP
- 2025年公需课《人工智能赋能制造业高质量发展》试题及答案.doc VIP
- DB5307T59-2024丽江市城市暴雨强度公式.pdf VIP
- aqt3049—2013危险与可操作性分析hazop分析应用导则.doc VIP
- 物流运输企业成本结构分析(详细).docx VIP
- 心力衰竭患者利尿剂抵抗诊断及管理中国专家共识2024解读.pptx
- 课题申报书:人工智能赋能高职院校学生就业能力提升的路径研究.docx VIP
文档评论(0)