1. 程式人生 > >組合語言學習體會

組合語言學習體會

在沒有學習組合語言以前,我可能會對彙編這門強大而又難學的程式設計語言產生懷疑,因為現在我們有那麼多的高階程式語言可以學習,尤其是現在日益強大的面嚮物件語言。而且每種語言都要比組合語言學起來容易,而且開發效率更高。那麼我們為什麼還要學習彙編,彙編這門程式設計語言的存在意義在哪。

學習了組合語言之後,我發現我不再懷疑組合語言的強大之處了,組合語言是一種很強的語言,這是我以前不願意承認的事實,它的強大在於效率。因為組合語言要實現的是執行的效率,而不是開發上的效率,這一點可能與現階段的那些所謂的面向物件以及其它的一些開發語言的目標不同。用匯編語言寫的程式,無論是在程式的大小上還是在執行時間上都遠遠優於高階語言,即使這種高階語言可能使大家公認的已經比較底層的C

語言。

組合語言與其它的程式設計語言相比,操作的是更加底層的東西,它可以直接與硬體打交道,而別的語言基本不可能實現這樣的功能。既然是與硬體打交道,那麼我們在寫程式的時候就要更加小心了,可能一不小心就會把程式跑丟了。如果我們不能夠控制程式的正常邏輯,那麼程式執行超出我們的控制範圍以後,到底會執行到哪裡,我們也無從知曉。比如說我們本來是要操作一個使用者記憶體地址空間的資料,但是有時我們會不注意,程式執行到了核心記憶體地址空間去了,那麼這樣的程式肯定要面臨崩潰了。幸好我們現在使用的是虛擬模式下的組合語言程式設計,不用去考慮那麼多的問題,大不了重新啟動一下資源管理器,要不然電腦還不知道會崩潰多少次。

與組合語言相比,高階語言在這方面做的就很不錯了,畢竟我們在寫高階語言程式碼的時候,沒有直接對底層的硬體進行操作,而先與作業系統打交道。至於操作硬體,那是作業系統的事情了,這樣我們可以在一定程度上少犯錯誤,而且與此同時可以減少花在除錯程式上的時間,提高了開發效率。但是這並不代表不會出現問題,用高階語言寫程式,有時也會出現這樣或者那樣的問題。而且出了問題,我們可能更加無所適從,因為我們有時不知道語言內部是如何實現互動的,我們也不可能瞭解每種解決方案的實現細節。組合語言的另一個優勢就是我們必須很清楚我們寫的程式碼是幹什麼的。這是因為這樣,我們寫出來的程式碼沒有太多的無用程式碼,幾乎每一句程式碼都為我們實現了某些實質性的操作。同時由於組合語言直接操作底層硬體,所以不會像高階語言那樣,需要一大堆的程式碼先和作業系統互動,然後作業系統再操作硬體邏輯。高階語言產生的程式之所以非常大且臃腫還有一個原因是它要包含一些程式集之類的東西,可能一個程式集裡面我們只需要某一點,但是在編譯、連線產生應用程式的時候,高階語言卻將一個很大的程式集包含進來(比如說 #include <stdio.h>

),這使得我們的程式與組合語言相比變得很臃腫,而且真正有用的東西並不是很多。學習組合語言我認為還有一個好處就是使我們對於一些底層的東西更加了解和熟悉,知道在程式執行的過程中,作業系統和記憶體裡面到底在發生著些什麼事情,這樣更加有助於我們加深對於程式設計的理解。

通過組合語言的學習,我認為自己學到了很多東西,可能有的時候對於一些記憶體裡發生的事情還不是很清楚。但是即使這樣,現階段學到的這些東西已經很有助於我對於作業系統和組成原理方面的一些內容的理解了。其實學習一門語言,有時感覺一是在學習他的語法上的內容,另一方面可能也是在學習它的一些思想。組合語言對於語法的嚴謹性讓我們在思考問題的時候變得思維變得更加嚴謹、縝密,而不再是僅僅的想象一下就罷了。