编译器和汇编器之间的区别

作者: Laura McKinney
创建日期: 1 四月 2021
更新日期: 11 可能 2024
Anonim
学习编译原理对实际工作有没有用?
视频: 学习编译原理对实际工作有没有用?

内容


编译器和汇编器在程序执行中起着重要作用。一些编译器直接生成可执行代码,而不是汇编代码。编译器获取预处理的源代码,并将其转换为汇编代码。汇编器从编译器获取汇编代码,并将其转换为可重定位的机器代码。在本文中,我借助下面显示的比较表讨论了编译器和汇编器之间的区别,请看一下。

  1. 比较表
  2. 定义
  3. 关键差异
  4. 结论

比较表

比较基础编译器 组装工
基本的生成汇编语言代码或直接生成可执行代码。生成可重定位的机器代码。
输入项预处理的源代码。汇编语言代码。
阶段/通过编译阶段是词法分析器,语法分析器,语义分析器,中间代码生成,代码优化,代码生成。汇编器对给定的输入进行两次传递。
输出量编译器生成的汇编代码是机器代码的助记符版本。汇编器生成的可重定位机器代码由二进制代码表示。

编译器的定义

编译器 是一种计算机程序,可以读取以源语言编写的程序,并将其翻译成等效的 汇编语言 并将汇编语言代码转发到 组装工。在将源代码转换为汇编代码时,编译器还会报告 错误 在源代码中提供给用户。

编译器也分类为 单遍,多遍,即插即用,调试和优化。 分类基于编译器执行什么功能以及如何构造而完成。尽管存在这些复杂性,编译器的基本任务仍然相同。

编译分为两个部分, 分析部分 合成部分。的 分析部分 将源代码分解为组成部分,并形成源代码的中间表示。的 合成部分 从中间表示形式形成目标代码。


编译按以下阶段执行:

词法分析器,语法分析器,语义分析器,中间代码生成器,代码优化器,代码生成器,符号表和错误处理程序。

  • 词法分析器 读取源代码的字符并将其分组为 令牌流。每个令牌代表字符的逻辑顺序,例如 关键字,标识符,运算符。形成令牌的字符序列称为 莱克美.
  • 语法分析器 解析从词法分析器获得的令牌并将令牌分组为 层次结构.
  • 语义分析器 检查任何源代码 语义错误.
  • 中间代码生成器 产生 中间代表 源代码
  • 代码优化器 将中间代码优化为运行速度更快的机器代码。
  • 代码生成器 最终生成目标代码 可重定位的机器代码或汇编代码.
  • 符号表 是一个数据结构,其中包含源代码中每个标识符的记录。
  • 错误处理程序 检测每个阶段的错误并处理这些错误。

汇编程序的定义

一些编译器执行汇编程序的任务,并直接生成可重定位的机器代码而不是汇编代码,然后将其进一步直接传递给链接程序/ loader。的 汇编器 将编译器生成的汇编代码作为输入,并将其转换为 可重定位机器码.


让我们看看机器代码与汇编代码有何不同。 汇编代码 是个 助记符 机器代码的版本。这意味着它的汇编代码使用名称来表示操作,甚至为存储地址指定名称。另一方面, 机器码 用途 二进制码 用于表示操作和内存地址。

即使是最简单的汇编程序形式也可以执行 两遍 在输入上。的 首过 检测所有 身份标识 在表示存储位置的汇编代码中并将其存储在 符号表 (除了编译器符号表)。的 存储位置已分配 到在第一遍中遇到的标识符。

在里面 第二遍,则将再次扫描输入,这一次 操作码已翻译 变成一个 位序列 在机器代码中表示该操作。第二遍也翻译 身份标识 进入 地址 在符号表中定义。因此,第二遍生成 可重定位机器码.

  1. 编译器和汇编器之间的主要区别在于 编译器 生成汇编代码,某些编译器也可以直接生成可执行代码,而 汇编器 生成可重定位的机器代码。
  2. 编译器将输入 预处理代码 由预处理程序生成。另一方面,汇编器需要 汇编代码 作为输入。
  3. 编译分两个阶段进行: 分析阶段 合成阶段。在分析阶段,输入经过 词法分析器,语法分析器,语义分析器 而综合分析则通过 中间代码生成器,代码优化器,代码生成器。另一方面,汇编器将输入通过 两个阶段。第一阶段检测标识符,并在第二阶段将地址分配给它们,将汇编代码转换为二进制代码。
  4. 编译器生成的汇编代码是 助记符版本 机器代码。但是,汇编器生成的可重定位机器代码是 二进制可重定位代码.

结论:

由于某些编译器直接生成可执行代码,因此可能不需要汇编器。如果使用汇编器,则需要链接器将所有内置库链接到源代码中使用的库函数。