摘 要 C語言是作為一個程序員來說,必須要掌握也是最基礎的編程語言。在編程語言發(fā)展的歷史長河里,出現(xiàn)了各種各樣的編程語言,他們由不同的人開發(fā)又在不同的領域得到發(fā)展,從而發(fā)展到現(xiàn)今編程語言領域的百花齊放百家爭鳴。作為機器碼之上的匯編語言無疑是每個軟件工程師必須要了解的編程語言。本文簡述了編程語言的發(fā)展史,以及匯編語言和高級編程語言的區(qū)別和聯(lián)系。在對比中對編程語言有更深入的理解。
【關(guān)鍵詞】匯編語言 高級編程語言 歷史 趨勢
1 編程語言的發(fā)展歷程
自從1946年世界上第一臺電子計算機問世,人類和機器的交流方式和語言就成為了軟件工程師和計算機從業(yè)者的主要研究方向,更有效更簡便的編程語言成為了軟件工程師的新寵兒。伴隨著計算機的飛速發(fā)展,計算機的硬件升級速度也越來越快,對編程語言的要求也日益嚴格。在過去的幾十年,編程語言有了長足的發(fā)展,至今已經(jīng)有四代語言問世。大量的編程語言為了滿足不同領域的編程要求和軟件功能,經(jīng)歷了被修改,被取代,被發(fā)展等過程,最終發(fā)展成了現(xiàn)在編程語言的多樣化。盡管人們多次試圖尋找一個能夠適應所有編程環(huán)境的通用語言,但是卻沒有一次成功。程序設計語言正在與現(xiàn)代科技日益飛躍,人類的智慧在日益彰顯。
1.1 機器語言
計算機的硬件作為一種電路元件,它的輸出和輸入只能是有電或者沒電,也就是所說的高電平和低電平,所以計算機傳遞的數(shù)據(jù)是由“0”和“1”組成的二進制數(shù),所以說二進制的語言是計算機語言的本質(zhì)。計算機發(fā)明之初,人們?yōu)榱巳タ刂朴嬎銠C完成自己的任務或者項目,只能去編寫“0”、“1”這樣的二進制數(shù)字串去控制電腦,其實就是控制計算機硬件的高低電平或通路開路,這種語言就是機器語言。直觀上看,機器語言十分晦澀難懂,其中的含義往往要通過查表或者手冊才能理解,使用的時候非常痛苦,尤其當你需要修改已經(jīng)完成的程序時,這種看起來無序的機器語言會讓你無從下手,也很難找到程序的錯誤。而且,不同計算機的運行環(huán)境不同,指令方式操作方式也不盡相同,所以這種機器語言就有了特定性,只能在特定的計算機上執(zhí)行,而一旦換了機器就需要重新編程,這極大的降低了程序的使用和推廣效率。但由于機器語言具有特定性,完美適配特定型號的計算機,故而運行效率遠遠高過其他語言。機器語言,也就是初代的編程語言。
1.2 匯編語言
通過我對機器語言的介紹,不難看出機器語言作為一種編程語言,靈活性較差可閱讀性也很差,為了減輕機器語言帶給軟件工程師的不適應,人們對機器語言進行了升級和改進:用一些容易理解和記憶的字母,字段來代替一個具體的操作,比如:用“ADD”代表數(shù)字運算中的加法運算,“MOV”代表數(shù)據(jù)傳遞等等,通過這種方法,人們很容易去閱讀已經(jīng)完成的程序或者理解程序正在執(zhí)行的功能,對現(xiàn)有程序的bug修復以及運營維護都變得更加簡單方便,這種語言就是我們所說的匯編語言,即第二代計算機語言。但是這時候,計算機的硬件還是那些硬件,所以計算機還是不認識那些字母符號,這時候就需要一個專門的程序把這些字符變成計算機能夠識別的二進制數(shù)。因為匯編語言只是將機器語言做了簡單編譯,所以并沒有根本上解決機器語言的特定性,所以匯編語言和機器自身的編程環(huán)境息息相關(guān),推廣和移植很難,但是還是保持了機器語言優(yōu)秀的執(zhí)行效率,因為他的可閱讀性和簡便性,匯編語言到現(xiàn)在依然是常用的編程語言之一。
1.3 高級語言
在編程語言經(jīng)歷了機器語言,匯編語言等更新之后,人們發(fā)現(xiàn)了限制程序推廣的關(guān)鍵因素——程序的可移植性。需要設計一個能夠不依賴于計算機硬件,能夠在不同機器上運行的程序。這樣可以免去很多編程的重復過程,提高效率,同時這種語言又要接近于數(shù)學語言或人的自然語言。在計算機還很稀缺的50年代,誕生了第一個高級編程語言。當時計算機的造價不菲,但是每天的計算量有有限,如何有效的利用計算機有限的計算能力成為了當時人們面對的問題。同時,因為資源的稀缺,計算機的運行效率也成為了那個年代工程師追尋的目標。為了更高效的使用計算機,人們設計出了高級編程語言,來滿足人們對于高效簡的編程語言的追求。用高級編程語言編寫的程序需要經(jīng)過翻譯,翻譯成機器所能識別的二進制數(shù)才能由計算機去執(zhí)行。雖然,高級編程語言編寫的程序需要一些時間去翻譯代碼,從而降低了計算機的執(zhí)行效率,但是實踐證明,高級編程語言為工程師帶來的便利遠遠大于降低的執(zhí)行效率。經(jīng)過各軟件工程師和專家的不懈努力,1954年,第一個完全意義的高級編程語言—FORTRAN問世了,他完全脫離了特定機器的局限性,是第一個通用性的編程語言。從第一個編程語言問世到現(xiàn)今,共有幾百種高級編程語言出現(xiàn),很多語言成為了編程語言發(fā)展道路上的里程碑,影響很大。比如:FORTRAN、BASIC、JAVA、C、C++、python等。高級編程語言也從早期的控制信號變成了現(xiàn)在的有結(jié)構(gòu)有格式的程序編寫工具,C++等語言的出現(xiàn)更是開啟了面向?qū)ο缶幊陶Z言的新章。同時伴隨著軟件編寫效率的提高,軟件開發(fā)也逐漸變成了有規(guī)模、有產(chǎn)業(yè)的商業(yè)項目。
2 高級編程語言、匯編語言和機器語言的區(qū)別
根據(jù)上面的簡單介紹,我們可以說作為編程語言的一種劃分,高級編程語言和低級語言構(gòu)成了一般意義上的計算機語言。而高級編程語言又是和匯編語言對比而言。高級編程語言作為一種通用的編程語言,它的語言結(jié)構(gòu)和計算機本身的硬件以及指令系統(tǒng)無關(guān),它的可閱讀性更強,能夠方便的表達程序的功能,更好的描述使用的算法。同時,它更容易被初學者所掌握,很容易學習。而且容易學習掌握。但是高級編程語言因為是一種編譯語言,所以他的運行速度比匯編程序要低,同時因為高級語言比較冗長,所以代碼的執(zhí)行速度也要慢一些。所以說匯編語言更適合編寫一些需要高效率運行的程序或者對程序代碼的長度又要求的程序,同時在直接控制硬件方面也能夠起到很好的作用。
高級編程語言,作為用戶層面的編程工具,用戶并不需要去了解硬件的結(jié)構(gòu),而是去用邏輯的語言去實現(xiàn)想要的目標,但是因為高級編程語言的架構(gòu)高于匯編,所以不能編寫直接訪問硬件資源的系統(tǒng)程序,因次,高級編程語言必須要調(diào)用匯編語言編寫的程序來訪問硬件地址。
機器語言(machine language)就是一種指令集了,它是一串數(shù)據(jù)代碼,也可以叫做機器碼。他能夠由硬件直接讀取,同時硬件返回的數(shù)據(jù)也是這種二進制代碼。機器語言是作為直接控制硬件的橋梁,連接這軟件和硬件兩個不同領域的技術(shù)。它是計算機的設計者通過計算機的硬件結(jié)構(gòu)賦予計算機的操作功能。機器語言執(zhí)行速度是上述語言中最快的,而且無需編譯直接執(zhí)行。用機器語言編寫程序,編程人員不僅要對所有二進制數(shù)字所指代的指令爛熟于心,而且還要手動為程序分配存儲空間以及輸入和輸出。所以這是一個十分復雜的過程,即使編寫簡單程序也好耗費大量的人力。而且不論是代碼還是輸出,全是“0”和“1”的數(shù)字串,在后期的閱讀和維護也會非常困難,所以機器語言已經(jīng)慢慢的退出了主流編程語言的領域。
3 匯編語言和高級編程語言的優(yōu)缺點
3.1 匯編語言的優(yōu)缺點
匯編語言作為機器語言之上的第二代編程語言,它也有很多優(yōu)點:
(1)可以輕松的讀取存儲器狀態(tài)以及硬件I/O接口情況
(2)編寫的代碼因為少了很多編譯的環(huán)節(jié),可以準確的被執(zhí)行
(3)作為一種低級語言,可擴展性很高
缺點:
(1)因為代碼非常單調(diào),特殊指令字符很少,所以造成了代碼的冗長以及編寫的困難
(2)因為匯編仍然需要自己去調(diào)用存儲器存儲數(shù)據(jù),很容易出現(xiàn)BUG而且調(diào)試起來也不容易
(3)就算完成了一個程序,后期維護時候也需要耗費大量的時間。
(4)因為機器的特殊性造成了代碼兼容性差的缺陷。
3.2 高級編程語言的優(yōu)點
因為高級編程語言很多,我們就拿C語言展開論述。C語言是一個面向過程的語言,用戶根據(jù)自己的需求來調(diào)用函數(shù)或創(chuàng)建目標。因為明確的目標性以及理解容易,一個新手很容易去學習C語言。同時C語言因為發(fā)展的歷史,擁有很多函數(shù)庫,用戶可以根據(jù)自身的需求在代碼中加入頭文件來調(diào)用這些函數(shù)來實現(xiàn)自己的功能,當然使用者也可以根據(jù)自己的喜好編寫函數(shù)在后續(xù)的代碼中調(diào)用,關(guān)鍵字像if,else,return,main,end等這些簡單易懂的單詞也使得C語言記憶和理解起來更加容易。作為一個通用性很高的編程語言,C語言的可移植性是它出色的優(yōu)點之一,你可以在任意一臺電腦、一個設備上運行程序而不需要重新編譯。
4 對未來編程語言的展望
通過上面的介紹,我們不難發(fā)現(xiàn)面向?qū)ο笏枷朐诰幊淘O計中占有很重要的地位,同時現(xiàn)在編程語言的多元化也告訴我們,未來的語言發(fā)展不會是一枝獨秀,也不會是單純的語言發(fā)展,而是以完全面向?qū)ο蟮淖藨B(tài)展現(xiàn)在我們的現(xiàn)實世界。它將更容易被工程師學習和使用,人們完全可以通過簡單的操作來完成復雜的編程。這就得出了未來語言發(fā)展的第一個趨勢--面向?qū)ο螅捎嬎銠C來提供現(xiàn)有的函數(shù)功能、封裝結(jié)構(gòu)。而工程師只需要去拿現(xiàn)成的函數(shù)來調(diào)用,大大提高了代碼的利用率。同時簡單性也成為未來追求的目標,如果一個有簡單計算機知識的人只需學習一些基本的操作就能編寫適合于各種情況的應用程序,這樣創(chuàng)造和編寫的成本將會大大降低。在互聯(lián)網(wǎng)高速發(fā)展的今天,安全也將成為了代碼編寫中必不可少的因素,一個更安全更具有保密性的語言也是未來的需求。綜上在這樣一個“百花齊放,百家爭鳴”的編程語言環(huán)境,只有能真正給使用者帶來便利的語言才會走的更遠走的更好。
參考文獻
[1]張祎蕊.C++教學方法及學習方法的調(diào)研與分析[J].計算機教育,2012(23).
[2]王文東,李竹林,尚建人.匯編語言與C語言的混合程序設計技術(shù)[J].計算機發(fā)展,2015.
[3]路士兵.淺談計算機匯編語言的特點和學習方法[J].科技創(chuàng)新導報,2014(20).
[4]曲瑞超.學習匯編語言的重要性[J].赤峰學院學報(自然科學版),2011.
作者簡介
陳雨昕(2000-),女,浙江省嘉興市。就讀嘉興市第一中學。
作者單位
嘉興市第一中學 浙江省嘉興市 314001