C 語言
C 語言 是 1972 年由 Dennis Ritchie 在貝爾實驗室,為了精善開發 UNIX 作業系統,改良當時的程式語言 B ,而發展出的程式語言。如今,許多新的程式語言也都直接或間接地受到 C 語言的影響,例如直接由 C 語言 衍生出的有 C++ 、 Objective-C 、 Java 、 C# 等。
伴隨 The C Programming Language 的發表以及 C 程式的高度可移植性, C 語言 受到廣大的歡迎。由於 C 語言 廣泛使用在各種機器上,各式各樣的編譯器也越來越多,美國國家標準局 (ANSI) 為了避免各家編譯器對 C 語言 的差異,組成一個專責規範 C 語言 標準的委員會,並於 1989 年先通過 C89 ,隨著電腦科技的發展以及各方對 C 語言 的需求與建議, 1999 年又通過了 C99 。因此以一個標準規格寫出的 C 語言 程式不論使用哪家編譯器皆能編譯。但是不同的編譯器之間仍然是存在著編譯演算法優劣的差異,導致其最終結果程式碼執行效率產生差別。
C 語言 設計目標是提供一種能以簡易的方式編譯、處理低階記憶體、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。C 語言 也很適合搭配 組合語言 來使用。儘管 C 語言 提供許多低階處理的功能,但仍保持良好跨平台的特性,以一個標準規格寫出的 C 語言 程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱 MCU)以及超級電腦等作業平台。
組合語言(英語:assembly language)是一種用於電腦、微處理器、微控制器,或其他可編程器件的低階語言。在不同的裝置中,組合語言 對應著不同的 機器語言指令集。一種 組合語言 專用於某種電腦系統結構,而不像許多高階語言,可以在不同系統平台之間移植。
使用 組合語言 編寫的原始碼,然後通過相應的組譯程式將它們轉換成可執行的機器碼。這一過程被稱為組譯過程。
C 語言 與 組合語言 的比較:
組合語言是一種表示機器指令的符號語言,是最接近機器碼的一種語言。其主要優點是佔用資源少、程序執行效率可能相對於 C語言 高 (執行效率一說見人見智)。
C語言 是一種結構化的中高階語言。其優點是可讀性相對較低階語言來得高,移植容易,是普遍使用的一種計算機語言。缺點是佔用資源比組合語言多,執行效率可能沒有 組合語言高 (執行效率一說見人見智)。
通常人們會認為低階語言的速度快,但可攜性低;
而中高階語言速度雖然比低階語言慢,但可攜性高。
以市面上的『單晶片』為例,
每種不同廠牌的單晶片都有屬於自己的 組合語言,並且大多不能共用,
但是若使用 C 語言 來開發,則大部分的程式碼幾乎都可以共用。
C 語言 在編譯的過程中會經過組語階段,也就是說 C 語法會先被轉譯成組語語法,再被轉成機器語言;而 組合語言 則是直接轉成 機器語言。
人們使用 C 語言 再透過編譯器轉換出來的組合語言,與人們直接使用 組合語言,其差異為何其實還能進一步思考,其中差異涉及了不同版本 C 語言編譯器的演算法差異、人們編寫組合語言所使用的演算法差異、人們對於機器語言指令集的熟悉程度等等。
組合語言 使用 助憶碼(Mnemonics)來代替和表示特定低階機器語言的操作。特定的組譯目標指令集可能會包括特定的運算元。許多組譯程式可以識別代表位址和常量的標籤(Label)和符號(Symbols),這樣就可以用字元來代表運算元而無需採取寫死的方式。普遍地說,每一種特定的組合語言和其特定的機器語言指令集是一一對應的。
許多組譯程式為程式開發、組譯控制、輔助偵錯提供了額外的支援機制。有的 組合語言 編寫工具經常會提供巨集,它們也被稱為巨組譯器。
組合語言目前通常被應用在底層硬體操作和高度要求程式優化的場合。驅動程式、嵌入式操作系統和實時運行程式都會需要組合語言。
維基百科的 C 語言 條目:https://en.wikipedia.org/wiki/C_(programming_language)
維基百科的 組合語言 條目:https://en.wikipedia.org/wiki/Assembly_language
C 語言 的線上教學:http://www.kaiching.org/2012/10/c-tutorial.html
在 C 語言 當中內嵌組合語言:http://ccckmit.wikidot.com/as:inlinec
C 語言的指標觀念:http://edisonshih.pixnet.net/blog/post/27961535-01
程式語言編年史
程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...

