匯編語言是計算機提供給用戶的執(zhí)行效率極高、功能極強的一種程序設計語言,它能夠直接控制計算機硬件,并最大限度地發(fā)揮硬件的能力。對程序的執(zhí)行時間和占用空間要求很高的場合,須使用匯編語言才能滿足要求。匯編語言還可以與高級語言混合編程,但由于編寫和調(diào)試匯編語言程序要比高級語言復雜,因此其應用不如高級語言廣泛。
計算機語言分為機器語言、匯編語言和高級語言。機器語言是計算機能直接識別的語言,它是一種由0和1組成的二進制語言;匯編語言是對機器語言符號化了的語言,與機器指令一一對應,它與機器語言都是一種低級語言;高級語言是一種自然語言,是用語句和函數(shù)表示的語言,符合我們平常的語言表述,容易被人們接受。
匯編語言比機器語言的可讀性要好,但跟高級語言比,可讀性還是較差,且不符合自然語言的表述。但它編寫的程序具有存儲空間占用少、可直接調(diào)用硬件資源、執(zhí)行速度快的特點,這些都是高級語言所無法比擬的。在實際應用中,是否使用匯編語言,取決于具體應用要求、軟件開發(fā)時間和質(zhì)量等方面。
匯編語言是將操作碼和操作數(shù)用約定的符號表示,所以比機器語言容易掌握和運用。又因為要使用到硬件資源,得有一定的硬件知識,所以比高級語言要難掌握。那么在什么場合需要用匯編語言呢?一般來說,有以下幾種場合可以使用:
①程序要具有較快的執(zhí)行時間,或只能占用較小的存儲容量。例如,操作系統(tǒng)的核心程序段,實時控制系統(tǒng)的軟件,智能儀器儀表的控制程序等。
②程序與計算機硬件密切相關(guān),程序要直接、有效地控制硬件。例如,I/O接口電路的初始化程序段,外部設備的低層驅(qū)動程序等。
③大型軟件需要提高性能、優(yōu)化處理的部分。例如,計算機系統(tǒng)頻繁調(diào)用的子程序、動態(tài)連接庫等。
④受存儲容量限制的應用領(lǐng)域,如:家用電器的計算機控制功能等。
另外,匯編語言還有許多實際應用,例如分析具體系統(tǒng)尤其是該系統(tǒng)的低層軟件、加密解密軟件、逆向分析,對有害代碼的分析和防治計算機病毒等等;高級語言編寫程序如果涉及硬件的操作,一般用匯編語言來編寫子程序供高級語言來調(diào)用。
說到這,有的同學可能會問,那么與高級語言相比,匯編語言有什么不同之處呢?具體的講,有以下幾點不同:
①匯編語言與處理器密切相關(guān)。每種處理器都有自己的指令系統(tǒng),相應的匯編語言各不相同。所以,匯編語言程序的通用性、可移植性較差。
②匯編語言功能有限,又涉及寄存器、主存單元等硬件細節(jié),所以編寫程序比較繁瑣,調(diào)試也比較困難。高級語言提供了強大的功能,采用類似自然語言的語法,所以容易被掌握和應用,它不必關(guān)心諸如標志、堆棧等瑣碎問題。
③匯編語言本質(zhì)上就是機器語言,它可以直接、有效地控制計算機硬件,因而容易產(chǎn)生運行速度快、指令序列短小的高效率目標程序。高級語言不易直接控制計算機的各種操作,編譯程序產(chǎn)生的目標程序往往比較龐大、程序難以優(yōu)化,所以運行速度較慢。
可見匯編語言的主要優(yōu)點是可以編寫在“時間”和“空間”兩方面最有效的程序。但它的缺點也是明顯的,它與處理器密切有關(guān),要求程序員比較熟悉計算機硬件系統(tǒng)、考慮許多細節(jié)問題,因此,有時可以采用高級語言和匯編語言混合編程的方法,互相取長補短,更好地解決實際問題。
匯編語言最大的特點就是采用指令語句,也就是用符號語言來代替機器語言,例如用匯編語言書寫的指令:MOV AX,BX和ADD AX,8。前者功能是要求CPU把寄存器BX的值傳送給寄存器AX;而后者是要求把寄存器AX的值和8相加,并把結(jié)果傳送給寄存器AX。是翻譯過程中:匯編程序能把左邊匯編語言源程序翻譯成右邊的機器指令序列。其中,把匯編語言指令“MOV AX,BX”和“ADD AX,8”分別轉(zhuǎn)換成機器指令898DH和050800H,而后者是CPU能直接識別的,也就是機器語言,所以,計算機可以直接執(zhí)行它們。由此可見,匯編語言只是把機器語言逐條指令代碼來表示,這樣做的好處是把難于理解和記憶的二進制語言(機器語言)轉(zhuǎn)化為易于理解和記憶的符號。
另一個特點是它所操作的對象不是具體的數(shù)據(jù),而是寄存器或者存儲器,也就是說它是直接和寄存器和存儲器打交道,這也是為什么匯編語言的執(zhí)行速度要比其它語言快,但同時也使編程更加復雜,因為既然數(shù)據(jù)是存放在寄存器或存儲器中,那必然就存在著尋址方式,如上面的例子,我們就不能像高級語言一樣直接使用數(shù)據(jù),而先要從相應的寄存器AX、BX中把數(shù)據(jù)取出。這增加了復雜性,因為這部分工作是由編譯系統(tǒng)來完成的,而在匯編語言中是由程序員自己來完成的,這無異增加了復雜程度。
再者,匯編語言指令是機器指令的一種符號表示,而不同類型的CPU有不同的機器指令系統(tǒng),就有不同的匯編語言,所以,匯編語言程序與機器有著密切的關(guān)系。所以,除了同系列、不同型號CPU之間的匯編語言程序有一定程度的可移植性之外,其它不同類型(如:小型機和微機等)cPU之間的匯編語言程序是無法移植的,也就是說,匯編語言程序的通用性和可移植性要比高級語言程序低。
很多高級語言如Visual C++和Visual Basic等對實現(xiàn)的細節(jié)進行了封裝,由于封裝的關(guān)系,各種高級語言或多或少就存在著某種“缺陷”,比如,VB不支持指針,很多需要使用指針的API用起來就很不方便,像多線程一類的特征在VB中就無法實現(xiàn);而匯編語言見到的是一個最真實的操作系統(tǒng),可以用最靈活的方式使用各種系統(tǒng)功能。
匯編語言是各種編程語言中與硬件關(guān)系最密切、最直接的一種,在時間和空間的效率上也最高的一種,它是高等院校計算機應用技術(shù)必修的專業(yè)課程之一,對于訓練學生掌握程序設計技術(shù),熟悉上機操作和程序調(diào)試技術(shù)有著重要的作用;并對已有程序的代碼分析和重新開發(fā)有著不可替代的作用。我們可用它作為工具來分析已有的軟件,找出其優(yōu)點,改進其不好的地方,提高其原有系統(tǒng)的性能。
總之,匯編語言在計算機語言發(fā)展過程中扮演了不可替代的角色。計算機專業(yè)的學生,不應僅僅滿足于利用他人的成果來解決實際問題,還應具備有分析、研究原有軟件系統(tǒng),改進、完善、原有系統(tǒng)功能供用戶使用的能力。當前我國的匯編語言人才缺乏,很多大公司、企業(yè)都需要這方面的人才。因此,當大家都在為各種高級語言而不遺余力的時候,我們可以獨辟蹊徑,相信可以闖出一片屬于自己的天地。
(作者單位:棗莊學院)