精华内容
下载资源
问答
  • 目标代码生成与代码优化

    千次阅读 2013-12-29 10:49:12
     java语言由于是半编译半解释的语言,之所以能跨平台是因为编译的阶段生成java虚拟机能识别的中间代码,而不是目标代码,再由Java虚拟机来解释成机器码。  目标代码生成需要获取寄存器的个数和

                 目标代码的生成与机器的硬件环境有关,所以有些语言不能跨平台的原因就在于编译时需要了解机器的寄存器等资源,不同的机器寄存器不同,导致代码需要二次编译。

                 java语言由于是半编译半解释的语言,之所以能跨平台是因为在编译的阶段只生成java虚拟机能识别的中间代码,而不是目标代码,再由Java虚拟机来解释成机器码。

                目标代码的生成需要获取寄存器的个数和使用情况,这里需要用到寄存器选择算法。

                为了使目标代码的执行效率更高,需要设置两个数据结构:待用信息,活跃信息。在基本模块之内,记录各个变量的使用情况,然后根据待用信息来确定是否将寄存器的数据替换或者保留。活跃信息是在模块之外确定数据否需要保留或者替换。

                代码优化包括:代码外提,删除无用代码,删除公共子表达式等。

               代码外提:主要在循环结构中使用,这样能成倍的提高代码的运行效率。

               删除公共表达式: 对于相同的三地址代码可以进行合并,删除。

               删除无用代码: 对于一些临时变量和没有使用的代码可以进行删除。

            程序流图的画法:

                     


            DAG图代码优化方法:

                           





      

    展开全文
  • 第九章 目标代码生成(1)

    千次阅读 2014-06-18 22:43:21
    目标代码生成是编译程序的最后一个工作阶段。其任务是把先行阶段所产生的中间代码转换为相应的目标代码。 一般而言,构造一个高效的代码生成程序并不容易,因为代码生成总是与某一具体的目标计算机密切相关,很难...

            目标代码生成是编译程序的最后一个工作阶段。其任务是把先行阶段所产生的中间代码转换为相应的目标代码

            一般而言,构造一个高效的代码生成程序并不容易,因为代码生成总是与某一具体的目标计算机密切相关,很难找到一种对各编译程序都普遍适用的好的生成算法。然而我们仍应研究这一课题,因为,一个精巧的代码生成程序所产生的目标代码,在执行效率上,要比那些拙劣的代码生成程序所产生的目标代码要高得多。对于一个好的代码生成程序来说,通常我们要求它至少能做到如下两点第一,使所生成的目标代码尽可能的短。第二,能较充分地发挥目标计算机可用资源的效率,如尽可能地使用执行速度较快的指令;充分利用计算机的寄存器或变址器,以节省访问内存的时间;等等。

    1、目标代码的形式

    代码生成程序所输出的目标程序可以有如下三种形式:

    ( 1 )、具有绝对地址的机器语言程序;

    ( 2 )、可浮动的机器语言程序;

    ( 3 )、汇编语言形式的程序。

           就所需花费的机器时间而言,应当说第一种形式的目标代码最为有效,因为它们在存储空间中有固定的位置,一旦产生出此种形式的目标程序之后,便可直接投入运行其缺点是不能独立地完成源程序各程序块的编译,即使是供源程序调用的子程序也必须同时进行编译,因而灵活性较差。通常是在程序较短,而调试工作量较大的情况下,采用此种方式。

           第二种形式的目标程序由若干个目的模块组成,各个模块中都包含目标程序中的一部分代码,且这些代码可在存储空间进行浮动(即可将它们装入到存储空间的任何位置)。此外,在各目的模块中还含有一些连接信息(如本模块需引用的其它模块中的符号名或子程序入口名)。所以,对于此种形式的目标代码,需经过连接装入程序把它们和所需的运行子程序的目的模块连接起来之后,才能投入运行这种目标代码结构无疑有较大的灵活性,故为许多编译程序所采用,惟执行连接装入程序本身需耗费一些时间。

           第三种形式的目标程序是让代码生成程序产生汇编语言形式的目标程序,比前两种方式容易实现一些,但需在编译完毕之后额外增加一个汇编目标程序的阶段。所以,尽管此种方式有某些优点,但并不是一种最好的方案。

    展开全文
  • 在目标代码生成阶段,符号表用于地址分配。 代码生成阶段由代码生成器完成,需要依赖目标机器的体系结构、指令系统和操作系统。其中存储管理、指令选择、寄存器分配和计算顺序都是代码生成器要考虑的问题。

    坐标:编译原理,代码生成

    1. 什么目标程序?
      .o文件。

    2. 什么是目标代码?

      目标代码可以是:
      1)绝对地址的机器代码(即机器语言程序),
      2)也可以是相对地址的机器代码,
      3)还可以是汇编代码(即汇编语言程序)。

    3. 代码生成阶段的工作?
      代码生成阶段是编译程序的最后一个阶段,所以是编译程序都有的阶段。

      在目标代码生成阶段,符号表用于地址分配。

      代码生成阶段由代码生成器完成,需要依赖目标机器的体系结构、指令系统和操作系统。其中存储管理、指令选择、寄存器分配和计算顺序都是代码生成器要考虑的问题。


    1单选(1分)
    在目标代码生成阶段,符号表用于(A )。

    A.地址分配
    B.语义检查
    C.语法检查
    D.目标代码生成

    2单选(1分)
    经编译得到的目标程序是( C)。

    A.四元式序列
    B.二元式序列
    C.机器语言程序或汇编语言程序
    D.三元式序列

    3单选(1分)
    (A )不可能是目标代码。

    A.中间代码
    B.可重定位指令代码
    C.汇编代码
    D.绝对指令代码

    4判断(1分)
    所有编译程序都有目标代码生成阶段。

    5判断(1分)
    代码生成器的设计要着重考虑目标代码的质量问题。

    6判断(1分)
    目标代码生成时,无需考虑目标计算机的系统结构。

    展开全文
  • 代码生成1 在目标代码生成阶段,符号表用于( )。A. 目标代码生成B. 语义检查C. 语法检查D. 地址分配 2 经编译得到的目标程序是( )。A. 机器语言程序或汇编语言程序B. 四元式序列C. 三元式序列D. 二元式序列 3 ( )...

    代码生成

    1 在目标代码生成阶段,符号表用于( )

    A. 目标代码生成

    B. 语义检查

    C. 语法检查

    D. 地址分配

     

    2 经编译得到的目标程序是( )

    A. 机器语言程序或汇编语言程序

    B. 四元式序列

    C. 三元式序列

    D. 二元式序列

     

    3 ( )不可能是目标代码。

    A. 中间代码

    B. 汇编代码

    C. 绝对指令代码

    D. 可重定位指令代码

     

    4 以下说法不正确的是( )

    A. 源程序到目标程序的变换是等价变换,即两者结构不同,但语义是一致的

    B. 源程序和目标程序是等价关系

    C. 目标代码生成时,需要考虑目标计算机的指令系统

    D. 窥孔优化是在中间代码层次上进行的优化工作

     

    5 所有编译程序都有目标代码生成阶段。

    A.

    B. 错

     

    6 代码生成器的设计要着重考虑目标代码的质量问题。

    A.

    B. 错

     

    7 目标代码生成时,无需考虑目标计算机的系统结构。

    A. 对

    B.

    展开全文
  • 在目标代码生成阶段,符号表用于( )。 A. 目标代码生成 B. 语义检查 C. 语法检查 D. 地址分配 D 2 经编译得到的目标程序是( )。 A. 机器语言程序或汇编语言程序 B. 四...
  • 1 在目标代码生成阶段,符号表用于( )。 A. 目标代码生成 B. 语义检查 C. 语法检查 D. 地址分配 2 经编译得到的目标程序是( )。 A. 机器语言程序或汇编语言程序 B. 四元式序列 C. 三元式序列 D. 二元式序列 3 ( )不...
  • 编译器设计-代码生成

    2020-06-24 08:48:42
    通过后代码生成,优化过程可以应用到代码上,但这可以看作是代码生成阶段本身的一部分。编译器生成的代码是一些低级编程语言(例如汇编语言)的目标代码。我们已经看到,用高级语言编写的源代码被转换为低级语言,...
  • 编译原理之代码生成

    千次阅读 2017-12-18 16:13:41
    目标代码生成阶段的任务是:将此前的中间代码转换成特定机器上的机器语言或汇编语言,这种转换程序便被称为代码生成器。1. 程序移植性和编译器模块设计的关系 之所以将编译原理分成这种多阶段多模块的组织形式,...
  • 当把所有的源程序生成DAG表示后,就进入了编译器的最后处理阶段,LCC是把DAG生成汇编的目标代码这一阶段,编译器为源程序定义和使用的变量选择存储单元,并把中间指令翻译成完成相同任务的汇编代码指令序列。...
  • 代码生成器,就是一种根据源模型,源机器到目标机器的转换规则来进行自动寻优设计,生成目标模型的一种工具。 而每个阶段都只需要解决这个阶段需要关心的问题,而将其他事物完全简化掉,以获得极限的效率。 一...
  • ASM---JAVA代码生成

    千次阅读 2009-02-19 23:35:00
    这里要说的ASM,并不是指汇编语言,而是一个操作Java bytecode的框架。对于Java平台而言,bytecode便是它的“汇编语言”,所以,ASM...起步阶段,Hello World总是一个很好的选择,也就是说,我们生成目标代码是这样
  • 编译生成目标代码之后可直接编译生成初始化文件,或与其他目标代码链接生成替代文件。 本项目解析的语法与是C语言的一个子集,但部分语法存在区别,这些将最后的测试用例中具体说明。目前已支持的数据类型包括:...
  • 最终来到了编译器部分的最后一个章节——代码生成阶段。本章的目标就是将Jack语言转化为VM语言,完毕Jack编译器的构建。 刚刚接触这章的内容时,会比較难上手。最基本的问题就在于,这章的内容看起来和第十章...
  • 当把所有的源程序生成DAG表示后,就进入了编译器的最后处理阶段,LCC是把DAG生成汇编的目标代码这一阶段,编译器为源程序定义和使用的变量选择存储单元,并把中间指令翻译成完成相同任务的汇编代码指令序列。...
  • PointRCNN: 点云的3D目标生成与检测 PointRCNN: 3D Object Proposal Generation and ...整个框架由两个阶段组成:第一阶段用于自下而上的3D方案生成,第二阶段用于标准坐标系中细化方案以获得最终的
  • 代码生成的最终目的,是生成能在目标机器上运行的机器码,或者可以和其他库链接在一起的可重定向对象。代码生成,和这一阶段的各个优化手段,统称为编译器的后端。目前大部分编译器,在代码生成时,都倾向于
  • 大家好,目前BMS的科普已经告一段落,下一个阶段的小目标是讲解对应的MBD的开发,尤其VCU/BMS的工程应用领域,如何进行工程应用的开发,逐渐的总结,并汇总成文,逐一给大家讲解,但由于目前本屌丝已经上班,故...
  • 通常我们建立一个程序的基本步骤如下: ...标志-c表示gcc编译阶段完成后就停止,即会生成main.o 实例1: #include int odd(int n) { if(1 == n%2) return 1; return 0; } 代码存在e
  • 编译原理 第八章复习题 符号表

    千次阅读 2019-06-19 10:21:48
    在目标代码生成阶段,符号表用(D)。 A.目标代码生成 B.语义检查 C.语法检查 D.地址分配 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。正确 符号表常用的操作不包括(B)。 A 查询...
  • 第八章符号表

    2019-07-02 19:39:29
    在目标代码生成阶段,符号表用(D)。 A.目标代码生成 B.语义检查 C.语法检查 D.地址分配 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。正确 符号表常用的操作不包括(B)。 A 查询给定的...
  • 编译原理第九章

    2019-07-02 19:13:02
    在目标代码生成阶段,符号表用(D)。 A.目标代码生成 B.语义检查 C.语法检查 D.地址分配 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。正确 符号表常用的操作不包括(B)。 A 查询给定的...
  • Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序。 一、GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件...
  • 目标文件是编译器编译了源代码之后生成的文件格式(.O)。目标文件从结构上来说,是已经编译好之后的可执行文件格式,还未经过链接,其中可能有些地址和符号还未调整。 所以说,目标文件和可执行文件的内容和结构很...
  • 编译原理第八章-符号表

    千次阅读 2019-06-13 22:44:38
    1 在目标代码生成阶段,符号表用D A.目标代码生成 B.语义检查 C. 语法检查 D.地址分配 2 在编译处理过程中,符号表只有在词法分析阶段和语法分析阶段才是有用。 正确 3 符号表常用的操作不包括(B )。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 541
精华内容 216
关键字:

在目标代码生成阶段