资源描述:
《《目标代码生成》ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第九章目标代码生成源程序编译前端代码生成符号表代码优化目标程序中间代码中间代码对代码生成器的要求是严格的,它输出的代码必须正确而且质量高。质量高的含义是它应该有效地利用机器的资源,此外,代码生成器本生也应该高效地运行.代码生成的输入:中间代码和符号表目标代码的形式:机器语言代码机器语言模块汇编语言代码目标代码生成重点要考虑的问题:生成的目标代码较短充分利用寄存器,减少存储单元访问次数9.1基本问题一.代码生成器的输入已确定的中间代码形式所有信息已填入符号表nametypekindvaladdraintvarObRealva
2、r2crealvar6intconst100dintvar8用于产生数据对象的运行时地址二.目标程序绝对机器代码:所有地址均已定位,可立即执行可再定位机器代码:允许子程序单独编译汇编语言:使代码生成变得容易三.指令选择丰富的机器指令会使生成的目标代码质量更、高、速度更快例:I=I+1用incI实现比用LDR0I,ADDR0#1STR0I生成的代码质量高四、存贮管理把源程序中的名字映射成运行时数据对象的地址是由前端的代码生成器共同完成的PROCEDUREsub(x,y:real);VARi,j:integer;a:ARRAY
3、[1..5]OFreal;e,f:real;BEGINf:=e+i*j;END;f符号表名字形类型偏移量活动记录布局=>老SP(sp,0)x形real3返回地址(sp,1)y形real42(sp,2)(sp,3)(sp,5)iint5i(sp,9)jint9j(sp,13)aarray13a(sp,53)eereal53(sp,61)freal61(sp,4)xyt1t2t3(sp,62)(sp,63)(sp,64)中间代码*ijt1*(sp,5)(sp,9)(sp,62)+et1t2+(sp,53)(sp,62)(
4、sp,63)itort2–t3itor(sp,63)–(sp,64):=t3–f:=(sp,64)–(sp,61)五、寄存器的分配操作数在寄存器中的指令通常要比操作数在内存中的指令短一些,执行也要快一些充分利用寄存器对生成好的代码尤其重要。1、选择要驻留在寄存器中的变量2、选出分配给驻留在寄存器中的变量的寄存器需要考虑的问题:寄存器的分配原则:1.选择已被变量占用,但变量以后可能不被引用的寄存器2.已分配寄存器,且存放的变量在较远的结点才被引用3.分配空闲的寄存器使用专用寄存器六、计算次序的选择七、代码生成方法计算执行的次
5、序会影响目标代码的效率评判代码生成器的最重要的准则是产生正确的代码除此之外,易于实现、测试和维护也是重要的设计目标9.2目标机器:熟悉目标机器及其指令是设计一个好的代码生成器的先决条件BX、BP-基址寄存器SI、DI-变址寄存器1。转移指令JNZ、JMP、CALL、RET2。运算指令ADD R R/MSUB R R/MMUL R R/MDIV R R/MCOMP R R/M3。寻址功能:寄存器寻址:MOV AX BX直接寻址:MOV AX DATA基址(变址)+位移:MOV DI,[BX]+20H9.3 常用四元式的翻译方
6、法1。四元式(program,prg_id,,){MAINSEGMENT:ASSUMECS:MAIN,DS:MAIN,ES:MAIN)2。四元式 (ret, , ,p){JMPp }3。四元式(+,A,B,T){MOVAX,AADDAX,BMOVT,AX}4。四元式(-,A,_,T){MOVAX,ANEGAXMOVT,AX}7.四元式([]=,A,,T1[T2]){MOVSIT2MOVAX,AMOV[SI]+T1,AX}8。四元式(JNZ,A,,P){MOVAXAJNZP’}10。四元式(J<,A,B,P){MOVAXA
7、CMPAX,BJLP’}9。四元式(J,,,P){JMPP’}