gpt4 book ai didi

assembly - C 编译器是否编译为泛型程序集?

转载 作者:行者123 更新时间:2023-12-04 03:36:22 25 4
gpt4 key购买 nike

我在计算机组织课上,我们正在用汇编编程。但是,由于这是一个类,因此我对任何事物或任何实际用途都没有更广泛的了解。我们使用 Altera 的 Nios II 汇编语言。教授没有告诉我们当前生产中使用了哪些汇编语言,语义是什么,或者 C 代码如何编译为所有汇编语言。

在这个简短的介绍之后,我假设 C 代码编译成几种汇编语言是否正确?如果是这样,它对所有这些汇编语言有什么作用 - 将其解析为通用汇编语言,然后从那里进行翻译?还是每种不同的汇编语言都有一个单独的过程?

最佳答案

不需要将 C 编译为任何特定程序集或任何程序集,这些由编译器的实现者决定,而不是语言规范的一部分。通常,每个 CPU 制造商都会开发 C 编译器来针对其特定架构。

不过,还有更多通用编译器,如 GCC 和 Clang,它们可以针对许多不同的指令集。

以 Clang 为例,它基于 Low Level Virtual Machine ,这是一个具有“中间表示”语言LLVM IR的抽象机器。为 LLVM 可以针对的每种架构编写一个后端,用于将 LLVM IR 转换为指令集,然后任何编译为 LLVM IR 的编译器都可以针对 LLVM 支持的 CPU。

编译器将根据您传递给它的参数决定在运行时以哪个后端为目标。编译器通常有一个默认后端,它是在构建编译器本身时通过配置设置的(这可能会默认为您构建编译器的架构)。

GCC 可能使用类似的方法和一些中间表示,但我不确定细节。还有一个 GCC 后端也可以针对 LLVM。

关于assembly - C 编译器是否编译为泛型程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com