2015-03-31 35 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