2011-10-14 79 views
1

我不能說我完全理解編譯器是如何工作的。而且,我對他們知之甚少。然而,我總是想知道機器怎麼可能理解我們在文檔中寫的代碼。爲什麼代碼在機器上運行?

我知道我們寫它被翻譯成東西(如果你也可以給我一個編輯的一些細節也將是巨大的),然後某些操作的二進制代碼中出現後。

但是電路怎樣才能理解並以0和1進行操作。我在計算機體系結構上有一些形成,我知道晶體管如何工作以及ALU如何工作以及如何實現。我知道內存是如何工作的(或多或少,所以任何進一步的解釋都會很好)以及HDD。

但是,當我試圖想象編譯器如何產生神奇的東西(至少對我來說)完全符合有形機器時,我迷失了方向。

它令我吃驚。我們每天都認爲這是理所當然的,它在概念上非常棒。 合作之間摘要代碼和物理機...驚人。

如果您的答案需要,請不要擔心深入機器的膽量,我覺得它很有趣,也許您可​​以啓發我。你給出的更多細節描述這個過程越好。

回答

0

C,C++,Java和類似的語言被稱爲高高級語言。您用這些語言編寫的所有代碼最終都會被轉換爲處理器可以理解的另一種稱爲程序集的語言。彙編是處理器理解的指令集。例如在一個mips進程中,添加$ 3,$ 2,$ 1可以轉化爲一個32位或64位二進制字符串,在處理器中添加兩個寄存器。

總之,這是發生了什麼:

高級代碼 - > assambly - >二進制字符串 - > CPU

+0

-1用於將機器代碼與彙編語言混合使用 –

1

它不會不懂。它只是盲目地運行你拋出的任何原始代碼。它在過去和不同架構之間究竟發生了什麼變化。

Core2或其他現代x86 CPU的工作原理太複雜,對於SO的答案,但您可以在Agner Fogs Microarchitecture手冊中閱讀關於它的所有內容(以及不低於晶體管級別)。

如果要深究下去,你可以看看實際的實現了在OpenCores.org

0

這個問題應該說「什麼是理解好的資源怎麼可能一臺機器理解代碼我們寫在一份文件中?「在SO線程中解釋太多了。像this這樣的資源是你的朋友,儘管你應該尋找更多的硬件學習資源。

相關問題