談一段組合語言往事
先講一段陳年往事,作者於1980年大四下學期修一門微電腦課程,記得當時的微電腦中央處理機為Z80,學校購入價格近10000美金,只能使用組合語言寫程式。
組合語言在江湖上縱橫多年,舉凡個人電腦的BIOS,滑鼠,鍵盤,遙控器,家電和汽車的控制系統等,因為組合語言先天具執行速度最快,占用記憶體最小的優勢,以單晶片為控制中心的程式寫作,多半還是以組合語言寫就。
不過隨著記憶體價格下降,微電腦執行速度加快後,組合語言的優勢不在,許多工程師甚至不再學習組合語言,作為一個花了大半輩子玩組合語言的前浪,作者在此提出自己的一些想法。
組合語言的缺點
組合語言最大的缺點是不好學,光是記得組合語言的指令集就可以把人累死。另外組合語言寫作效率差,用C語言10行可以完成的函式,用組合語言寫來可能要100行。有程式寫作經驗的朋友都知道,替10行指令除錯,和替100行指令除錯,難度不是只有10倍而已。
最後也是最大的缺點,組合語言不具有可移植性,8051的組合語言只能用在8051族系的晶片,反觀C語言則沒有這個限制。
組合語言的不可替代性
雖然組合語言有如此眾多缺點,但因為組合語言先天最貼近電腦硬體,使得組合語言仍有其重要性。舉例來說,工程師拿到了內含中央處理機的新電路板,接上電源後雖然沒有冒煙,但程式到底有沒有正常執行還是無法得知,此時團隊中如果有人會使用組合語言,對硬體的除錯將有很大的幫助。
另外有些程式動作是C語言無法處理的(比如設定堆壘暫存器),此時在程式中加入一些組合語言是適當且必要的。總之,如果是一個處理硬體相關的靭體工程師,學習組合語言將是工程師能力拼圖中最後且重要的一塊。
不要寫組合語言
今天C語言編譯器已發展得很完整,C編譯出來的程式小而且有效率,實在沒有必要花大量的時間去學習編寫組合語言程式,和程式邏輯相關的程式,就交給C語言編譯器。工程師須要的,是嘗試了解組合語言的運作(看懂組合語言),如此即已足夠。
