四元式序列转换虚拟机目标代码.doc

想预览更多内容,点击预览全文

申明敬告:

本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己完全接受本站规则且自行承担所有风险,本站不退款、不进行额外附加服务;如果您已付费下载过本站文档,您可以点击这里二次下载

文档介绍

四元式序列转换虚拟机目标代码一、实验目的1、熟悉和掌握四元式序列转换成目标代码的原理2、设计一个程序,能使给定的任一四元式转换成虚拟目标代码。二、实验步骤1、需求分析(1)、产生四元式序列翻译方案设计对于产生四元式序列的翻译方案的设计,以下面的作为例子关于赋值语句的四元式序列的翻译方案S::=id=E{p:=lookup(id.name);ifp≠NULLthengenquad('::',E.place,''*p.place)elseerror}E::=E1+E2{E.place:=newtemp;Fenquad('+',E1.place,E2.place,E.place)}E::=E1*E2{E.place:=newtemp;Fenquad('*',E1.place,E2.place,E.place)}  E::=-E1{E.place:=newtemp;Genquad('NEG',E1.place,'',E.place)}E::=(E1){E.place:=E1.place}E::=id{p:=lookup(id.name);ifp≠NULLthenE.place:=*p.placeelseerror}其中,过程genquad(op,x,y,z)功能是生成四元式:opxyz(2)、四元式生成目标代码从四元式序列生成目标代码的工作的主要问题是运算分量与计算结果的存取问题,在生成目标指令时,要考虑四元式中运算分量是在寄存器中还是在内存中。当在寄存器中时,以后还会被使用否,等等。例如,对于四元式-xyz如果x和y都不在寄存器中,则可生成下列目标指令:MOVx,RiSUBy,Ri计算结果z在寄存器Ri中。如果寄存器Ri与寄存器Rj分别包含x与y。及x与y的值分别在寄存器Ri与Rj,且此四元式后不再引用x,可以为其生成目标指令:SUBRj,Ri计算结果z在Ri中。如果寄存器Ri包

最近下载