欢迎来到天天文库
浏览记录
ID:48157899
大小:153.50 KB
页数:18页
时间:2020-01-17
《第7章 目标代码生成.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章目标代码生成7.1汇编语言虚拟计算机模型7.2从四元式到汇编语言的翻译7.3一个简单目标代码生成器7.4静态地址分配1㈠任务将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器的系统结构,此阶段的工作最复杂。㈡目标代码的形式①已定位的机器语言代码编译后可立即执行。②待装配的机器语言代码模块目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地址进行定位(假设起始地址为0),形成可执行的机器语言代码程序。在执行时,操作系统可将目标代码装入内存的任意位置。③汇编语言代码需经汇
2、编程序翻译,将其转换成可执行的机器语言代码。由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语言。㈢目标代码生成要求①目标代码数与中间代码数的比值尽可能小(即目标代码尽可能少)。②充分利用寄存器,减少访问内存的次数。③删除不必要的临时变量。27.1汇编语言虚拟计算机模型㈠内存①共有64k个字,1个字有16个二进制位(2Byte),内存地址标识为0-65535。②划分为256页,页号0-255,每页的长度为256个字,页内位移为0-255。③地址计算:页号*256+页内位移。④255页用作系统堆栈区。㈡寄存器①通用寄存器(2字节)共有4个,分别标记为R0、R
3、1、R2、R3,用于存放操作数和计算结果,R3还可用于变址寻址。②标志寄存器FlagReg保存CMP指令比较结果。③堆栈寄存器TopReg(2字节)TopReg用作系统栈顶指针。3㈢指令系统指令格式:①操作码Read从键盘读一个字到第一地址。Write从第一地址写一个字到屏幕。Load从第二地址将字装入第一地址。Store将第一地址中的字存放到第二地址。Call控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。Ret由系统堆栈获得断点,返回。Add将第一地址中的字加上第二地址中的字,结果保留第一地址中。SubMulDivCmp将第一地址中的字和第二地址中的字比较,由
4、系统置位FlagReg。FlagReg=-1,表示第一地址中的字小于第二地址中的字。FlagReg=1,表示第一地址中的字大于第二地址中的字。FlagReg=0,表示第一地址中的字等于第二地址中的字。4JMP无条件转移到第二地址指定的内存单元。JMPNEG若FlagReg中的值<0,转移到第二地址指定的内存单元。JMPPOS若FlagReg中的值>0,转移到第二地址指定的内存单元。JMPZERO若FlagReg中的值=0,转移到第二地址指定的内存单元。HALT终止程序执行。②第一地址为寄存器(R0-R3)③寻址方式和第二地址直接地址寻址(M)LoadRi,MXX(XX)→
5、RiXX范围0-255(第0页),用16进制表示。寄存器寻址(R)LoadRi,Rj(Rj)→Ri间址寄存器寻址(@R)LoadRi,@Rj((Rj))→Ri直接数访问(D)LoadRi,XXXX→RiXX范围0-255,用16进制表示。变址寻址(C[R3])LoadRi,C[R3](C*256+(R3))→RiC为常数(范围0-255),用16进制表示。5④指令分类零地址指令Ret、HaltA型一地址指令(无第二地址)Write、ReadB型一地址指令(无第一地址)Call、Jmp、JmpNeg、JmpZero、JmpPos二地址指令Load、Store、Add、Sub
6、、Mul、Div、Cmp67.2从四元式到汇编语言的翻译㈠符号表、常数表和临时变量表的内存位置四元式中含有变量在符号表和临时变量表中的入口,以及常数在常数表中的地址,所以先确定符号表、临时变量表和常数表在内存中的位置,然后再讨论四元式的翻译。①无符号实常数表(第254页,按地址递减使用)起始地址:254*256+255=65279,每个实常数占用2个字(4Byte)。②无符号整常数表(第254页,按地址递增使用)起始地址:254*256=65024,每个整常数占用1个字(2Byte)。③符号表(第252、253页,按地址递减使用)起始地址:253*256+255=6502
7、3,每个标识符占用4个字(8Byte)。④临时变量表(第252、253页,按地址递增使用)起始地址:252*256=64512,每个临时变量占用4个字(8Byte)。注:四元式中最多允许出现512/4=128个不同的变量,包括临时变量在内。7虚拟内存示意图(共64K、分255页、每页255字节)8设源程序为:a=2+(+b+1),它的四元式代码为+&b0&T1+&T1&1&T2+&2&T2&T3=&T30&a假设整常数1在无符号整常数表中的地址为65024(254*256+0)整常数2在无符号整常数表中的地址为65025(25
此文档下载收益归作者所有