大多數情況下Linux程序員不需要使用匯編語言,因為即便是硬件驅動這樣的底層程序在Linux操作系統中也可以用完全用C語言來實現,再加上GCC這壹優秀的編譯器目前已經能夠對最終生成的代碼進行很好的優化,的確有足夠的理由讓我們可以暫時將匯編語言拋在壹邊了。但實際情況是Linux程序員有時還是需要使用匯編,或者不得不使用匯編,理由很簡單:精簡、高效和libc無關性。假設要移植Linux到某壹特定的嵌入式硬件環境下,首先必然面臨如何減少系統大小、提高執行效率等問題,此時或許只有匯編語言能幫上忙了。
優點與缺點
優點
匯編語言直接同計算機的底層軟件甚至硬件進行交互,它具有如下壹些優點:
(1)能夠直接訪問與硬件相關的存儲器或I/O端口;
(2)能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制;
(3)能夠對關鍵代碼進行更準確的控制,避免因線程***同訪問或者硬件設備***享引起的死鎖;
(4)能夠根據特定的應用對代碼做最佳的優化,提高運行速度;
(5)能夠最大限度地發揮硬件的功能。
缺點
同時還應該認識到,匯編語言是壹種層次非常低的語言,它僅僅高於直接手工編寫二進制的機器指令碼,因此不可避免地存在壹些缺點:
(1)編寫的代碼非常難懂,不好維護;
(2)很容易產生bug,難於調試;
(3)只能針對特定的體系結構和處理器進行優化;
(4)開發效率很低,時間長且單調。
特點
匯編語言比機器語言易於讀寫、調試和修改,同時具有機器語言全部優點。但在編寫復雜程序時,相對高級語言代碼量較大,而且匯編語言依賴於具體的處理器體系結構,不能通用,因此不能直接在不同處理器體系結構之間移植。
匯編語言的特點:
1.面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。
2.保持了機器語言的優點,具有直接和簡捷的特點。
3.可有效地訪問、控制計算機的各種硬件設備,如磁盤、存儲器、CPU、I/O端口等。
4.目標代碼簡短,占用內存少,執行速度快,是高效的程序設計語言。
5.經常與高級語言配合使用,應用十分廣泛。
對於不同型號的計算機,有著不同的結構的匯編語言
匯編語言由於采用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在壹定程度上簡化了編程過程。匯編語言的特點是用符號代替了機器指令代碼,而且助記符與指令代碼壹壹對應,基本保留了機器語言的靈活性。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。
匯編語言是面向具體機型的,它離不開具體計算機的指令系統,因此,對於不同型號的計算機,有著不同的結構的匯編語言,而且,對於同壹問題所編制的匯編語言程序在不同種類的計算機間是互不相通的。
匯編語言中由於使用了助記符號,用匯編語言編制的程序輸入計算機,計算機不能象用機器語言編寫的程序壹樣直接識別和執行,必須通過預先放入計算機的"匯編程序"中進行加工和翻譯,才能變成能夠被計算機直接識別和處理的二進制代碼程序。用匯編語言等非機器語言書寫好的符號程序稱為源程序,運行時匯編程序要將源程序翻譯成目標程序。目標程序是機器語言程序,當它被安置在內存的預定位置上,就能被計算機的CPU處理和執行。
匯編語言像機器指令壹樣,是硬件操作的控制信息,因而仍然是面向機器的語言,使用起來還是比較繁瑣費時,通用性也差。但是,匯編語言用來編制系統軟件和過程控制軟件,其目標程序占用內存空間少,運行速度快,有著高級語言不可替代的用途。
應用
匯編語言作為最基本的編程語言之壹,匯編語言雖然應用的範圍不算很廣,但重要性卻勿庸置疑,因為它能夠完成許多其它語言所無法完成的功能。就拿Linux內核來講,雖然絕大部分代碼是用
C語言編寫的,但仍然不可避免地在某些關鍵地方使用了匯編代碼,其中主要是在Linux的啟動部分。由於這部分代碼與硬件的關系非常密切,即使是C語言也會有些力不從心,而匯編語言則能夠很好揚長避短,最大限度地發揮硬件的性能。
1.70%以上的系統軟件是用匯編語言編寫的。
2.某些快速處理、位處理、訪問硬件設備等高效程序是用匯編語言編寫的。
3.某些高級繪圖程序、視頻遊戲程序是用匯編語言編寫的。
匯編語言是理解整個計算機系統的最佳起點和最有效途徑,人們經常認為匯編語言的應用範圍很小,而忽視它的重要性。其實匯編語言對每壹個希望學習計算機科學與技術的人來說都是非常重要的,是不能不學習的語言。所有可編程計算機都向人們提供機器指令,通過機器指令人們能夠使用機器的邏輯功能。所有程序,不論用何種語言編制,都必須轉成機器指令,運用機器的邏輯功能,其功能才能得以實現。機器的邏輯功能,軟件系統功能構築其上,硬件系統功能運行於下。匯編語言直接描述機器指令,比機器指令容易記憶和理解。通過學習和使用匯編語言,能夠感知、體會、理解機器的邏輯功能,向上為理解各種軟件系統的原理,打下技術理論基礎;向下為掌握硬件系統的原理,打下實踐應用基礎。學習匯編語言,向上可以理解軟件,向下能夠感知硬件,是我們理解整個計算機系統的最佳起點。