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