張 學 陸 慶 廖建明
摘要:“匯編語言程序設計”是高等院校計算機專業的必修專業核心課程,具有其他語言無法取代的地位。本文基于“以學生為本”的教學理念,從實驗安排、教學方法和考核方式三個方面介紹了作者在多年匯編語言實驗教學中的體會。
關鍵詞:匯編語言;實驗教學;模仿法;演示法
中圖分類號:G642 文獻標識碼:B
1引言
匯編語言是所有程序設計語言中最原始的語言,它與機器語言最為接近,簡言之,匯編語言是符號化的機器語言,通過匯編語言可以直接訪問計算機的硬件,如果要深入了解計算機的工作原理和底層細節,就必須學習匯編語言。著名的計算機科學家Donald Knuth堅持推崇匯編語言,并且曾經說過“我堅持認為除非你了解了各種底層細節,否則根本不可能為態度認真的程序員寫書。”①匯編語言的地位是任何高級語言都無法取代的。因此,匯編語言程序設計成為計算機專業的必修課程。
然而匯編語言程序設計課程的教學普遍存在諸多問題,已經引起了廣大教師的研究與關注,如考文獻中的[1][2][3][4][5]等。就目前看來,匯編語言教學大多不能體現“以學生為本”的教學理念,主要表現在對實驗教學的重視程度不夠。匯編語言程序設計是實踐性很強的一門課程,學生只有在程序設計的實踐中才能真正掌握。所以我們認為匯編語言教學應該“老師少講課、學生多動手”,也就是要充分重視實驗環節,讓學生唱主角,改變傳統的以課堂講授為主的教學模式。
為此,本文進行匯編語言實驗教學的研究與探索。下面分別從實驗安排、教學方法和考核方式三個方面介紹作者在多年的匯編語言實驗教學中的體會。
2精心安排實驗
2.1學時安排
目前國內高校的匯編語言程序設計課程大多是基于Intel 8086/8088微處理器的②,總學時一般在60學時左右,實驗課學時一般占總學時的1/4到1/3。我們認為60個總學時是比較合理的,但是實驗課學時遠遠不夠。事實上,對于任何一種程序設計語言來說,不需要教師講解太多的內容,關鍵是讓學生多動手。我們認為匯編語言的理論課學時和實驗課學時各占總學時的1/2是比較合理的。
2.2實驗內容安排
匯編語言的實驗課內容應該包括但不限于:
(1) 調試工具DEBUG的使用:匯編語言程序的調試要比高級語言程序的調試困難得多,熟練使用DEBUG是匯編語言程序設計的基本技能。
(2) 匯編語言程序設計的上機過程:匯編語言程序的編輯、匯編、連接、運行和調試是匯編語言實驗的必備知識。此外,學生還應當懂得在此過程中所產生的各種文件(.obj、.lst、.crf和.exe等)的用途。
(3) 基本程序結構設計:任何復雜的程序都是由三種基本結構(順序結構、分支結構和循環結構)組成的,因此,基本程序結構設計訓練是編寫復雜程序的基礎,是匯編語言實驗不可缺少的內容。
(4) 子程序設計:所謂子程序,相當于C語言中的函數。子程序是結構化程序的基本組成,子程序設計是開發大型程序的基礎,對于培養編程能力十分重要。
(5) 中斷調用:操作系統和BIOS(Basic Input Output System)以中斷調用的方式為程序員提供了一組功能強大的程序庫,屏蔽了復雜的硬件細節,從而極大程度地減輕了程序員的負擔。而且,不理解中斷系統就不能理解計算機的工作原理。因而學習中斷調用是匯編語言實驗課的必要內容。
此外,中斷服務程序的編寫和匯編語言程序與高級語言程序的連接等內容也應該讓學生有所了解;在實驗學時允許的前提下,也可以安排一個綜合性實驗。
3選擇合適的教學方法
對于實驗課,只布置任務、讓學生自己做實驗的方法并不可取,因為其結果往往是只有少數學生能夠達到實驗要求,而大多數的學生收獲很小,甚至有的把實驗課用來玩游戲了。所以,實驗課應該有專門的任課教師。當然,從培養學生的創新能力的角度講,應該盡可能地讓學生獨立完成任務,但是創新能力的培養有賴于足夠的基礎知識和基本技能。我們認為匯編語言實驗課應該以基礎知識和基本技能的學習為主,適當地關注創新能力的培養,在照顧到大多數學生的前提下,給創新能力強的學生提供獨立發展的空間。要做好這一點,我們認為有兩種十分有效的教學方法:演示法和模仿法。
3.1演示法
在實驗課上,我們經常發現有許多學生向老師問同一個問題,如果一一解答,不但使任課教師十分疲憊,而且嚴重浪費了資源和時間。對于這些共性的問題,可以通過投影儀向學生演示解決問題的辦法,所以在實驗室中安裝投影儀將為實驗教學帶來極大的方便,目前大多數高校具備這樣的硬件條件。特別是對于調試工具DEBUG的使用和匯編語言程序設計的上機過程的學習尤為有效。初學者對于程序的編輯、匯編、連接、改錯和調試過程往往不知所措,如果老師從頭到尾演示整個過程、讓學生一步一步地跟著操作,就能極大地提高學習效率。一次簡單的演示往往要勝過千言萬語的解釋。
3.2模仿法
程序設計對于大多數的初學者來說有一定的難度。對于給定的一個實驗題目,許多學生往往感到無從下手。事實上,老師可以把一些經典的程序提供給學生,例如怎樣實現分支結構、怎樣實現循環結構、怎樣使用系統調用、怎樣編寫子程序、怎樣編寫中斷處理程序等,讓學生在讀懂之后模仿著編程。模仿的程序多了,編程也就熟練了。通過一段時間的經驗積累,就能夠編寫比較復雜的和具有創造性的程序,正所謂“熟能生巧”。我們在教學中發現這種模仿的方法十分有效。當然要特別注意的是,不能把模仿變成抄襲。
3.3對比法
一般說來,在學習匯編語言之前都要學習C語言。匯編語言與C語言的學習是相輔相成的。老師應該通過對比的方法向學生指出匯編語言與C語言之間的千絲萬縷的聯系。例如,一塊數據區的開始地址為BASE,要尋找的操作數相對于開始地址的偏移量為SI,我們發現幾乎所有的學生會把這個操作數寫成[BASE+SI],而不會寫成BASE[SI],因為第一種寫法更直觀,而第二種寫法令人費解。然而,如果教學生把BASE看成C語言里的數組、把SI看成下標,那么學生就會恍然大悟了。通過對比教學法,能夠使學生更深入地理解高級語言中的數據類型、變量、函數、數組、指針等概念的理解,同時也必將大大促進匯編語言的學習。
4改革考核方式
因為“匯編語言程序設計”是實踐性很強的一門課程,所以實驗課成績應該在總成績中占有相當大的比重。我們認為以閉卷考試成績為主要依據的考核方式是不合適的,甚至可以取消考試、以實驗課成績為主,如果要考,也應該是開卷的。然而由于許多現實困難,目前大多數高校的匯編語言課程的實驗課成績只占很小的比重,這也是學生不重視實驗課的重要原因之一。提高實驗課成績所占比重的主要困難在于學生多、抄襲成風、老師負擔重、實驗條件有限、考核的主觀性太強等。盡管面臨諸多困難,我們認為實驗課成績應該占到總成績的1/2。老師可以根據學生的實驗表現按五級分制(優、良、中、及格、不及格)或二級分制(通過、不通過)考核。為了減輕教師的負擔,可以只針對一個綜合性實驗(而不是所有的實驗)加以考核。
5結束語
本文根據作者多年的教學體會,對匯編語言實驗教學進行了深入的思考。從“以學生為本”的教學理念出發,根據匯編語言程序設計課程所具有的實踐性強的特點,提出“老師少講課、學生多動手”的教學模式,主張提高實驗課學時和實驗課成績的比重,重視實驗教學,并從實驗內容、教學方法和考核方式三個方面介紹了作者的想法。然而由于學生過多、資源有限、我國高等教育長期投入不足和體制缺陷等許多現實困難,匯編語言實驗教學的改革依然任重道遠。
參考文獻:
[1] 張全福. 匯編語言程序設計實驗教學改革與探索[J]. 教學研究,2005,28(6):545-546.
[2] 周代英,楊曉霞. 匯編語言課程教學方法改革探索[J]. 中國科教創新導刊,2008(6):55-56.
[3] 吳媛,茹慶云,楊富超. 匯編語言程序設計的教學研究[J]. 中國科技信息,2005(14):215.
[4] 邵聯合,陳向陽,陳麗萍. 匯編語言生態課堂的構建[J]. 高等理科教育,2008(1):55-57.
[5] 趙雪靜. 匯編語言教學方法初探[J]. 中國科教創新導刊,2008(7):33.