2015-03-31 29 views
4

我有点困惑组装。像GCC这样的编译器有什么样的组合,以及它如何确定要生成的组件?这些类型的装配有多大不同,这是一个巨大的差异,还是不明显?今天有多少类型的装配被广泛使用?装配什么目标

+1

汇编语言几乎是CPU的“原生”的语言,而每个CPU类型有其自己的汇编语言。像GCC这样的高级编译器有很多代码生成器来为所有不同的支持CPU架构生成代码。如何GCC知道选择哪个目标?因为在构建编译器时有人设置了*主机*(这是您正在构建的系统)和*目标*(这是目标系统的代码将生成的目标主机和目标可以是相同的) – 2015-03-31 09:35:38

+0

因此,所有的现代Intel处理器,难道他们改变自己的语言的事情经常或很少呢,是为什么一些二进制文件有什么-I386等前缀,是那种处理器集/类型/事,它支持? – 2015-03-31 09:36:31

+1

的组装主流处理器的英特尔范围一直只是因为[8086](http://en.wikipedia.org/wiki/Intel_8086),还有刚刚被添加。还要注意的是对现代英特尔处理器的更多说明,装配相同语言实际上并不是一个一对一映射到CPU内核像以前一样执行的实际指令。相反,内核将汇编指令翻译为其实际的本地指令集。 – 2015-03-31 09:40:40

回答

4

像GCC目标这样的编译器是什么类型的程序集,它是如何找出需要生成什么程序集的?

每个CPU家族(架构)具有不同的组装和GCC是建立支持许多CPU的家庭。您可以将参数传递给GCC以指示您想要的目标体系结构(如果您正在编译与您编译的体系结构不同的体系结构,则此参数被称为cross-compiling)。

这些类型的装配有多大的差异,这是一个巨大的差异, 或不明显?

通常每个架构是完全不同的,并与他人完全不兼容。

有多少种组合的今天被广泛使用?

这里列出的太多了,但目前最广泛使用的体系结构是用于移动/嵌入式设备的PC,ARM(以及更小程度的MIPS)的Intel x86和x86-64。更简单和更小的设备可以使用微控制器而不是全功能的CPU。

因此,所有的现代英特尔处理器,他们是否经常或很少更改语言 ?

取决于。通常,制造商试图保持与旧型号的兼容性,尽管他们也可以决定将其打破(即Intel's IA-64体系结构)。

而且是为什么一些二进制文件有什么-I386等前缀,是 的那种处理器集/类型/事它支持?

是的。它被称为“架构”

+0

太棒了!所以当Go说它支持“amd64(a.k.a. x86-64); 6g,6l,6c,6a”时,这意味着什么? amd64是一种类型的程序集,还是很多类别的程序? – 2015-03-31 09:48:26

+2

amd64是x86-64体系结构的另一个名称,因为它是由AMD设计的。它是英特尔x86架构的兼容64位扩展的扩展。我建议你谈论架构,而不是组装,它更正确:) – m0skit0 2015-03-31 09:51:12

+0

好吧! :)谢谢,还有1个哈哈,我怎么知道我在自己的建筑? – 2015-03-31 09:53:00