1.1 機器語言
既然要講彙編語言就不能不提機器語言了,機器代碼是由0和1組成的指令序列,計算機可以直接執行機器代碼,是以用機器語言編寫的程式執行速度快,既然這樣,那為什麼現在的程式員基本上不用機器語語言編寫程式呢?下面舉一個用機器語言編寫的程式,大家就應該很容易明白了,下面這段代碼是一個用機器語言寫的程式的一部分,是在我的HP機器上寫的:
1011001010100101001101001010010010
0110010010100100101001010101010001
0010100110100000111001010101010100
現在問大家:這段代碼的功能是什麼?相信大家都看不懂吧,此外若不小心把程式寫成了下面這個程式,請你找出這個錯誤:
1011001010100101001101001010010010
0110010010100100101101010101010001
0010100110100000111001010101010100
你是不是有種欲哭無淚的感覺呢?這還隻是一個非常小的代碼段,這就如此麻煩了,要是來個上萬甚至幾十萬行的機器代碼,那還不得把人得弄死,這就暴露了機器語言晦澀難懂,難以修改維護的缺點。
此外,我前面特意強調了是在HP機器上編寫的代碼,這不是在為HP打廣告。之是以強調這個是因為如果我現在把這個程式放到另外一台mac或者其它的電腦上,這段程式就不能運作了。程式員編寫的程式是為大家服務的,對于完成同一功能的程式,總不能針對每一台電腦都編寫一個版本吧。機器語言的第二個缺點就凸顯出來了:可移植性差。
看看,機器語言有這麼嚴重的缺陷,我看隻有傻子才會用它編寫程式吧,這就是機器語言幾乎銷聲匿迹的原因了。
1.2 彙編語言
既然機器語言那麼晦澀難懂,程式員在編寫程式的時候需要記憶大量的機器指令且容易記錯,給整個軟體的行業的發展帶來了障礙,但是人類的智慧是無限的,人們發明了彙編語言,彙編指令是機器指令的助記符,每一條彙編指令都有與之一一對應的機器指令,對于程式員來說這是個很大的福音,他們不需要再記那些枯燥的01序列了。
彙編語言的出現确實在很大程度上解放了程式員,但是我們需要知道的是,計算機隻認識01序列,即機器指令,并不認識我們所寫的彙編指令,要讓計算機能夠執行我們所寫的彙程式設計式,必需存在一個“翻譯”,能夠将我們的彙程式設計式翻譯為計算機能識别執行的機器碼,這個翻譯就是“編譯器”。當然,在由彙編代碼à機器碼的轉換過程中,并不僅僅隻是編譯器的功勞,還牽涉到連結器等等。下圖是将彙程式設計式轉換為可執行機器碼的過程;這是一個極其複雜的過程,不在本文的讨論範圍内,有興趣的同學可以查閱相關資料。
