2013-08-01 116 views
2

I've read編譯器如何知道我的CPU的指令集?

編譯器轉換寫在人類可讀編程語言代碼到由你的處理器所理解的 機器代碼表示。

編譯器如何知道我的CPU的指令集?

任何有關了解彙編程序,鏈接程序和加載程序工作的參考資料都將有所幫助。

+2

指令集被硬編碼到編譯器的某處。 – 2013-08-01 04:35:45

+0

@ H2CO3:我不這麼認爲,市場上有1000多個CPU。 – 2013-08-01 04:36:53

+0

@NishithJainMR您當然還沒有聽說過模塊化編譯器,對嗎?代碼生成器(後端)必須在某個時刻擁有一個巨大的哈希(或左右)表,並將紅外映射到實際的CPU指令。 – 2013-08-01 04:37:41

回答

4

本質上,硬件/軟件的每個組合都需要自己的編譯器。因此,儘管您可能編寫C代碼以便在Windows機器上編譯和運行,但與Apple計算機的C編譯器相比,您仍然需要一個與其不同的編譯器。

只是爲了引起爭論,有些編譯器會生成與正在運行的硬件不同的硬件代碼。一個簡單的例子是Arduino的產品。 Arduino IDE運行在Windows(和其他)機器上,但是代碼是針對Arduino板上的Atmel微處理器編譯的。此外,每種電路板樣式(UNO等)都有Atmel mico處理器的不同風格,這就是爲什麼在IDE中必須確定草圖的目標,以便編譯器可以進行必要的調整以運行特定硬件(指令集)。

這個想法也適用於彙編器和連接器(可能會少一些)。

5

編譯器如何知道我的CPU的指令集?

大多數編譯器只知道如何爲特定的CPU(或其中一小部分)發出代碼。每個目標CPU都要求有人爲它編寫後端編譯器,而這個任務並不重要。

GCC支持各種各樣的目標,但即使是GCC也只能爲少數目標發射代碼。換句話說,您可以構建GCC以發出x86_64i*86處理器的代碼,並且您可以構建另一個副本以發出PowerPC的代碼,但是不能構建將爲這三個代碼生成代碼的單個GCC。

任何參考瞭解彙編器,鏈接器和加載的工作

谷歌搜索上述條款使我here

相關問題