第7章-目标代码生成.pptVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第7章目标代码生成7.1汇编语言虚拟计算机模型7.2从四元式到汇编语言的翻译7.3一个简单目标代码生成器7.4 静态地址分配7.1汇编语言虚拟计算机模型7.2从四元式到汇编语言的翻译*㈠任务将中间代码变换成目标代码,实现源程序的最后翻译。由于涉及到目标机器的系统结构,此阶段的工作最复杂。㈡目标代码的形式①已定位的机器语言代码编译后可立即执行。②待装配的机器语言代码模块目前大多数编译系统所产生的目标代码均为可重定位的机器指令。在执行前,将它和系统函数(源程序中使用)的机器指令连接成一个程序,对未确定的地址进行定位(假设起始地址为0),形成可执行的机器语言代码程序。在执行时,操作系统可将目标代码装入内存的任意位置。③汇编语言代码需经汇编程序翻译,将其转换成可执行的机器语言代码。由于硬件厂商提供机器的汇编程序,所以编译程序的目标代码通常为汇编语言。㈢目标代码生成要求①目标代码数与中间代码数的比值尽可能小(即目标代码尽可能少)。②充分利用寄存器,减少访问内存的次数。③删除不必要的临时变量。㈠内存①共有64k个字,1个字有16个二进制位(2Byte),内存地址标识为0-65535。②划分为256页,页号0-255,每页的长度为256个字,页内位移为0-255。③地址计算:页号*256+页内位移。④255页用作系统堆栈区。㈡寄存器①通用寄存器(2字节)共有4个,分别标记为R0、R1、R2、R3,用于存放操作数和计算结果,R3还可用于变址寻址。②标志寄存器FlagReg保存CMP指令比较结果。③堆栈寄存器TopReg(2字节)TopReg用作系统栈顶指针。㈢指令系统指令格式:①操作码Read从键盘读一个字到第一地址。Write 从第一地址写一个字到屏幕。Load 从第二地址将字装入第一地址。Store 将第一地址中的字存放到第二地址。Call 控制转移到第二地址指定的内存单元,断点保留在系统堆栈中。Ret 由系统堆栈获得断点,返回。Add 将第一地址中的字加上第二地址中的字,结果保留第一地址中。Sub Mul Div Cmp将第一地址中的字和第二地址中的字比较,由系统置位FlagReg。FlagReg=-1,表示第一地址中的字小于第二地址中的字。FlagReg=1,表示第一地址中的字大于第二地址中的字。FlagReg=0,表示第一地址中的字等于第二地址中的字。JMP 无条件转移到第二地址指定的内存单元。JMPNEG 若FlagReg中的值<0,转移到第二地址指定的内存单元。JMPPOS 若FlagReg中的值>0,转移到第二地址指定的内存单元。JMPZERO 若FlagReg中的值=0,转移到第二地址指定的内存单元。HALT 终止程序执行。②第一地址为寄存器(R0-R3)③寻址方式和第二地址直接地址寻址(M) LoadRi,MXX (XX)→Ri XX范围0-255(第0页),用16进制表示。寄存器寻址(R) LoadRi,Rj (Rj)→Ri 间址寄存器寻址(@R) LoadRi,@Rj ((Rj))→Ri 直接数访问(D) LoadRi,XX XX→Ri XX范围0-255,用16进制表示。变址寻址(C[R3]) LoadRi,C[R3] (C*256+(R3))→Ri C为常数(范围0-255),用16进制表示。④指令分类零地址指令 Ret、HaltA型一地址指令(无第二地址) Write、ReadB型一地址指令(无第一地址) Call、Jmp、JmpNeg、JmpZero、JmpPos二地址指令 Load、Store、Add、Sub、Mul、Div、Cmp㈠符号表、常数表和临时变量表的内存位置四元式中含有变量在符号表和临时变量表中的入口,以及常数在常数表中的地址,所以先确定符号表、临时变量表和常数表在内存中的位置,然后再讨论四元式的翻译。①无符号实常数表(第254页,按地址递减使用) 起始地址:254*256+255=65279,每个实常数占用2个字(4Byte)。②无符号整常数表(第254页,按地址递增使用) 起始地址:254*256=65024,每个整常数占用1个字(2Byte)。③符号表(第252、253页,按地址递减使用) 起始地址:253*256+255=65023,每个标识符占用4个字(8Byte)。④临时变量表(第25

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档