彙編語言
彙編語言是面向機器的程式設計語言。在彙編語言中,用助記符(memoni)代替機器指令的操作碼,用地址符號(symbol)或標號(label)代替指令或運算元的地址,如此就增強了程式的可讀性並且降低了編寫難度,像這樣符號化的程式設計語言就是彙編語言,因此也稱為符號語言。使用彙編語言編寫的程式,計算機不能直接識別,還要由彙編程式轉換成機器指令。彙編程式將符號化的操作代碼組裝成處理器可以識別的機器指令,這個組裝的過程稱為組合或者彙編。彙編語言是低級語言。
彙編是把彙編語言書寫的程式翻譯成與之等價的機器語言程式。彙編程式輸入的是用彙編語言書寫的源程式,輸出的是用機器語言表示的目標程式。彙編語言是為特定計算機或計算機系列設計的一種面向機器的語言,由彙編執行指令和彙編偽指令組成。採用彙編語言編寫程式雖不如高級程式設計語言簡便、直觀,但是彙編得到的目標程式占用記憶體較少,運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程式,或編寫需要耗費大量運行時間和實時性要求較高的程式段。彙編程式包括簡單彙編程式、模組彙編程式、條件彙編程式、宏彙編程式和高級彙編程式。
彙編程式的工作過程如下:首先輸入彙編語言源程式。其次,檢查語法的正確性,如果正確,則將源程式翻譯成等價的二進制或浮動二進制的機器語言程式,並根據用戶的需要輸出源程式和目標程式的對照清單;如果語法有錯,則輸出錯誤信息,指明錯誤的部位、類型和編號。最後,對已彙編出的目標程式進行善後處理。
彙編語言是直接面向處理器( processor)的程式設計語言。處理器是在指令的控制下工作的,處理器可以識別的每一條指令稱為機器指令。每一種處理器都有自己可以識別的一整套指令,稱為指令集。處理器執行指令時,根據不同的指令採取不同,的動作,完成不同的功能,既可以改變自己內部的工作狀態,也能控制其他外圍電路的工作狀態。
人類最容易接受自己每天都使用的自然語言。為了使機器指令的書寫和理解變得容易,需要借鑑自然語言的優點,為此就引入了彙編語言。彙編語言使用符號來代表不同的機器指令,而這些符號非常接近於自然語言的要素。基本上,彙編語言裡的每一條指令都對應著處理器的一條機器指令。
彙編語言包括兩個部分:語法部分和編譯器。語法部分提供與機器指令相對應的助記符,方便指令的書寫和閱讀。當然,彙編語言的符號可以被人類接受,但不能被處理器識別,為此,還要由彙編語言編譯器將這些助記符轉換成機器指令。
根據套用領域的不同,處理器的種類繁多,比如用於工業控制和嵌入式計算的Z80、MC68000和MCS-51.廣泛套用於個人計算機的Intel x86系列,以及基於ARM體系結構的處理器,包括蘋果公司在內的大企業都是ARM的客戶。事實上,今天的ARM是最受歡迎的32位嵌入式處理器,而且,今天的ARM處理器比Intel奔騰系列賣得還多,基本上是3:1的比例。
不同的處理器有不同的指令集。正是因為這個原因,每一種處理器都會有自己專屬的彙編語言語法規則和編譯器。即使是同一種類型的處理器,也可能擁有不同的彙編語言編譯器。一個明顯的例子是Intel x86系列的處理器,圍繞它就開發出好多種編譯器來,如MASM、NASM、FASM、TASM和AT&T等,而且每一種編譯器都使用不同的語法。
彙編程式
彙編程式按其功能和結構可分為簡單彙編程式、模組彙編程式、條件彙編程式、宏彙編程式和高級彙編程式等。
(1)簡單彙編程式。其特點是經過翻譯後的機器語言目標程式的地址是絕對的,可直接放在記憶體中執行,也稱為“裝入並執行”式彙編程式。這種工作方式在記憶體空間組織上受到很大限制。
(2)模組彙編程式。可提供設計、編碼和調試不同程式模組的能力,每個彙編後的程式模組稱為目標模組,它們的地址是相對的,可用連線裝配程式把多個目標模組組成一個可執行的程式。
(3)條件彙編程式。具有選擇彙編某些程式段的功能。這種彙編程式通常具有“條件轉移”等偽指令,以便用戶編寫選擇條件。
(4)宏彙編程式。具有宏加工功能的彙編程式。可以用它定義含參數的程式段,在使用的位置上調用它們.彙編時將進行宏(指令)展開,把宏定義所預先定義的指令目標代碼插在該位置上。
(5)高級彙編程式。具有控制結構(如條件語句、循環語句以至含有函式和過程等)的彙編程式。它能在保持目標程式質量高的同時.吸收高級語言的優點,提高可讀性。
彙編語言優缺點
優點
(1)因為用彙編語言設計的程式最終被轉換成機器指令,故能夠保持機器語言的一致性以及直接、簡捷的特點,並能像機器指令一樣訪問和控制計算機的各種硬體設備,如磁碟、存儲器、CPU和I/O連線埠等。使用彙編語言,可以訪問所有能夠被訪問的軟硬體資源。
(2)彙編語言目標代碼簡短,占用記憶體少,執行速度快,是高效的程式設計語言,經常與高級語言配合使用,以改善程式的執行速度和效率,彌補高級語言在硬體控制方面的不足,套用十分廣泛。
缺點
(1)彙編語言是面向機器的,處於整個計算機語言層次結構的底層,故被視為一種低級語言,通常是為特定的計算機或系列計算機專門設計的。不同的處理器有不同的彙編語言語法和編譯器,編譯的程式無法在不同的處理器上執行,缺乏可移植性。
(2)難於從彙編語言代碼上理解程式設計意圖,可維護性差,即使是完成簡單的工作也需要大量的彙編語言代碼,很容易產生錯誤,難於調試。
(3)使用彙編語言必須對某種處理器非常了解,而且只能針對特定的體系結構和處理器進行最佳化,開發效率很低,周期長且單調。
歷史上,彙編語言曾經是非常流行的程式設計語言之一。隨著軟體規模的增長,以及隨之而來的對軟體開發進度和效率的要求,高級語言逐漸取代了彙編語言。但即便如此,高級語言也不可能完全替代彙編語言的作用。就拿Linux核心來講,雖然絕大部分代碼是用C語言編寫的,但仍然不可避免地在某些關鍵地方使用了彙編代碼。由於這部分代碼與硬體的關係非常密切,即使是C語言也會顯得力不從心,而彙編語言則能夠很好地揚長避短,最大限度地發揮硬體的性能。
首先,彙編語言的大部分語句直接對應著機器指令,執行速度快,效率高,代碼體積小,在那些存儲器容量有限,但需要快速和實時回響的場合比較有用,比如儀器儀表和工業控制設備中。其次,在系統程式的核心部分,以及與系統硬體頻繁打交道的部分,可以使用彙編語言。比如作業系統的核心程式段、I/O接口電路的初始化程式、外部設備的低層驅動程式,以及頻繁調用的子程式、動態連線庫、某些高級繪圖程式和視頻遊戲程式等。再次,彙編語言可以用於軟體的加密和解密、計算機病毒的分析和防治,以及程式的調試和錯誤分析等各個方面。最後,通過學習彙編語言,能夠加深對計算機原理和作業系統等課程的理解,能夠感知、體會和理解機器的邏輯功能,為理解各種軟體系統的原理打下技術理論基礎,也為掌握硬體系統的原理打下實踐套用基礎。
彙編語言的特點
(1)機器相關性。這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的彙編語言。使用彙編語言能面向機器並較好地發揮機器的特性,得到質量較高的程式。
(2)高速度和高效率。彙編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU和I/O連線埠等,且占用記憶體少,執行速度快,是高效的程式設計語言。
(3)編寫和調試的複雜性。由於是直接控制硬體,且簡單的任務也需要很多彙編語言語句,因此在進行程式設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟硬體資源。這樣,就不可避免地加重了程式設計師的負擔。與此相同,在程式調試時,一旦程式的運行出了問題,就很難發現。