【发布时间】:2023-09-15 19:31:01
【问题描述】:
好吧,通过计算机指令/程序的基本功能,我了解到我们用高级语言编写源代码。编译器将其转换为低级语言(机器代码/目标代码)。我还了解到,Assembler 将汇编语言转换为机器代码/目标代码。
然后我有以下疑问:
如果编译器直接将高级转换为低级,则从哪里生成此汇编语言。
如果转换过程必须通过汇编语言,即
高级语言 ====> 汇编语言 ====> 目标代码/机器码,
那么谁把这种高级语言转换成汇编语言,有什么用呢?强>
【问题讨论】:
-
一般来说,没有人。高级编译器不会将源代码转换为汇编语言。相反,他们直接将其转换为目标代码/机器代码。汇编语言是对象/机器代码的人类可读版本,专为程序员设计。 (但是,正如其他答案所暗示的那样,几乎总是可以向编译器询问高级语言,以便为您提供它生成的对象/机器代码的汇编代码列表,这就是混乱开始的地方发生)。
-
@CodyGray:gcc 使用非常广泛,并且确实将 asm 编写为编译器的文本输出并在其上运行汇编程序,作为运行单独可执行文件的单独进程。 (tmp 文件或管道)。
binutils甚至是一个独立于 gcc 本身的包。所以一些编译器肯定会以这种方式编译。 Clang 不会,其他不太便携的编译器也经常直接使用机器代码。 -
您可以将汇编语言视为表示机器语言的一种方式。编译器不需要在汇编语言站停下来,
标签: assembly compilation