本文節選自《琢石成器——Windows環境下32位組合語言程式設計》一書的前言
How——如何學習Win32彙編
以往的彙編書籍往往把重點放在硬體結構和指令上,講述了一大堆電路框圖和指令列表,把大家搞得暈暈乎乎後,再舉出一些重量級的例子,不是一些像數組、矩陣計算一類的複雜運算,就是開始圖形模式畫圖,以至於大家看完以後就再也找不到北了!實際上,這些例子不是太難了,而是太枯燥了。有人說,學彙編就像考大學,千軍萬馬過獨木橋,太多的人中途放棄了,只有少數人堅持到最後。
筆者認為:學習彙編應該在輕鬆的環境下進行,在學習中使用的例子不一定太複雜,但一定要有吸引力。用彙編寫複雜的運算程式固然會比C更有效率,但同樣的事在C中用一個運算式就全部搞定了,從這裡開始學彙編,給人的感覺就像從複雜的公式開始學算術,要知道,加法還沒有學會呢!而對於進階語言封裝起來的系統功能,用彙編解釋起來就非常直接,非常自然,也更容易懂。以筆者自己學彙編的過程來說,那時候是1990年,剛好是中國第一次病毒大流行,大家的電腦上都是那個病毒的開山鼻祖——乒乓病毒,在流行DOS的時期,看著在螢幕上蹦的小球,心中就有一個問題:如何編出這樣一個玩意來呢?要知道DOS是單任務的,而那個球在別的程式啟動並執行時候照樣蹦!這用當時流行的FORTRAN、C等課程中學到的任何知識都無法解釋,因為這些課程中不可能有TSR、中斷、引導區等內容。帶著這樣一個疑問學習彙編,在分析乒乓病毒的過程中啃一條條不懂的指令,病毒分析完了,彙編課也學完了,而且反過來看那些複雜的計算程式都是那麼順理成章,不攻自破了。實際上,從一些實用的系統功能開始學習彙編遠比學矩陣計算容易理解。
正如最經典的C程式就是那個“Hello,World!”一樣,這個程式的有名並不是因為它用高深複雜的語句放倒了一大批人,而是它以最簡單易懂的方式讓人們走入C語言的大門。對於Win32彙編也是如此,從最簡單的例子開始總是沒錯的,筆者建議讀者跟隨本書中從簡到繁的例子,努力做到理解並靈活引用這些例子中的各種功能,正如“熟讀唐詩三百首,不會寫詩也會吟”,最後能夠熟練地使用Win32彙編來解決各種編程需求就是最大的勝利。
另外,正如前面講到的,組合語言的學習必須和作業系統緊密結合。經過簡單的調查,筆者發現很多高校使用的彙編教程還是停留在清華91版《IBM-PC組合語言程式設計》之類的教材上,雖然這些教材中基礎知識部分永遠不會過時,但涉及作業系統的部分還是停留在DOS階段。隨著DOS作業系統的悄然引退,繼續把精力花在上面是一種浪費,因為任何語言都必須有應用的平台,否則課程學完之後會尷尬地發現沒有地方可以應用。筆者認為,在《IBM-PC組合語言程式設計》之類傳統教材中的基礎部分學習完畢以後,重點就應該轉向Win32彙編,以及保護模式方面的知識。
更多精彩資源:
部落格園: http://www.cnblogs.com/broadview/
Web開發專欄 http://blog.csdn.net/broadviewwebdev
嵌入式 http://blog.mcuol.com/Broadview/index.htm
程式設計專欄http://blog.csdn.net/broadviewprograming
資料庫專欄 http://blog.csdn.net/broadviewdatabase
Phpchina: http://www.phpchina.com/home/space.php
Cn-java: http://www.cn-java.com/www1/?564186/
Itpub: http://space.itpub.net/13164110/