编译原理 课件chapter8.ppt

编译原理 课件chapter8.ppt

ID:51593427

大小:433.50 KB

页数:49页

时间:2020-03-25

编译原理 课件chapter8.ppt_第1页
编译原理 课件chapter8.ppt_第2页
编译原理 课件chapter8.ppt_第3页
编译原理 课件chapter8.ppt_第4页
编译原理 课件chapter8.ppt_第5页
资源描述:

《编译原理 课件chapter8.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第八章代码生成序8.1目标机器8.2运行存储管理8.3基本块和流图8.4下次引用信息8.5一个简单的代码生成器1序代码生成器中间代码符号表目标代码中间代码:后缀式,三地址代码,语法树。符号表中的项:名字,类型,嵌套深度,偏移量目标代码:绝对机器代码,可再定位代码,汇编28.1目标机器按字节编址,以4个字节为一个字.通用寄存器R0,R1,…,Rn-1。两地址指令形式:opsource,destination其中op是一个操作码,source和destination称为源和目的,是数据域。例如有如下的操作码:M

2、OV(将源移到目的中)ADD(将源加到目的中)SUB(在目的中减去源)3contents(a)表示由a所代表的寄存器或存储单元的内容。有关地址方式及它们的汇编语言形式和有关开销如表8.1所示。表8.1目标机器的地址方式4指令开销开销是与一条指令的长度(按字计算)相对应的。对绝大多数机器和绝大多数指令而言,用来从存储器中获取一条指令的时间超过了执行该指令的时间。指令开销=源地址开销 +目的地址开销+11.MOVR0,R11     2.MOVR5,M2     3.ADD#1,R32     4.SUB4(R

3、0),*12(R1)3contents(contents(12+contents(R1)))-contents(4+contents(R0))5生成高质量目标机器代码的一些困难。如,a:=b+c用不同的指令序列来实现:1.MOVb,R0 ADDc,R0            cost=6MOVR0,a 2.MOVb,a ADDc,a              cost=6假定R0,R1和R2中分别存放了a,b和c的地址:3.MOV*R1,*R0 ADD*R2,*R0          cost=26假定R1

4、和R2中分别包含b和c的值,并且b的值在这个赋值以后不再需要,则我们还有:4.ADDR2,R1 MOVR1,a             cost=3有效地利用它的地址能力和寄存器。78.2运行存储管理运行时刻管理活动记录应生成哪些代码,静态分配和栈式分配。运行时活动记录的分配和释放是作为过程调用和返回序列的一部分,集中讨论如下三地址语句生成哪些代码:1.call(调用); 2.return(返回); 3.halt(暂停); 4.action(动作〕,为其它语句占有位置。8三地址代码/*s的代码*/actio

5、n1callpaction2halt/*p的代码*/action3returnS的活动记录返回地址arrijp的活动记录返回地址bufn98.2.1静态分配管理call调用语句MOV#here+20,callee.static_area GOTOcallee.code_areaMOV指令存放返回地址。GOTO指令将控制转移到被凋用过程的目标代码。callee.static_area和callee.code_area分别指示被调用过程活动记录的始址和第一条指令的地址。从过程callee的返回:GOTO*cal

6、lee.static_area108.2.2栈式分配管理第一个过程的代码初始化栈:MOV#stackstart,SP/*初始化栈*/callpADD#caller.recordsize,SP/*将调用过程的活动记录的长度加入到SP中*/MOV#here+16,*SP/*存储返回地址*/GOTOcallee.code_area/*转移到被调用过程的代码的第一条指令*/属性caller.recordsize代表一个活动记录的大小。11MOVtop,spADD#caller.recordsize,top返回序列包

7、括两个部分:GOTO*0(SP)/*返回到调用过程*/MOVsp,topSUB#caller.recordsize,SP8.2.3名字的运行地址x:=0静态分配区域的开始地址是static,x的相对地址12,则x的实际地址应为static+12。static[12]:=012如果静态区域是从地址100开始,则上述语句的目标代码为:MOV#0,112栈式分配,用一个display表存取非局部名字,又假定该display表是存放在一些寄存器中,并且x是局部于一个活动记录的变量,该活动记录的display表指针在

8、寄存器R3中,那么,X:=0翻译成为如下三地址语句;t1:=12+R3 *t1:=0其中t1中存放的是x的地址。13这个序列可翻译成如下的机器指令:MOV#0,12(R3)注意在寄存器R3中的值不能在编译时确定。8.3基本块和流图三地址语句序列的一种图表示法称为流图,它对理解代码生成算法是很有用的。流图中的结点表示计算,边表示控制流向。148.3.1基本块定义一个基本块是这样一个连续语句序列:其中控制流从第一条语

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。