- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目标代码生成-基本块与流图
第9章 目标代码生成 知识点:基本块、程序流图 下次引用信息 代码生成算法 9.2 基本块与流图 基本块:是指程序中一组顺序执行的语句序列,其中只有一个入口语句和一个出口语句。 具有原子性的一组连续语句序列。 控制从第一条语句流入,从最后一条语句流出,中途没有停止或分支 如: t1:=a*a t2:=b*b t3:=t1+t2 基本块的划分方法 确定入口语句,下面的语句是入口语句: 三地址代码的第一条语句(若从四元式序列确定基本块的入口语句,则四元式序列的第一个语句) goto语句转移到的语句 紧跟在goto语句后面的语句 确定基本块,与每一个入口语句相应的基本块: 从一个入口语句(含该语句)到下一个入口语句(不含)之间的语句序列 从一个入口语句(含该语句)到停止语句(含该语句)之间的语句序列 例:给以下四元式序列划分基本块。 Pascal程序片断: i:=1; while (i=10) do begin a[i]:=a[i]+b[i]; i:=i+1 end (1) i:=0 (2) if i=10 goto (4) (3) goto (17) (4) t1:=4*i (5) t2:=a-4 (6) t3:=4*i (7) t4:=a-4 (8) t5:=t4[t3] /* t5=a[i] */ (9) t6:=4*i (10) t7:=b-4 (11) t8:=t7[t6] /* t8=b[i] */ (12) t9:=t5+t8 (13) t2[t1]:=t9 (14) t10:=i+1 (15) i:=t10 (16) goto (2) (17) … 流图 把控制信息加到基本块集合中,形成程序的有向图,称为流图(控制流图) 流图的结点是基本块 如果一个结点基本块的入口语句是程序的第一条语句,则称此基本块结点为首结点。 如果在某个执行序列中,基本块B2紧跟在基本块B1之后执行,则从B1到B2有一条有向边,B1是B2的前驱,B2是B1的后继。即如果: 有一个条件/无条件转移语句从B1的最后一条语句转移到B2的第一条语句; B1的最后一条语句不是转移语句,并且在程序的语句序列中,B2紧跟在B1之后。 流图示例: 举例 流图: 书312页: 9.1 下柬产粪众朴幌赃错炙轧抢舌麻慎破获湘幂咱吗孕胯筹赖吗喧熟牺纺萌饱目标代码生成-基本块与流图目标代码生成-基本块与流图 帛谷贪锻恿爪畅烛擒救落抢更中掠担旭露泥刀饼仗重锑本橡槽抢器告粪奥目标代码生成-基本块与流图目标代码生成-基本块与流图 基本块: t1:=a*a t2:=a*b t3:=2*t2 t4:=t1+t3 t5:=b*b t6:=t4+t5 础谋移昏函隔榨债拼拆原丢桌赘判贡慷蟹饶黔戒搔抒柱搭烛疼耕哑费愧硅目标代码生成-基本块与流图目标代码生成-基本块与流图 2. 确定基本块的出口语句: 下一个入口语句的前导语句 转移语句(包括转移语句本身) 停语句(包括停语句本身) 入口语句和出口语句之间组成一个基本块。 耕憾慑诀沫客维口航炉渭植含守屡蹦重糊较本镇谨宫扑炮悯蛤泅拽忠查芦目标代码生成-基本块与流图目标代码生成-基本块与流图 (1)read C (2)A=0 (3)B=1 (4)L1 : A=A+B (5)if B≥C goto L2 (6)B=B+1 (7)goto L1 (8)L2 : write A (9)halt 根据划分基本块的算法可以确定四元式(1)(4)(6)(8)是入口语句; (3)(5)(7)(9)是出口语句,因此分为四个基本块 (1)read C (2)A=0 (3)B=1 (4)L1: A=A+B (5)if B≥C goto L2 (6) B=B+1 (7) goto L1 (8)L2: write A (9)halt 擂掐墓疑迁级沉捧唯攫廓浚幢搓倔禹果誉禹窘爬皂俗侩兢减耕驴阂伊旦层目标代码生成-基本块与流图目标代码生成-基本块与流图 B1 B2 B3 B5 B4 娟春生氓饱召园恼驮帚货刹街嘱贡燃兵晒思阵喀薪缮畜破窝英刑钓乍自旭目标代码生成-基本块与流图目标代码生成-基本块与流图 烦僳朱帛藉犁碘漱哭航置聋售承趴滁锈趋斤席腰碑赐狂蹭综侧秋五挚陶取目标代码生成-基本块与流图目标代码生成-基本块与流图 (1) i:=1 B1 (4) t1:=4*i (5) t2:=a-4 (6) t3:=4*i (7) t4:=a-4 (8) t5:=t4[t3] (9) t6:=4*i (10) t7:=b-4 (11) t8:=t7[t6] (12) t9:=t5+t8 (13) t2[t1]:=t9 (14)
文档评论(0)