编译器和汇编器之间的区别
作者:
Laura McKinney
创建日期:
1 四月 2021
更新日期:
11 可能 2024
内容
编译器和汇编器在程序执行中起着重要作用。一些编译器直接生成可执行代码,而不是汇编代码。编译器获取预处理的源代码,并将其转换为汇编代码。汇编器从编译器获取汇编代码,并将其转换为可重定位的机器代码。在本文中,我借助下面显示的比较表讨论了编译器和汇编器之间的区别,请看一下。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 编译器 | 组装工 |
---|---|---|
基本的 | 生成汇编语言代码或直接生成可执行代码。 | 生成可重定位的机器代码。 |
输入项 | 预处理的源代码。 | 汇编语言代码。 |
阶段/通过 | 编译阶段是词法分析器,语法分析器,语义分析器,中间代码生成,代码优化,代码生成。 | 汇编器对给定的输入进行两次传递。 |
输出量 | 编译器生成的汇编代码是机器代码的助记符版本。 | 汇编器生成的可重定位机器代码由二进制代码表示。 |
编译器的定义
的 编译器 是一种计算机程序,可以读取以源语言编写的程序,并将其翻译成等效的 汇编语言 并将汇编语言代码转发到 组装工。在将源代码转换为汇编代码时,编译器还会报告 错误 在源代码中提供给用户。
编译器也分类为 单遍,多遍,即插即用,调试和优化。 分类基于编译器执行什么功能以及如何构造而完成。尽管存在这些复杂性,编译器的基本任务仍然相同。
编译分为两个部分, 分析部分 和 合成部分。的 分析部分 将源代码分解为组成部分,并形成源代码的中间表示。的 合成部分 从中间表示形式形成目标代码。
编译按以下阶段执行:
词法分析器,语法分析器,语义分析器,中间代码生成器,代码优化器,代码生成器,符号表和错误处理程序。
- 的 词法分析器 读取源代码的字符并将其分组为 令牌流。每个令牌代表字符的逻辑顺序,例如 关键字,标识符,运算符。形成令牌的字符序列称为 莱克美.
- 的 语法分析器 解析从词法分析器获得的令牌并将令牌分组为 层次结构.
- 的 语义分析器 检查任何源代码 语义错误.
- 中间代码生成器 产生 中间代表 源代码
- 的 代码优化器 将中间代码优化为运行速度更快的机器代码。
- 的 代码生成器 最终生成目标代码 可重定位的机器代码或汇编代码.
- 的 符号表 是一个数据结构,其中包含源代码中每个标识符的记录。
- 错误处理程序 检测每个阶段的错误并处理这些错误。
汇编程序的定义
一些编译器执行汇编程序的任务,并直接生成可重定位的机器代码而不是汇编代码,然后将其进一步直接传递给链接程序/ loader。的 汇编器 将编译器生成的汇编代码作为输入,并将其转换为 可重定位机器码.
让我们看看机器代码与汇编代码有何不同。 汇编代码 是个 助记符 机器代码的版本。这意味着它的汇编代码使用名称来表示操作,甚至为存储地址指定名称。另一方面, 机器码 用途 二进制码 用于表示操作和内存地址。
即使是最简单的汇编程序形式也可以执行 两遍 在输入上。的 首过 检测所有 身份标识 在表示存储位置的汇编代码中并将其存储在 符号表 (除了编译器符号表)。的 存储位置已分配 到在第一遍中遇到的标识符。
在里面 第二遍,则将再次扫描输入,这一次 操作码 是 已翻译 变成一个 位序列 在机器代码中表示该操作。第二遍也翻译 身份标识 进入 地址 在符号表中定义。因此,第二遍生成 可重定位机器码.
- 编译器和汇编器之间的主要区别在于 编译器 生成汇编代码,某些编译器也可以直接生成可执行代码,而 汇编器 生成可重定位的机器代码。
- 编译器将输入 预处理代码 由预处理程序生成。另一方面,汇编器需要 汇编代码 作为输入。
- 编译分两个阶段进行: 分析阶段 和 合成阶段。在分析阶段,输入经过 词法分析器,语法分析器,语义分析器 而综合分析则通过 中间代码生成器,代码优化器,代码生成器。另一方面,汇编器将输入通过 两个阶段。第一阶段检测标识符,并在第二阶段将地址分配给它们,将汇编代码转换为二进制代码。
- 编译器生成的汇编代码是 助记符版本 机器代码。但是,汇编器生成的可重定位机器代码是 二进制可重定位代码.
结论:
由于某些编译器直接生成可执行代码,因此可能不需要汇编器。如果使用汇编器,则需要链接器将所有内置库链接到源代码中使用的库函数。