欢迎来到天天文库
浏览记录
ID:57166078
大小:326.50 KB
页数:49页
时间:2020-08-02
《编译原理 课件.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称为源和目的,是数据域。例如有如下的操作码:MOV(将源移到目的中)ADD(将源加到目的中)SUB(在目的中减去源)3content
2、s(a)表示由a所代表的寄存器或存储单元的内容。有关地址方式及它们的汇编语言形式和有关开销如表8.1所示。表8.1目标机器的地址方式4指令开销开销是与一条指令的长度(按字计算)相对应的。对绝大多数机器和绝大多数指令而言,用来从存储器中获取一条指令的时间超过了执行该指令的时间。指令开销=源地址开销 +目的地址开销+11.MOVR0,R11 2.MOVR5,M2 3.ADD#1,R32 4.SUB4(R0),*12(R1)3contents(contents(12+contents(R1)))-contents(4+contents(R0))5生成高质量目标机器代码的一些
3、困难。如,a:=b+c用不同的指令序列来实现:1.MOVb,R0ADDc,R0 cost=6MOVR0,a2.MOVb,aADDc,a cost=6假定R0,R1和R2中分别存放了a,b和c的地址:3.MOV*R1,*R0ADD*R2,*R0 cost=26假定R1和R2中分别包含b和c的值,并且b的值在这个赋值以后不再需要,则我们还有:4.ADDR2,R1MOVR1,a cost=3有效地利用它的地址能力和寄存器。78.2运行存储管理运行时刻管理活动记录应生成哪些代码,静态分配和栈式分配。运
4、行时活动记录的分配和释放是作为过程调用和返回序列的一部分,集中讨论如下三地址语句生成哪些代码:1.call(调用);2.return(返回);3.halt(暂停);4.action(动作〕,为其它语句占有位置。8三地址代码/*s的代码*/action1callpaction2halt/*p的代码*/action3returnS的活动记录返回地址arrijp的活动记录返回地址bufn98.2.1静态分配管理call调用语句MOV#here+20,callee.static_areaGOTOcallee.code_areaMOV指令存放返回地址。GOTO指令将控制转移到被凋用过程的目标代
5、码。callee.static_area和callee.code_area分别指示被调用过程活动记录的始址和第一条指令的地址。从过程callee的返回:GOTO*callee.static_area108.2.2栈式分配管理第一个过程的代码初始化栈:MOV#stackstart,SP/*初始化栈*/callpADD#caller.recordsize,SP/*将调用过程的活动记录的长度加入到SP中*/MOV#here+16,*SP/*存储返回地址*/GOTOcallee.code_area/*转移到被调用过程的代码的第一条指令*/属性caller.recordsize代表一个活动记录的大小。
6、11MOVtop,spADD#caller.recordsize,top返回序列包括两个部分: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表指针在寄存
7、器R3中,那么,X:=0翻译成为如下三地址语句;t1:=12+R3*t1:=0其中t1中存放的是x的地址。13这个序列可翻译成如下的机器指令:MOV#0,12(R3)注意在寄存器R3中的值不能在编译时确定。8.3基本块和流图三地址语句序列的一种图表示法称为流图,它对理解代码生成算法是很有用的。流图中的结点表示计算,边表示控制流向。148.3.1基本块定义一个基本块是这样一个连续语句序列:其中控制流从第一条语
此文档下载收益归作者所有