李敬兆 宗欣欣
摘要:本文從匯編語言的教學現狀出發,結合“匯編語言”精品課程建設所做的工作,從師資隊伍建設、教學資源的立體化建設以及教學改革措施三方面談了建設“匯編語言”精品課程的體會。
關鍵詞:匯編語言;精品課程;課程建設;教學改革
中圖分類號:G642 文獻標識碼:A
1匯編語言及特點
匯編語言是從機器語言發展過來的,是用助記符號表示機器指令代碼、變量地址,標號等的符號指令序列。匯編語言是計算機能提供給用戶的最快捷有效的編程語言,是能夠直接控制計算機硬件的唯一語言。該課程為“微機原理及接口技術”、“嵌入式系統”、“操作系統”、“編譯原理”等課程提供基礎知識。
2匯編語言教學現狀
匯編語言不像高級語言接近人們的語法和思維習慣,要求使用者對計算機的硬件、組成、指令的解釋過程有清晰
的了解,加上指令和偽指令眾多,語法難記,調試困難,程序的可讀性差。因此學生普遍反映這門課難學難懂,一開始就產生了畏學情緒,學習的能動性喪失,給老師的教學工作也帶來一定的困難。
3 “匯編語言”精品課程建設
我們主持的“匯編語言”精品課程是安徽理工大學的校級精品課程和教學研究重點資助項目,以下是我們在創建“匯編語言”精品課程中的一點體會。
3.1師資隊伍建設
在匯編語言精品課程建設中,我們用了5年時間逐步形成一個以中青年教師為主講授課程的系統知識,以課程帶頭人講相關專題的成熟梯隊,為精品課程的建設提供可靠的質量保證。在這個梯隊中,一名具有正教授職稱,兩人具有博士學位,一人正在攻讀博士學位,其余四人均具有碩士學位,隊伍的平均年齡不超過35歲。
梯隊建設一方面從提升學歷和職稱入手,另一方面注重加強教師的基本功建設,為此我們采用了多種形式的活動和制度,比如一周一次的集體備課制度;定期的講課比賽;開展示范教學活動和定期聽課制度,這些活動的開展和制度的堅持,使青年教師的基本功得到了迅速提高。目前,課程組有一人連續兩次在校級講課比賽中獲得前三名,課程組成員在學生對教師測評中都位于全校排名的前30%。
3.2教學資源的立體化建設
(1) 編寫匯編語言程序設計及實驗教材
編寫了“21世紀高等院校規劃教材”《8086/8088和ARM核匯編語言程序設計》及其配套的實驗教材,該書第二版已由中國科技大學出版社出版,并被評為安徽省教育廳“十一五”規劃教材。該教材深入淺出地闡述了8086/8088的尋址方式,指令系統,匯編語言的基本程序設計方法,高級匯編語言技術和DOS、BIOS調用,并介紹了基于ARM核的匯編語言程序設計的方法和技術。
(2)“匯編語言”課程的網絡建設
我們以“21世紀高等院校規劃教材”的內容為藍本,廣泛收集網上教學資源,給學生提供了一個課下學習匯編語言以及同老師交流的平臺,在這個教學平臺上提供了老師的PPT課件和視頻教學資源,每一章節的教學重點和難點提示;設置了師生互動的交流平臺,由學生提問,教師回答,使教師及時掌握學生對目前講述內容的掌握情況和反饋信息,為下一步的教學工作提供了科學的指導。
3.3教學改革措施
(1)“循序漸進”和“多讀多寫多上機”的學習方法
學習方法對于學習效果有著重要的影響。首先,學生應理解每條常用指令的功能,指令對標志位的影響,指令的限制條件等,能夠正確書寫每條指令;其次,學生通過閱讀程序,掌握順序、分支、循環和子程序各種程序段的編寫方法;接著,學生利用偽指令將程序段擴展成完整的源程序文件;隨后,學生利用各種程序結構編寫常見問題的程序;最后,學生再編寫較大型程序和有一定難度的程序。
對于匯編語言,一定要多讀多寫多上機,多讀才能熟悉指令的用法和程序結構,讀懂程序是寫程序的基礎;多寫,才能做到不眼高手低,先根據所學的程序結構編寫小程序進而編寫復雜程序;多上機,才能發現自己在編寫程序過程中的語法及邏輯錯誤,進一步提高編寫調試程序的能力。
(2) 用debug將學生引進匯編之門
在匯編的各類教材中,前面用了很多篇幅在講各種尋址方式和指令,后面接著講偽指令和匯編程序結構,等到學完程序結構,學生能夠進行簡單編程的時候已經過去了課程的大半時間,而這時由于前面學的尋址方式和指令又很多,一時難以全部記憶又沒有實踐機會,有些內容又還給了老師,導致在后面的程序結構講解時還要復習前面的一些比較難記的指令。所以如果在學習指令和尋址方式的時候就能教會學生使用debug,將會受到事半功倍的效果。比如在講解進棧和出棧指令時,啟動 debug,在debug命令提示符下輸入匯編命令
-a100
接著輸入××××:0100MOV AX,1234
××××:0103PUSH AX
××××:0104回車
使用-t單步命令執行上面的指令,可以看到第一條指令執行后
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEE BP= 0000 SI=0000 DI=0000
DS=138C ES=138C SS=138C CS=138C IP=0103 NV UP EI PL NZ NA PO NC
138C:0103 50PUSHAX
單步執行一條指令后,我們可以清楚地看到各個寄存器的情況。在這里我們關心的是這樣幾個內容,第一,由于執行的是MOV AX,1234H指令,所以AX寄存器的值已經改變為1234H;第二,下一條要執行的指令在那里,是什么,在上述顯示內容的最后一行就是下一條要執行的指令地址,該條指令的二進制代碼和匯編指令,由于看到了下一條指令是PUSH AX,所以我們要關心堆棧段寄存器SS和棧頂指針SP,此時SS=138CH,SP=FFEEH。繼續使用單步命令執行第二條指令后看到如下結果:
AX=1234 BX=0000 CX=0000 DX=0000 SP=FFEC BP= 0000 SI=0000 DI=0000
DS=138C ES=138C SS=138C CS=138C IP=0104 NV UP EI PL NZ NA PO NC
138C:0104 50 POPBX
在這里看到了棧頂指針地確發生了變化,此時的SP=FFECH,就是剛才的堆棧指針FFEEH-2。接著我們看到堆棧由于進棧發生了什么變化,使用觀察內存命令-d ss:ffec,看到如下結果:
138C:FFE0 34 12 00 00
138C:FFF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
到此時就可以很清楚地說明,棧操作是以字為單位的,進棧操作分成兩步,首先棧頂指針減二,接著一個字壓入堆棧。通過這種直觀的演示,學生一方面清楚地了解了進棧操作的過程,另一方面也對debug的使用有進一步的深入。學會使用debug匯編語言對學生就不再是只能看,不能用的東西了。
(3) 以案例展開教學,以任務驅動教學
以案例展開教學,以任務驅動教學是對傳統的填鴨式教學的顛覆,在這里老師和學生同時都是課堂教學的主體。在案例展開過程中,教師作為主體引入本節課新的知識點及重點、難點,而在任務驅動環節,是老師結合本節內容給學生設置一定的任務和要求,讓學生運用本節課及以前所學的知識,來解決給定的任務。
這里以講解循環程序設計的章節為例說明如何使用案例展開,任務驅動的教學方法。在循環程序設計中,對于循環的控制主要有兩種方法,一種是計數控制法,用于循環次數已知的的場合;另一種是條件控制法,用于循環次數未知的場合。首先以案例展開教學,設計的案例是統計AX寄存器中1的個數并將結果放到CL當中。這個題的解法可以采用計數控制法,因為AX寄存器是16位的,循環次數已知;還可以采用條件控制法,判斷AX寄存器什么時候為0,當AX寄存器為0時,也就不需要再統計1的個數了,所以在條件控制法中就是通過移位,判斷AX寄存器為0作為循環的終止條件。
采用計數控制法的程序如下:
MOVCL,0 ; 計數器初值
MOVBX,16 ; 設置循環次數
LAB:SALAX,1 ; AX左移一位,最高位移到CF中
JNCLAB1 ; CF=0轉LAB1; CF=1順序執行, 計數器CL加1
INCCL
LAB1:DECBX
JNCLAB
采用條件控制法的程序如下:
MOV CL,0 ; 計數器初值
LAB:AND AX,AX
JZ EXIT ; AX=0時循環結束, 轉到EXIT
SAL AX,1 ; 將AX中的最高位移入CF中
JNC LAB ; 如果CF=0則轉LAB
INC CL ; 如果CF=1則CL+1→CL
JMP LAB ; 轉LAB處繼續循環
EXIT: …
講述完上述兩個例題后,可以把任務布置給學生,第一個任務,求1到100之間的自然數之和;第二個任務自然數累加1+2+3+…+N>500,求累加和滿足條件時最后累加的那個自然數。這里設計的兩個任務是和本節課的內容密切相關的,很顯然第一個任務用計數法來控制循環,第二個任務用條件控制法,也就是用和大于500來作為控制循環控制條件,剛剛講過的知識點很快得到了運用,學生的學習興趣一下高漲起來。在設計任務時要注意層次感,如果是要求學生在課堂上立即完成的任務,選擇的難度要稍微低點,這樣,學生在較短的時間內就能完成,容易產生成就感;在課外給學生布置的任務可適當增加難度,讓學生通過進一步的分析和思考才能得到解答。
(4) 開放式的課外教學
在匯編語言教學中,我們采用了多種手段展開課外教學活動,一是在課程網站上提供一些教學資源,給學生作為課外學習的參考和指導;二是開展匯編語言編程大賽,通過比賽讓學生提高獨立分析問題解決問題的能力;三是在學期之初布置學生寫一篇關于匯編語言應用或者是利用debug調試程序的論文,通過這些活動的開展,讓學生從課內學延伸到課外學,從被動學轉變為主動學。
(5) 實驗教學的改進
匯編語言是一門實踐性很強的課程,在匯編語言的實驗教學中,我們通過課前布置預習,課堂驗證,課堂考核這幾個環節把實驗所要達到的目的落到實處。在課前預習環節,要求學生先熟悉實驗的目的,實驗的算法,實驗中用到的指令,能讀懂程序,對學有余力的學生把選作實驗程序先編寫出來。課堂環節主要是對實驗程序和自編選作程序的調試。課堂考核環節采用兩種辦法,一是你講我聽的方法,就是讓學生來講解程序,老師對講解中的錯誤給與指正;二是學生編寫調試完成后舉手示意老師檢查,檢查完成后老師記錄在冊,學生對實驗就會引起充分重視,實驗課的效果也就達到了。
4結語
經過5年的課程建設,我們已經擁有了一個年齡、職稱和知識結構合理的梯隊,梯隊成員的專業素質也在課程建設中得到了提高和鍛煉。另外,通過課程建設中實施的教學和實驗方法,大大提高了學生的學習興趣和主觀能動性,該課程受到了學生的歡迎,取得了滿意的教學效果。
參考文獻:
[1] 李敬兆.8086/8088和ARM核匯編語言程序設計[M]. 2版. 合肥:中國科學技術大學出版社,2008.
[2] 金海溶,周蘇,孟學多.用實驗方法改革匯編語言程序設計的教學[J]. 計算機教育,2007(1):34-37.
Experiences on Construction of “Assembly Language” Excellent Course
LI Jing-zhao, ZONG Xin-xin
(Anhui University of Science and Technology Institute of Computer Science and Technology , Huainan 232001, China)
Abstract: From the current situation of teaching assembly language, this paper is on the construction work of “assembly language” Excellent Courses and extracts the experiences of building "assembly language" Excellent Course from the teaching staff, teaching resource as well as course reform measures.
Key words: assembly language; excellent course; course construction; course reform