摘要:本文首先分析了當前匯編語言的教學現狀及實驗環節的重要作用,然后闡述了匯編語言實驗教學的設計思路,給出了較詳細具體的實驗內容安排。
關鍵詞:匯編語言;實驗教學;設計思路;實驗安排
中圖分類號:G642 文獻標識碼:B
1 匯編語言及其教學現狀
匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是唯一能夠利用計算機所有硬件特性并能直接控制硬件的語言。對程序的空間和時間要求很高的場合,匯編語言的應用是必不可少的,至于很多需要直接控制硬件的操作場合則更是非用匯編語言不可。用匯編語言編寫的程序的執行速度通常比高級語言(如C/C++)快很多,甚至成百上千倍。相應的,匯編語言的缺點就是使用者需要對硬件有更深入的了解,編程效率不高。
“匯編語言程序設計”課程的任務是為“計算機組成原理”、“接口”、“操作系統”等后繼課程提供必要的基礎知識,它對訓練學生掌握與硬件相關的程序設計技術、從事自主版權計算機芯片和系統軟件的開發、信息安全、過程控制等方面,均有十分重要的作用。無論計算機技術如何發展,機器語言、匯編語言的計算機程序設計語言體系仍然是計算機技術的基礎,也是計算機技術的重要知識體系之一。不能了解和熟悉匯編語言,不僅將導致學生知識結構的缺乏,也可能導致學生認知水平的降低,開發手段的貧乏。
然而,初學者往往感到它難學、難懂、抽象,更難以掌握。教師開展教學困難,學生學習和掌握困難,教學效果差,以致會影響后繼課程的學習。
2 實驗環節在匯編語言教學中的作用
在計算機相關專業的教學領域,實驗和實訓教學是培養大學生學習能力、實踐能力、思考能力、創新能力的重要環節和有效途徑。顯然,學生在學習匯編語言這門課程中產生的困難,首先來自于他們對所學知識缺乏必要的感性認識,沒有充分的實驗。
計算機在很多方面不同于其他學科,尤其是與硬件有密切關系的課程。由于匯編語言課程具有硬件操作的密切相關性,實驗環節在整個教學活動中就占據了舉足輕重的地位.匯編語言的實驗對培養學生的動手能力和學習興趣,提高學生閱讀、編輯和調試程序的能力,有著不可替代的重要作用。學生通過實驗課深入了解CPU、存儲器、接口及外部設備的工作特性,對數據在計算機中的表達和傳送產生感性認識。在實驗中對匯編語言達到更好的理解、掌握,從感性認識上升到理論認識。
3 實驗教學的設計思路
由于各高校辦學類型不同、培養目標不同、所在地及周邊地區社會需求不同,計算機及其相關專業的教學內容也應有所不同。對于非研究型院校的相關專業,對“匯編語言”的教學可以集中在適度的理論知識和充分的操作實踐上。“適度”體現在理論課的講授中內容不必展開太寬,“充分”體現在實驗課的安排上要充分。
盡管學生學習匯編語言有著不少困難,但“興趣是最好的老師”,要激發學生的學習興趣。有了興趣,他就能積極地思考,大膽地探索,變被動接受為主動思考。因此,匯編語言的實驗教學總的思路就是要以激發學生興趣為主線,盡量設計趣味性的實驗內容,充分發揮學生的積極性和創造性。
很多學生不重視實驗課的主要原因之一是認為實驗課的好壞對學習成績影響不大,目前多數院校的學習成績評定,僅以期末一張考試卷的好壞而定,這使很多學生重理論、輕實驗。因此,應認真記載每個學生在實驗課上的實際操作能力和編程能力,并以優、良、中、差進行仔細考核,開學初就明確告訴學生這種考核制度的存在,使之開始就沒有怠慢的情緒,從思想上重視實驗。
實驗教學的安排按照由淺入深、循序漸進的方式進行,合理選擇實驗內容,盡量避免過多過雜,內容選擇注意舉一反三,即以啟發思維為主,對設計型、綜合型實驗只要能完成預定實驗目標,不苛求實驗過程與步驟的統一。實驗所演算的匯編語言程序應具備好的觀測效果,能直接體現計算機的操作特點,教師演示和學生實踐穿插進行,并且注意重復對比,讓學生發現自己操作的失誤,加深對匯編語言操作規律的理解。
’
實驗教師在實驗中主要起到引導的作用,實驗前的講解以重點、難點和注意事項為主,不應面面俱到,可以先給出一些問題,讓學生帶著問題去做、去觀察、去思考。實驗中,則應以學生為主體,讓每個同學通過操作行為感受計算機的物理過程,教師將理論揉在實例中的具體操作中,學生會感到數據是有形的,CPU的操作是物質化的。經過反復練習,學生不但學到了基礎知識,而且提高了綜合分析和理解能力。實驗中,還要鼓勵學生自己修改實驗,有時學生對自己編的程序沒有把握,一旦上機實驗后就清楚了。他在計算機上修改程序,觀察修改后的結果,實際上就是了解改動部分在整個程序中所起的作用,這種作用的認識和理解不是通過說教得來的,而是切身經歷的、看到的,學生對它的理解、記憶就要深刻得多。
4 實驗內容的具體安排
具體的實驗內容應覆蓋匯編語言教學中的各重要方面,內容涉及debug、匯編語言編程環境、匯編語言程序設計、輸入輸出與中斷、Win32匯編、匯編語言與C語言的混合編程等。類型分為選作和必做。每個實驗分屬驗證型、設計型或綜合型。
4.1 穩扎穩打練好基本功:debug和編程環境
“萬事開頭難”。對匯編語言的學習,能否開好頭很關鍵,很多學生就是因為開始沒學好,感覺跟不上,就不再認真地學習了,有的甚至放棄了。其實匯編語言實驗開始的基礎部分是比較簡單的,想掌握它是沒什么大問題的。
匯編語言源程序通常以ASCII文本文件的形式保存,通過匯編鏈接形成一個EXE可執行文件。對EXE文件的調試構成了實驗課的主體內容,貫穿始終,而EXE文件的調試通常是通過debug實現的。學生通過使用debug可以觀察到存儲器的數據存儲情況,也可以隨時觀察到CPU中寄存器的數據變化。debug的反匯編命令是理解匯編語言的助記符形態和機器指令的01碼形態的對應關系的重要工具,學生可以通過它深入體會匯編語言中指令的構成及各部分含義。debug提供的單步執行命令是另一個重要工具,利用t單步執行一條指令,及時觀察數據緩沖區的變化情況,這也是進行調試、發現程序錯誤的最直接有效的方法。
debug的實驗部分以使用a、t、r、d、u等命令為主反復進行指令練習。學生通過使用debug觀察到指令執行前后機器中數據的變化,對深入理解計算機的工作原理、匯編指令的作用是直接的和不可替代的。學生不再感到機器是復雜的,指令是抽象的。
接下來安排的實驗則是對匯編語言編程環境的熟悉和掌握,這也是重要的一環。對編程環境不熟悉,不僅會影響學習匯編語言的效率,還會引起一些不必要的錯誤發生。因此可以考慮多給幾個簡單完整的程序,讓學生多去使用編程環境,熟悉匯編鏈接過程。實驗初,只給一些正確的程序,讓學生經過匯編鏈接可以較容易地形成exe文件并成功執行,看到了正確的結果,學生就有了方向,也就有信心去做下面的實驗了。
在熟悉了簡單的編譯過程之后,接下來可以在原有程序中適當安排一兩個錯誤,讓學生觀察匯編鏈接中出現的錯誤信息,理解這些錯誤發生的原因,這一點對程序調試是至關重要的,如果看不懂錯誤信息,就沒有辦法正確定位錯誤,也談不上修正錯誤了。
以上分析,學習匯編語言伊始,一定要練好基本功,包括對debug的熟練使用,對編程環境的熟悉。這部分實驗一定要安排得充分,力求使學生不再對機器望而生畏,不再對匯編指令有抽象難懂的感覺,如果能開好這個頭,后繼的學習就順利得多了。
4.2 輕輕松松做改變:匯編語言程序設計
由于學習匯編語言之前,學生通常已經學習過一門程序設計語言,因此這部分實驗可安排簡單、典型的驗證型、設計型實驗,以編寫程序為主。先要求學生用之前學過的程序設計語言實現,然后再給出匯編語言的實現,通過對比;學生自然可以發現匯編語言與其他程序設計語言的異同。當程序出現錯誤時,則必須要求學生使用debug進行調試,觀察變化,排除錯誤,加強程序調試能力。
4.3 細心耐心學核心:輸入輸出與中斷
中斷是學習匯編語言的重點加難點部分,能否真正掌握匯編語言也在于此,中斷也是匯編語言的魅力所在。這部分實驗一定要找一些學生感興趣的、具有明顯觀測效果的例子,至少安排兩個階段的實驗。第一階段以驗證型實驗為主,先使學生熟悉中斷過程、中斷處理程序的框架;第二階段以設計型實驗為主,讓學生自己去思考中斷過程中發生的事情,中斷程序設計的方法。對這部分知識的傳授一定要有耐心,對每個程序的講解要透徹、概念清晰。中斷是真正要用的東西,之前學習的內容只是為它做鋪墊,不能學好中斷,匯編語言這門課的真諦就沒有學到。
4.4 興趣延伸:WIn32匯編、匯編語言與C語言混合編程
很多學生學習匯編語言之初就會問匯編語言用在哪里,很少接觸到匯編語言等問題,其實現在匯編語言很少單獨使用,而Win32匯編、匯編語言與C語言的混合編程用的比較多,這兩部分內容學起來并不難,可當作拓展知識部分,作為自學內容。教師可以找一些實際使用這部分內容的例子,讓學生知道匯編語言的用途,使學生不再“學而不用”,“學而不知用”。
5 結束語
由于計算機學科是一個重實踐的學科,沒有充分的實踐行為,很難真正理解、掌握計算機知識。學生在學習匯編語言中感到困難,原因不在于匯編語言本身難,而在于學生沒有能充分接觸它、使用它。沒見過的東西、沒做過的事,我們只能想象,就像學習游泳,看到別人游,就是簡單的幾個動作,但自己下水就游不了,原因就是缺少實踐。因此,在學習匯編語言過程中,一定要讓學生多“下水”,“下水”多了,就自然可以在匯編語言中“游”起來了。