時間:2022-05-02 10:31:27
開篇:寫作不僅是一種記錄,更是一種創造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇匯編語言,希望這些內容能成為您創作過程中的良師益友,陪伴您不斷探索和進步。
棧是限定僅在表尾進行插入和刪除操作的線性表。“棧”者,存儲貨物或供旅客住宿的地方,可引申為倉庫、中轉站,引入到計算機領域里,就是指數據暫時存儲的地方,所以才有進棧、出棧的說法。
棧是計算機中經典的數據結構,棧就是限制在一端進行插入刪除操作的線性表。棧有兩種最重要的操作,即pop和push。
(來源:文章屋網 )
(蘇州大學計算機科學與技術學院,江蘇蘇州215006)
摘要:分析匯編程序實驗課中碰到的若干問題,提出在VC++開發工具中嵌入匯編,在匯編程序中采用結構化程序方法、借助反匯編進一步學習高級語言、以實際應用激發學生學習興趣3個教學實踐,為匯編語言實驗教學提供參考。
關鍵詞 :匯編語言;程序設計;反匯編
文章編號:1672-5913(2015)15-0097-03
中圖分類號:G642
基金項目:國家級計算機與信息技術實驗教學中心資助項目( 50118003)。
第一作者簡介:刁,男,實驗師,研究方向為中文信息處理、機器學習,hjdiao@suda.edu.cn。
1 背景
匯編語言是一種面向機器的程序設計語言,在高等院校計算機專業的學科中,是一門軟件與硬件相結合的基礎課程。通過匯編語言,在硬件方面可以了解CPU、BIOS等編程結構,在軟件方面可以理解操作系統、編譯原理等底層操作。因此,學生學好匯編語言程序設計,不但能更好地掌握計算機工作原理、微機編程接口,還能進一步加深對操作系統和高級語言的理解。
2 匯編語言實驗課程現狀
(1)匯編語言編輯編譯麻煩。學生早已習慣了C++/Java等高級語言的可視化集成式開發環境,而匯編實驗還采用MASM、LINK等命令行編譯連接工具,匯編程序書寫時也不像高級語言那樣具有上下文智能提示功能的編輯工具,對用慣了高級語言編程工具的學生來說,命令行編譯連接工具給匯編實驗入門帶來一定的困難。
(2)匯編語言程序編寫繁瑣。匯編語言是面向機器的語言,匯編指令與機器指令之間存在著密切的關系,因此其語言表達能力和方式受限于機器的指令系統。書寫匯編程序不僅需要在程序邏輯上花費精力,還要在內存分配、尋址和訪問上投入甚多,相比于高級語言,其書寫繁瑣很多。就拿C語言中經典的“Hello World”程序做比較,在80×86匯編程序中,首先要定義存放字符串的數據段并為其字符串存儲空間,然后定義堆棧段,再定義代碼段以及匯編編譯指令和代碼指令,不但匯編語句比高級語言繁瑣,程序結構也比高級語言冗長。
(3)匯編語言程序調試困難。匯編語言提供給程序員很大的訪問機器資源的“能力”和程序設計的靈活性,學生在匯編程序中可以通過各種技巧使用資源。因此,在調試程序的時候,不僅要正確理解當前指令的含義,還要清楚指令中使用到的資源的狀態以及指令執行完對資源的影響。匯編語言的調試工具也不像Java/C#等高級語言那樣,有智能化的表達式監控窗口以及調試步驟回退功能。
(4)匯編語言結構條理性差。高級語言中任何程序邏輯都是由順序、分支、循環3種結構組合而成,而且3種結構進行嵌套時都通過分層次縮進的方式進行對齊。然而在匯編程序中一方面沒有定義這3種邏輯結構的規范,另一方面匯編程序書寫是一行一條語句,語句與語句之間按行對齊,并不按嵌套縮進的方式對齊。因此,學生在寫匯編程序時自由度比較高,分支和循環在匯編中只能通過各種轉移指令實現,如果這些轉移指令使用不規范,不但使程序的可讀性很差,而且導致整個程序結構很凌亂,從而演變為“面條式”代碼。
3 匯編實驗改進實踐
3.1 VC++開發工具中嵌入匯編語言
為了降低學生匯編實驗入門的門檻,教師可以采用學生熟悉的VC++編程工具,以C語言嵌入匯編語句的方式先開展匯編實驗。例如,設X和y均為16位無符號數,用加法指令實現求解表達式SX+Y值的程序。用C語言嵌入匯編語言的代碼如圖1所示。
在C語言中嵌入匯編語言比書寫完整的匯編程序在結構上要簡單很多,學生可以把重點放在匯編指令和尋址方式的學習上,通過這種實驗方式也教會了學生用C語言和匯編語言編寫混合程序的方法。等學生熟悉并掌握了完整的匯編語言書寫格式后,再使用命令行的編譯和連接工具進行匯編實驗。
3.2 在匯編程序中采用結構化程序方法
隨著匯編實驗的開展,匯編實驗越來越難,匯編程序邏輯也越來越復雜。如果這個時候學生不能養成良好的編程風格,勢必會造成程序代碼混亂、匯編實驗效率低下的問題。因此,教師可以在匯編教學實驗中引入高級語言中的結構化程序設計的方法,讓學生嚴格按照結構化的套路設計程序,例如,寫一個把字符串中的所有大寫字母改成小寫字母的程序。字符串大寫轉小寫的流程如圖2所示。
字符大寫轉小寫流程的邏輯結構由while循環和在while循環中內嵌的一個單分支結構構成。因此,在編寫上述程序時可以用匯編語句先構造while循環結構,再在while循環結構中嵌入單分支結構,其他的順序性匯編代碼只要填寫到相應的結構中就可以了。兩種結構的代碼如圖3所示,這樣整個程序就可以按結構化方式進行設計了。這樣不但提高了學生編寫程序的效率,還進一步加強了學生對高級語言中的各種分支和循環結構在編譯器層面的理解。
3.3 借助反匯編進一步學習高級語言
結構化匯編程序設計讓學生初步了解了分支和循環等結構在編譯器層面的實現。利用匯編或反匯編輸出,學生們還可以進一步了解高級語言中一些特性在編譯層面的實現。例如,關于C語言程序中局部靜態和動態變量編譯實現上的區別,事例C語言代碼經匯編輸出后如圖4所示。
從圖4中可以看出“a=3”轉換為匯編語言后對變量a采用直接尋址,而“_?a@?l??main-@@9@4HA”這個字符串是在段名為“BBS”的數據段中定義的,代碼如圖5所示。
“b=4”轉換為匯編語言后對變量b采用寄存器相對尋址,“b$”被定義為常量,其值為-4,而“ebp”則是程序調用棧基址指針。因此,從匯編后的代碼中學生可以看出局部靜態變量存放在數據段中,函數執行結束后其存儲空間不會被回收,而局部動態變量則存放在程序調用棧中,函數執行結束后其存儲空間則被調用棧調整出去。學生通過對高級語言匯編或反匯編輸出,還能進一步了解關于一維數組的指針和一維數組首地址的指針以及類中普通成員函數和虛函數等編譯層面的區別。
3.4 以實際應用激發學生學習興趣
興趣是學習最好的導師,教師要通過有應用價值的實例激發學生學習的興趣,讓學生了解匯編語言的用武之地,例如,可以向學生講解硬件驅動、屏幕取詞、單片機開發、緩沖區溢出攻擊的原理;同時讓學生寫一些簡單而力所能及的小程序,如基于280單片機的電子廣告牌控制程序,這樣一方面提高學生匯編實驗的動手能力,另一方面也加深了學生對操作系統、微機接口等相關課程的理解。
4 結語
實踐結果表明,與往屆學生匯編實驗情況對比,使用C語言中嵌入匯編代碼方式的學生能很快上手開展匯編實驗,明顯降低了學生匯編實驗入門的門檻,提高了學生匯編實驗的效率;通過匯編程序中采用結構化程序的方法,學生能快速寫出多重嵌套的匯編程序,能明顯增強學生閱讀和編寫復雜匯編程序的能力;借助反匯編學習高級語言只能提高基礎知識較好的學生各科知識點串聯和貫通的程度,部分學生由于基礎知識較差,融會貫通多科知識點還較困難;以實際應用激勵學生也只能讓少部分可以靜下心來刻苦鉆研的學生比較感興趣,部分學生感覺題目綜合性強,涉及知識點多,課后不認真鉆研,很容易就會對實際應用失去興趣。經過多方面嘗試,教學雖然取得一定的效果,也暴露出一些不足,這些也成為我們匯編教學和實驗中需繼續思考和解決的問題。
參考文獻:
[1]張洪業,宋人杰,周欣欣,“匯編語言”教學改革與實踐[J].計算機教育,2009(21): 60-61.
[2]沈美明,溫冬嬋.IBM-PC匯編語言程序設計[M],北京:清華大學出版社,2001: 50-52.
Abstract: Assembly language has complex instructions and many provisions which lead to the weariness of students. In order to improve the teaching effect of assembly language programming, this article explains how to easily learn assembly language from the comparative perspective of English and C language grammar in order to improve the interest of learning.
關鍵詞: 單詞;詞法規則;語法規則;語法成分;語句
Key words: word;lexical rule;grammar rule;grammatical component;statement
中圖分類號:TP313 文獻標識碼:A 文章編號:1006-4311(2014)19-0193-02
1 緒論
作為最接近機器語言的編程語言,匯編語言可以稱得上是最接近于計算機操作本質的語言。其直接面向硬件的特性,使得在使用匯編語言編程時,能夠清楚感知計算機的運行過程和原理,充分認識應用程序和計算機硬件之間的聯系與交互。相對于高級語言來說,匯編語言對編程者思維邏輯的鍛煉表現尤為突出,對于形成軟、硬兼備的編程知識體系具有舉足輕重的作用,而且指令集合簡約,指令操作直接。很多硬件設施的嵌入式編程使用的都是匯編語言,因為匯編語言更直接,更有效率。例如現在很多數碼產品賴以生存的芯片、主板等,都包含了嵌入式程序,而這些程序中,匯編語言的使用是非常普遍和相當重要的。對于計算機專業語言類課程的學習來說,從匯編語言開始學習更符合循序漸進的學習原理。特別是在計算機技術專業的學習中,匯編語言具有十分重要甚至說不可代替的作用。因學生有英語、C語言學習的基礎和習慣,故本文從英語、C語言語法對比的角度,說明如何輕松學好匯編語言,以便更好地由英語學習、C語言學習自然過渡到匯編語言學習。
2 匯編語言課程的特點
匯編語言是計算機能提供給用戶的最快而又最有效的語言,同時能夠利用計算機所有硬件特性并能直接控制硬件。所以高級語言簡單、易學且開發效率高,而匯編語言復雜、難懂、開發效率低。優點:①用匯編語言所編程序時空效率高。由于匯編語言本質上就是機器語言,可直接、有效地控制計算機硬件,因而與高級語言相比,容易得到運行速度快、執行代碼短、占用內存空間少的高時空效的目標程序。②用匯編語言能設計出高級語言無法實現的程序。正是由于與機器的密切相關性,使得匯編語言能充分利用計算機的硬件特性,編寫出與硬件緊密相關而高級語言又無法實現的程序。缺點:①難學、難理解、難編程、難調試、難維護等。②匯編語言程序可移植性差,它是面向機器的語言,不同的機器CPU不一樣,一個CPU一個指令系統,硬件CPU的不兼容導致程序移植困難。
3 英語與匯編語言的對比(表1)
例如以下程序:
Data segment ;data段開始
X dw 10,20,50,70,-90 ;data段正文
Data ends ;data段結束
Code segment ;code段開始
Assume cs:code,ds:data
Main: mov ax,data
Mov ds,ax
Mov bx,offset x
Mov cx,5 ;code段正文
Mov ax,0
L: Add ax,[bx]
Add bx,2
Loop l
MOV AH,4CH
Int 21h
Code ends ;code段結束
End main ;整個程序書寫結束,從語句main開始執行
該程序的功能是求數據10,20,50,70,-90的累加和
4 單詞的種類
4.1 常量(常數)單詞 ①10進制整形常量。詞法規則:以D結束(D可省略),由0-9構成 如 123D,456。②16進制整形常量。詞法規則:以H結束,由0-9,A-F構成 如 123H,456H。③8進制整形常量。詞法規則:以Q結束,由0-7構成 如 101Q,456Q。④2進制整形常量。詞法規則:以B結束,由0-1構成 如 101B,110B。⑤字符型常量。詞法規則:單引號括起來的字符,其值為其ASCII碼如‘1’的值是41H,’AB’的值是4241H,’ABCD’的值是44434241H,字符順次存放,其值是低位在低地址部分。
4.2 名字單詞 詞法規則:以字母或下劃線開始,由字母,數字,下劃線構成的串。如xyz,flag,名字可以是段名,子程序名,指令的名字,常量名,變量名,寄存器名等。
4.3 運算符單詞 算術運算符:如+,-,*,/。偽指令運算符:如offset,seg,xor。
4.4 操作碼單詞 區分不同的操作(運算),含義必須硬記。如ADD(加法),SUB(減法),MUL(乘法),DIV(除法)。
5 語法成份――表達式
語法規則:由常量,運算符,括號,名字構成。如123+456+x,其中最常用的表達式有:①100:數據100。②[100]:100號單元,100不是數據,是地址,100號單元的內容是數據。③BX:BX單元。④[BX]:BX所指向的單元,并非BX單元。⑤10[BX]或書寫成[10+BX]:BX所指向的單元,下10個單元。⑥[SI][BX]或書寫成[SI+BX]:BX所指向的單元,下SI個單元。⑦10[SI][BX]或書寫成10[SI+BX]或書寫成[10+SI+BX]:BX所指向的單元,下SI個單元,再下10個單元。
6 語句格式
自然語言格式是:動詞(做什么)賓語(對誰做)狀語(怎么做)。匯編語言格式是:動詞(做什么)賓語(對誰做),省掉狀語(運算結果怎么辦,隱含給出)。
語法規則:[名字][:]操作碼目的操作數,源操作數;注解。表示做何種操作的代碼稱為操作碼,參加操作的數稱為操作數,操作數無非是常量,名字,表達式。存放結果的稱為目的操作數,僅參加運算的數稱為源操作數。運算后,目變源不變。
語義規則:目的操作數操作上源操作數,結果送到目的操作數(運算結果怎么辦,隱含給出)。
如 ADD AX,BX表示AX的內容加上BX的內容送AX,(AX)+(BX)送AX。
7 匯編語言與C語言的比較(表2)
8 結束語
計算機由硬件軟件兩部分構成,匯編語言可直接在硬件層上編程序,高級語言有編譯程序,該軟件層遮蓋了硬件層,使得用戶看不到硬件,看到的只是編譯程序的語法約定。故學好匯編語言,對于理解計算機內部運行機制及產品開發尤為重要。
參考文獻:
[1]王成耀.80X86匯編語言程序設計(第2版)[M].北京:人民郵電出版社,2008.
關鍵詞:教學模式;匯編語言;虛擬PC;模擬器
中圖分類號:G642 文獻標識碼:B
1引言
“匯編語言程序設計”是高校計算機、自動化、電子、通信等專業必修的一門主干課程,尤其是對計算機專業來說,它是一門體現軟硬件結合的基礎課程。因此,學好匯編語言,不但能使學生以后能更好地理解計算機的組成及工作原理、了解計算機內部運行機制,還能為將來進行程序設計打下良好的基礎;同時它對學習“微機原理及接口技術”、“操作系統”等后續課程有非常重要的作用。
2當前教學現狀及存在的問題
匯編語言與計算機有著密不可分的關系:匯編指令與機器指令一一對應;能直接操作系統硬件。同時,匯編語言目標程序短、運行速度快,相對于機器語言來說便于書寫、閱讀和調試,因此從其誕生伊始就迅速地替代了機器語言,成為程序設計人員的最愛。經過數十年的發展,匯編語言早已廣泛應用于程序優化、軟件安全、系統工具的編寫等各個方面。當前,幾乎每個高校的計算機及其相關專業都把匯編語言程序設計作為專業必修課向本科生開設。然而,經過實踐教學發現,由于其先修課程少,課程本身指令復雜,規定繁多,學生往往感到乏味厭學。這樣常常導致教師教得累、學生學得煩,教學效果明顯欠佳。
概括起來,目前“匯編語言”課程教學中存在的主要問題有如下幾點:
(1) 學生的課程認識不正確
學生往往不知道學習該門課程的必要性。在開設這門課程之前,往往已經先修了C語言課程,而C語言明顯比匯編語言具有更好的邏輯性,更接近于自然語言,更符合人類的思維方法,更簡單易懂,應用更廣泛。相反,匯編語言指令瑣碎,知識點太多,學習戰線太長,這樣學生往往會由苦學到厭學,最后不學。當然,造成這種情況的原因除了“匯編語言”課程本身的特點外,任課教師引導失誤是主要原因。
(2) 學生的學習方法有偏差
匯編語言復雜難學,是一門非常重視基礎的課程,如要想學好指令,必須扎實理解其尋址方式。而學生在學習中,不重視基礎,往往學了后面忘了前面,不去認真理解,而往往死記硬背,結果事倍功半。例如學完尋址方式后,再學習數據傳送指令時,還有較多的學生寫出兩個存儲器之間直接傳遞數據的指令,很顯然這是基礎不牢造成的。
(3) 教師的教學手段存在缺陷
傳統的板書式教學方式正逐漸被多媒體教學手段所取代。多媒體課件信息量大、生動直觀,在很大程度上激發了學生的學習興趣,提高了教學效果。但其缺點也是明顯的:信息量大往往使學生對知識消化吸收困難,找不到重點,理不出頭緒。而且采用多媒體方式,學生往往產生一種依賴情緒,一旦遇到困難就想課后看課件,從而導致注意力分散,使得問題不能得到及時解決。
(4) 實驗和實踐環節重視不足
實驗和實踐環節對于學好匯編語言來說是非常重要的。學生只有經過上機實驗和課后實踐,才能很好的理解教科書上的內容,從而打下堅實的理論基礎,反過來才能更好地指導實踐。目前的上機實驗時間往往很短,常常是學生才剛剛有點入門,實驗環節就結束了;且課外實踐環節幾乎沒有,導致學生即使課內學的再好也不會應用。
3解決方法研究與探討
(1) 強調學生對課程的正確認識,端正學生的學習態度。
匯編語言指令采用助記符等符號書寫,與機器指令一一對應,比機器指令容易記憶和理解。通過學習和使用匯編語言,我們能夠感知、理解機器的邏輯功能;實踐中向上可以理解軟件,向下可以感知硬件。因此在課程講述過程中,我們應不斷強調:學習匯編語言是理解計算機系統的最佳起點和最有效途徑;在實際應用中,匯編語言在調試程序或開發底層內核程序方面都有較大的競爭優勢。除此之外,教學中還需要例舉一些大家比較熟悉的應用匯編語言的實例,讓學生們感覺到匯編語言的重要性。這一環節,也可讓學生們課后自己去圖書館或網上查找資料,然后課內組織大家一起討論。學生們一旦理解了匯編語言的重要性,自然會端正自己的學習態度。課堂教學中,要鼓勵學生打好基礎,引導學生不斷回憶以前的內容,使他們能自己發現問題,然后盡量用簡單的例子對問題進行講解。
(2) 指導學生采取正確的學習方法,培養學生的學習興趣。
在實驗課程中及課后學習中,積極引導學生對匯編語言的學習興趣:指導學生編寫一些平時常見的并且有實際應用功能的程序,如文件加密程序;讓學生閱讀或嘗試編寫一些有趣的小游戲,如迷宮小游戲;讓學生閱讀并用自己的方法修改別人的源程序,如對已有程序進行優化,比較誰的程序最簡單高效;指導學生使用反編譯工具對較小的軟件進行反編譯,然后對結果進行分析。
(3) 采用豐富的教學方法和教學手段。
將課堂教學、自主學習、網絡教學等有機地結合起來,并充分利用多媒體教學手段提高教學效率和教學效果。在教室中,將多種教學方法有機地結合起來,通過電子教案、軟件仿真等手段,讓學生邊學習、邊實踐,引導學生自己發現問題、思考問題、解決問題。在講解不易理解的問題時,應放慢速度,除用多媒體課件直觀演示外,應盡量結合板書講解,這樣更有助于學生對講述內容的消化吸收。同時,在教學中應多采用類比的方法,盡量用生動的語言、鮮活的事例對比講解某一問題,既能激發學生的學習興趣,又使其加深對內容的理解。
(4) 增強實驗環節,做一些實際項目 。
在實踐教學中,積極創造學習環境,擠出時間加強實踐環節和編程上機操作的訓練。實驗室硬件資源有限,學生上機實驗次數受限,因此在學習masm等基本匯編工具基礎上,指導學生課外利用一些軟件模擬工具,如emu8086等進行匯編程序的學習。這些軟件基本上都結合了先進的原始編輯器、組譯器、反組譯器、具除錯功能的軟件模擬工具(虛擬PC),有的還有循序漸進的指導工具。它們都是可視化的環境,可以完全模擬計算機硬件系統。由于模擬器在虛擬PC中執行程序,因此它不會去存取實際硬件,程序運行中可以隨時看到各寄存器、標志位、存儲器單元的狀態,不但可以很方便地進行程序的調試,還可以對計算機硬件進行深層次的了解,而且這些軟件完全兼容Intel 的后繼處理器,包括Pentium II、Pentium 4等等。圖1就是采用emu8086可視化8086模擬器調試匯編程序的畫面。
另外,在實驗過程中,可以將學生分成若干組,各組間互相進行提問、講解和討論;各組在課后可以自己尋找感興趣的題目或實際應用項目(如廣告牌等)進行實踐,這樣就能明顯提高學生的動手實踐能力。
4結束語
基于以上的考慮,我們進行了教學改革的嘗試,通過一段時間的實踐取得了較好的效果。既加深了學生對課程的理解和掌握程度,同時又使教師加強了對該課程的教學能力。當然,良好的教學效果是我們永遠追求的目標,因此在今后的教學中,我們還需要不斷進行探索、研究和嘗試,不斷更新觀念,取得教學藝術中的精華。
參考文獻:
[1] 沈美明,溫冬嬋. IBM-PC匯編語言程序設計[M]. 2版. 北京:清華大學出版社,2001.
[2] (美)布魯姆,著. 匯編語言程序設計[M]. 馬朝暉,譯. 北京:機械工業出版社,2006.
關鍵詞:匯編語言;寄存器;思維能力;建構主義
中圖分類號:G642文獻標識碼:B
1引言
沒有問題就是最大的問題。沒有問題的安逸如同沒有引爆的地雷一樣危險。在滿堂灌輸、不與學生交流和溝通的教學模式下,學生只是被動的接收知識,其發現問題的能力、提出問題的勇氣、解決問題的追求、尋根問底的態度在悄無聲息的受到摧殘。久而久之,學生成為了一個無所思無所想的機械,失去了思維的活力、想象的活力、創造的活力。
問題的提出是解決問題的開始。圍繞某一知識點提出一系列的問題,在師生互動中解決這些問題,能夠將知識學習和能力培養有機的結合在一起。這種教學方法是建構主義理論實踐的具體體現。建構主義認為認識是一種以主體已有的知識、經驗、認知結構、心理結構等為基礎的主動建構過程,堅信知識是由認知主體主動建構的結果,學習是認知主體的一個意義建構的過程,教學是培養學生主體性的創造活動,是引導學生從原有的知識經驗中生長出新的知識經驗的過程,教師應是學生主動建構意義的促進者、合作者和指導者。
本文以匯編語言的最基礎內容――寄存器教學實踐為例,介紹教學過程中提出的一系列問題。通過問題的牽引,教師與學生、學生與學生之間的互動,將有關知識組織組成網絡,開闊學生的眼界,培養學生主動求知的技能、態度與習慣。
2數據寄存器教學中問的問題
數據寄存器是學習匯編語言時學生最早接觸的內容,單純的介紹有哪些寄存器(名稱、大小),各個寄存器的含義(常用用法),學生們會覺得寄存器很抽象,既不知道寄存器有何實際用途,也不知道如何使用寄存器。我們通過系列問題的牽引,從不同角度不同側面來解讀寄存器,將新知識和已有知識組織成一個網絡。
(1) 為什么要設置寄存器?
通過“CPU執行一個加法指令”的具體應用場景來引導學生回答。CPU要執行一個加法操作,就需要從內存取兩個操作數,CPU能夠一次性地取來兩個操作數嗎?答案是不能,地址總線、數據總線上一次只能加載一個單元的地址和數據。先取到的數據放在何處呢?類比生活中車站、超市的寄存處,學生能自然而然的接受寄存器的概念。
(2)CPU的執行部件中有哪些寄存器呢?32位的寄存器是什么含義?
這些問題的回答是寄存器教學的基本內容,在匯編語言教材上都有較詳細的介紹。但是我們在教學時對有些內容進行了簡化,避免一次性引入過多的概念。
(3) 寄存器為何能記住0、1呢?
直接回答該問題已超出了本門課程的范疇。但為了激發同學們的好奇心,有必要提出該問題。同時指出計算機組成原理將會回答該問題,使學生感受課程間的一些聯系。
(4) 如何使用寄存器?
用一個指令實例說明一種給寄存器賦值的方法。例如:MOV EAX, 12345678H。之后,一個接著一個地提出寫完成某功能的指令問題。遵循循序漸進、由淺入深的原則,使學生能夠模仿實踐(學生自己寫指令)、能夠在和已有知識關聯中給出答案,在問答互動和鼓勵中,建立信心,鞏固所學知識、開啟靈活應用之門,開闊思路和眼界。
① 如何將EAX的低16位全部置成0?
② 如何將EAX的低8~15位全部置成1?
③ 有無其他將EAX的低16位全部置成0的方法?
④ 如何將EAX的高16位全部置成0?
⑤ 如何將EAX的第30位置成0?
⑥ 如何將EAX的第30位置成1?
在此過程中,一方面使學生記牢32位寄存器、16位寄存器、8位寄存器之間的相互關系,另一方面調動學生積極性,思考實現各功能的辦法。教師作為引導者只是進行必要的啟發提醒。與此同時,同學們看到了算術運算(減法)、邏輯運算(XOR、AND、OR)、移位操作、數據傳送(借助其他寄存器)等方法的指令。建立實現某一種功能的指令多樣性概念,破除指令寫法僵化單一的迷信。在應用中熟悉了指令的功能和寫法,在寫指令的過程中強化了記憶。
(5) 通用寄存器又為何給予特定含義的名稱?
我們以一個生活場景來進行類比,講解通用性與常用性的關系。飲水的杯子作為一種容器,它可以用來裝可樂、裝牛奶、葡萄酒,這就是容器的通用性,但我們一般只有它來喝水,即常用性。“葡萄美酒夜光杯”,用茶杯喝紅葡萄酒就難顯現品酒的情趣和情調。類比CPU里要計算一組連續數的和,涉及到和、加法的次數、加數的位置等信息的存放,需要不同的寄存器。各種信息分別存放到什么寄存器中?從寄存器的通用性角度來看,可用累加器EAX來保存計數值,用計數器ECX來保存和等。同時指出不需要這樣標新立異,而要注重約定俗成,注意程序的可讀性和可理解性。當然,也可以指出在某些指令中是要專用某些寄存器的。
計算機作為人類史上的杰出人造產物,其設計之中有很多優美的地方,值得我們品味和欣賞、借鑒和學習,其中寄存器的命名、指令的命名都能很好地表達“望文生義”的理念。解讀這些理念是對學生欣賞能力的一個熏陶,也是人文和科技和諧統一的具體體現。
(6) 寄存器在什么時候使用呢?
雖然前面已從原理上分析了寄存器存在的必要性,但在一般的C語言程序中并沒有直接使用到寄存器。因此,我們使用VC++6.0環境下的調試工具顯示一個C語言程序及其對應的機器碼,如圖1所示,很清楚地展現寄存器在被不停地使用著,寄存器這些程序運行必不可少的幕后英雄走上了前臺。學生能夠初步看到編譯器的杰作。
在閱讀“z=x+y; a[x]=100”等語句對應的機器指令時,請同學猜測各指令的功能。在機器指令的單步執行中,觀察寄存器的變化,在互動中鞏固前面所學知識,極大地消除了對匯編語言、指令、寄存器等的神秘感。
(7) 能否現在動手體會一下所學內容呢?
從學習寄存器開始就可以使用調試工具來寫一些指令,然后執行這些指令,觀察指令的執行結果,并不需要有完整的程序才能使用調試工具。調試器TD的用法在文獻[5]中有較詳細的介紹。
(8) 如何理解寄存器中0、1的含義?
學生在前面課程的學習中,從宏觀的角度建立了計算機程序復雜、應用靈活、表象豐富的概念。而在匯編語言課程中,將從微觀的角度揭示計算機工作簡單、呆板的一面。在學習匯編語言之時,學生要轉變觀點,以機器的角度去考慮問題,把自己當成一個CPU,理解計算機工作的本質。這會引發許多值得深思的問題。
首先,讓學生牢固建立計算機世界是0、1世界的觀點,認識計算機是一個編碼的世界,人世間的萬事萬物映射到計算機中都是0、1,就如豐富多彩的物質世界只由有限化學元素組成一樣。復雜的對象由簡單的元素排列組合而成。其次,建立計算機(CPU)是機械工作的觀點,它是按部就班的處理指令,當根據CS:EIP取出指令后,才依序確定指令各成份的含義,進行解釋和操作,改變EIP,就會看到指令都發生了變化。這也就是說,0和1代表的含義和作用是在程序運行時才體現出來的,具有動態性和角色轉換性,例如對于文件拷貝程序、病毒程序而言,被拷貝或感染的程序只是作為一個數據對象;而在運行時,指令的各組成成份依其位置起到操作碼、地址碼、操作數等作用。第三,計算機并不關心0、1串對應現實世界對象的含義,而只是機械的處理;而對于編程者和程序閱讀者,他們會關心各對象代表的含義,他們達成一致性的理解是得益于對象出現的場景和雙方的約定,這也是人們編寫和閱讀程序的基礎。
3其他寄存器教學中問的問題
與數據寄存器教學一樣,我們也通過一系列問題來引導學生思考,學生在思考中尋求問題的答案,逐步加深對計算機工作基本原理的理解。
(1) 指令的地址放在何處?
(2) 改變EIP的值,TD代碼區有何變化?TD的數據區有無變化?
(3)C語言程序變量的定義和處理語句是混在一起的,在其對應的機器語言程序中,它們所占空間在一起嗎?
從取指令、EIP自動更新的方法、計算機基本的工作過程分析,不難給出其答案。將數據所占的存儲空間與指令所占的存儲空間分開,又是編譯器編譯時的功勞。該問題的解答自然會引出分段的概念。
(4) 在指令中出現的地址能夠是物理地址嗎?有必要是物理地址嗎?
(5) 在調度程序運行時,指令之間的相對位置會發生變化嗎?
(6) 能用16位的寄存器存放20位的段開始位置的物理地址嗎?
(7) 段從內存的何處開始?段的首地址放在何處?
教學實踐表明,學生在一個一個問題中受到了啟發,問問題和解答問題的能力和習慣逐步得到了強化,課堂充滿了活力和生機,激發了探究式學習的熱情。
4結束語
學習過程中最大的問題是沒有問題。一個無所思無所想的機械是沒有創造活力的。興趣是最好的老師,而體現興趣的一個重要方面就是心中存有“為什么、是什么、怎么樣、行不行、可以嗎”等問題。示范、引導、鼓勵學生從多角度多視野來問問題,培養學生細致入微的觀察能力,深刻全面的分析能力,使學生逐步養成主動求知的態度與習慣,這都將為創新活動奠定良好的基礎。
參考文獻:
[1] 江珊. 沒有問題就是最大的問題[M]. 北京:新華出版社,2009.
[2] 張建偉,陳琦. 從認知主義到建構主義[J]. 北京師范大學學報:社會科學版,1996(4):75-82.
[3] 王曉茜. 建構主義教學論探析[J]. 科學探索,2006(11):30-31.
一、匯編語言在軟件工程中的應用
匯編語言是建立在傳統機器語言基礎之上的,保留了傳統語言的優勢的同時,突破了傳統語言的弊端,能夠對關鍵程序代碼進行準確控制,且能夠直接訪問并控制相應的硬件系統,促使硬件發揮積極作用,從而確保系統穩定運行,不僅如此,匯編語言程序編譯后的目標代碼空間需求較小,執行效率較高,在系統軟件程序和過程控制程序中的應用比較廣泛、且普遍,其具有獨特的優勢,是其他語言難以取代的。但是,事物具有兩面性,匯編語言也存在一定不足,由于其基礎是機器語言,使得其對象沒有發生變化,沒有改變其是一種低級語言的地位,且理解難度也較高。在軟件開發中應用此語言,效率并不明顯,且針對硬件系統而言,且精確度并不高,兼容性較差,即便是類似硬件也不能夠通用。在軟件工程中,匯編語言憑借自身與硬件系統聯系密切,且能夠實現直接訪問,很多系統軟件都采用匯編語言進行編程,還包括一些對處理速度要求較高的程度也是通過匯編語言編寫的。不僅如此,在系統核心部分、軟件加密、解密及計算機病毒分析等方面也都具有廣泛的應用。在一些行業中,匯編語言是不可缺少的,只能夠選擇它,在熟悉的程序員手中,使用匯編語言能夠顯著提升效率及性能,但是,其弊端是需要利用更長的時間進行調整和優化。匯編語言在一些工業企業中,制作4位單片機等,以此來實現對工業生產過程的控制和管理,另外,針對需要快速及實時響應的場合,也需要選擇匯編語言,例如:儀器儀表及工業控制設備等,一般情況下,匯編語言應用于最底層,驅動程序及嵌入式操作程度等,隨著現代軟件系統不斷發展,匯編語言逐漸成為計算機專業學生必須了解和掌握的一門課程,能夠幫助學生認識計算機運行原理,夯實計算機相關知識基礎。
二、C語言在軟件工程中的應用
C語言自上個世紀90年代出現在計算機領域中,C語言作為一種高級語言,不僅具有人性化特點,還包括匯編語言的特性,受到軟件工程開發廣泛關注,其本質是高級與低級語言有機結合的編程工作單元,通過函數、循環等應用,能夠形成結構化設計方法,提高系統層次性、清晰度等方面具有積極作用,且方便用戶調試和維護。C語言自身優勢很多,運算符豐富,實現多樣化表達,滿足多元化需求,且數據類型較多,例如:指針型、實型等類型,能夠實現相對復雜的數據運算任務,相比較而言,C語言更具有靈活性,兼顧人性化及實用性兩方面,能夠直接對對位地址和字節地址進行操作,另外,運用C語言編寫源程序,不僅系統質量高,而且執行效率也很高為更好地移植和修改奠定了堅實的基礎,誠然,C語言也存在一定缺陷,靈活度高,使得其對語法規則要求并不嚴格,使得變量類型規范也受到一定影響,存在一定安全隱患,初學者剛接觸C語言時,難以更好地接受和理解,增加了學習難度。指針作為C語言在軟件工程中應用的關注點,針對與硬件聯系較多的程序,C語言編寫程序更為高效,且多種機型及操作系統也可以選擇C語言,幫助人們直接訪問地址,及時檢查語法錯誤,糾正錯誤,既能夠提高系統質量,也能夠有效提高系統運行效率。未來,C語言將會廣泛應用于系統程序編寫中。綜上所述,匯編語言與C語言自身都存在優勢及缺陷,單純的使用一種語言,難以發揮有效作用,且不利于軟件工程開發,至此,可以將二者有機結合,實現優勢互補,在程序編寫過程中,發揮各自優勢,更好地滿足用戶對系統的需求。
三、結論
根據上文所述,軟件工程作為一項綜合性工程,在促進社會發展等方面占據不可替代的位置,而匯編語言與C語言作為實現軟件工程開發的核心,二者均具有自身獨特的優勢及不足,為了更好地實現程序編寫,應將二者結合在一起,取二者之長,提高系統軟件可讀性、靈活性,進而為用戶提供更加優質的服務。
作者:邢俊杰 郭錦雯 劉嬋 單位:中國石油天然氣股份有限公司山西煤層氣勘探開發分公司
關鍵詞:匯編語言;集成開發環境;實踐教學
中圖分類號:G642
文獻標識碼:B
文章編號:1672-5913(2008)06-0019-03
1教學現狀及存在問題
在目前匯編語言的教學過程中,普遍存在的問題就是主流的微型計算機已經進入了64位時代,多任務的操作系統取代了DOS,而絕大多數高校匯編語言程序設計課程仍然是單任務操作系統(DOS)下的8086匯編語言,給學生的印象是跟不上時展的步伐。加之,匯編語言和機器的體系結構結合緊密,使用者需要對計算機的組成、硬件的控制和指令的解釋過程有比較清晰的掌握;程序的移植性不好;指令眾多,且同種類型的操作(算術、邏輯、轉移等)要根據操作數和狀態標志選擇不同的指令(如無符號的運算與帶符號的運算、條件轉移等);運算中要根據數據長度懸而選擇不同的寄存器;程序的編譯調試比較麻煩;編寫出吸引人們感官的程序比較困難。因此,學生在匯編語言的學習中容易產生厭煩情緒。有的學校減少了匯編語言的課時,還有的學校甚至干脆取消了這門課程。
2“匯編語言”課程的地位
匯編語言機器級在高層機器和低層機器間扮演了承上啟下的角色,是計算機及相關專業學生需要掌握的重要專業基礎知識之一。
從應用場合來看,匯編語言是能夠利用計算機所有硬件資源并能直接控制硬件的唯一計算機語言,也是除機器語言之外最接近計算機硬件的編程語言。匯編語言程序產生的代碼精簡、運行效率高,具有高級語言不可比的“時空”優勢;匯編語言在一些應用如嵌入式系統和工業控制中,匯編語言最最佳的甚至是唯一選擇的開發語言。在一些實際的應用系統中,人們往往會用匯編語言來徹底重寫某些經常調用的過程以期獲得更高的性能。
匯編語言為“計算機組成原理”、“計算機接口與通信”、“操作系統”、“高級語言程序設計”等相關課程提供了必要的基礎知識,如圖1所示。
圖1 匯編語言和其它課程的關系
從人才培養方面來看,計算機專業的學生不應僅僅滿足于利用他人開發的軟件和工具來解決實際問題,還應具備分析、研究原有軟件系統,改進、完善、提高原有系統功能的能力。匯編語言的教學將使學生受到更嚴密、更系統的程序設計及思維方法的訓練,為深入分析、研究、開發軟件系統打下良好基礎。
3加強實踐教學
為了提高匯編語言教學的效果,筆者認為應該從以下幾個方面入手。
(1) 清理認識上的誤區。在上第一堂課時,用一個課
時來講匯編語言的特點及其應用場合、它和高級語言區別、其難點在哪里、本課程該如何展開等內容,從而打消學生畏難和輕視的思想。
(2) 要充分利用好計算機輔助教學(CAI)的優勢,要讓課件“動”起來。目前普通本科計算機專業的教學大都采用了CAI教學,但大都是播放課件(如PPT),實質上是用鼠標代替了粉筆、屏幕代替了黑板。而且由于播放的速度遠快于板書,學生反映根本來不及仔細理解有關內容,效果反而不如板書。多媒體教學提供了視覺、聲音的特殊效果,在對重點、難點問題的講授中要充分利用多媒體教學的優勢。如講授指令ADD AX,[2000H],如果是靜態的課件,就是一句“這是一條加法指令,把累加器的內容和邏輯地址為2000H存儲單元的內容相加,運算結果送回累加器”。而動態的課件會先畫出一個模型計算機,然后演示該指令解釋的全過程:從CPU內存中取出指令、譯碼、數據尋址(從寄存器和內存中取得操作數)、啟動ALU運算、保存結果到累加器和影響狀態標志寄器。每一步都要圖示化出數據的變化和走向以及相應的控制時序。在聲音和顯示控制的程序設計教學中,更應展示多媒體教學的風采。多媒體教學豐富的動感效果能極大地增加學生對指令的感性認識,增強他們學習的興趣。當然,制作這樣的課件耗時耗力,學校應該切實加大對CAI教學的支持力度。
(3) 在匯編語言的教學中要加強和高級語言的比較教學。在學習匯編語言時,學生一般都具有了C語言程序設計的知識。在匯編語言程序設計的教學過程中,應該比較這兩種語言的編程特點、程序代碼空間、運行速度等,以加深學生對這兩種語言的理解。如在講授基址變址尋址方式中,可以用C語言和匯編語言分別實現對數組運算的實例來闡述。要加強高級語言(C語言)和匯編語言的混合編程的教學,充分闡述C語言結構化設計和匯編語言對機器低層(存儲器、寄存器、中斷處理、I/O)控制的優點。這樣即可充分調動學生的學習積極性,也可以培養學生解決具體應用的能力。
(4) 加強操作系統相關知識的滲透和虛擬模式下的編程教學。目前操作系統的核心部分是用匯編語言來實現的,如對CPU本身的初始化(包括定時器、中斷、I/0端口等的初始化);系統引導啟動程序的完成;在處理器的控制下從實模式進入保護模式,實現虛擬存儲器的管理和多任務的調度。將該部分引入到教學中是有必要的,能加強學生對操作系統中內核引導啟動與駐留、保護模式和實模式的切換、多任務的調度等知識的理解。在講授操作系統對程序的引導和進程的調用時,適當介紹計算機病毒的機理,以提高學生的學習興趣并擴展知識面。
(5) 要切實抓好實驗教學環節。課堂主體教學和一般作業很難讓學生真正領會本課程涵蓋的概念、原理、方法和技巧等。經驗表明,學習并真正掌握匯編語言程序設計的最好方式是充分實踐。實驗教學和課堂主體教學“兩手都要硬”,在課時分配上達到1:1。
4建立實驗教學平臺
傳統的匯編語言上機實驗一般是在DOS環境下的進行,如圖2所示。而DOS逐步被淘汰,目前流行使用Windows操作系統平臺,學生對DOS的使用相對陌生。盡管Windows保留了DOS的工作方式,可以切換到DOS提示符下操作,但是對建立文件夾(目錄)、進入文件夾(目錄)、刪除文件等操作,學生們常返回到Windows環境中來完成,顯然會影響上機的效率和增加編程的繁瑣,同時也不利于WIN32虛擬模式下的教學。
圖2 匯編語言程序開發的傳統操作過程
因此,必須建立基于Windows操作系統的W32匯編語言集成實驗環境,該環境是一個集編輯、編譯、連接、程序調試和幫助于一體的實驗平臺。筆者主持的課題組經過系統的調研、編程和測試已開發出一個匯編語言集成編譯系統,該系統已成功應用到本課程的實驗教學中,效果較好。系統的運行界面如圖3所示。
其次,要精心編寫實驗指導書和安排實驗內容,組織好課程設計。結合目前廣泛使用的PC機的Intel 80x86指令系統來開展教學,通過在集成環境下匯編語言的上機實訓,加深學生對指令系統和匯編語言程序設計的認識和理解。實驗的內容可以組織如下:
(1) 指令系統。用DEBUG調試工具來熟悉指令功能和尋址方式,掌握簡單程序的調試。通過實驗了解CPU的組成,熟悉8086/8088寄存器組、8086/8088存儲器組織、8086/8088標志位的意義。
(2) 匯編語言程序設計。包括順序程序設計、循環程序設計、分支程序設計、子程序設計和宏匯編程序設計等實驗。掌握各種程序結構的設計方法,了解宏匯編、條件匯編和模塊化程序設計等匯編語言程序的概念,掌握宏匯編程序設計的基本方法。
(3) 輸入輸出與中斷。包括輸入輸出程序設計、中斷處理程序編寫、常用系統中斷(如時鐘顯示、鍵盤和顯示器、使用鼠標的程序設計)控制等實驗。
(4) Win32匯編語言程序設計。包括32位微處理器與32位指令、保護模式下的32位匯編語言程序設計等實驗。
(5) 匯編語言與C/C++的混合編程。主要包括C/C++程序與匯編語言程序的連接、嵌入匯編與模塊調用等。
圖3 匯編語言集成開發環境
參考文獻
[1] 沈美明. IBM-PC匯編語言程序設計[M]. 北京:清華大學出版社,2001.
[2] KIP R. IRVINE. Assembly Language for the IBM-PC[M]. Prentic Hall INC,1993.
[3] 李學干. 計算機系統的體系機構[[M]. 北京:清華大學出版社,2006.
[4] 金海溶. 用實驗方法改革匯編語言的教學[J]. 計算機教育,2006,(1):36-37.
[5] 田慶. 匯編語言程序設計課程的教學探討[J]. 電器電子教學學報,2007,(2):14-15.
精品課程建設和立體化教學體系的構建,建立了一個開放、互動、積極、科學的和高效率的教學機制,為高校課程建設和改革指明方向,推動實踐教學和人才培養模式改革創新,整合教學資源,最大限度地滿足教學需要,提高教學效果[1]。“匯編語言程序設計”是高校計算機類專業本科生必修的專業基礎課,是操作系統、單片機和微型計算機原理與接口等核心課程的先修課。通過該課程的學習,培養學生設計和編寫匯編語言程序的能力,對計算機的底層編程有一定認識,使學生掌握時效性要求高、直接控制硬件的程序設計方法;另一方面,使學生理解計算機底層運行程序的機制,了解計算機的工作原理,為以后一些課程的學習打下良好的基礎,并使各門課程之間的知識融會貫通。實行立體化教學將在提高教學效率、增強教學效果、加大教學信息量、培養學生的實際應用能力、加強學生課后的學習能力等方面起到積極的作用[2]。
一匯編語言及其教學現狀
匯編語言是面向機器的程序設計語言。在匯編語言中,用助記符代替操作碼,用地址符號或標號代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。匯編語言直接描述機器指令,與機器指令相比更容易記憶和理解。通過學習和使用匯編語言,能夠感知、體會、理解機器的邏輯功能,向上為理解各種軟件系統的原理,打下技術理論基礎;向下為掌握硬件系統的原理,打下實踐應用基礎。學習匯編語言,向上可以理解軟件,向下能夠感知硬件,是我們理解整個計算機系統的最佳起點。
在以往匯編語言課程教學過程中,經常存在以下問題[3]:
第一,匯編語言是一種完全面向硬件的語言,和機器的體系結構結合緊密,使用者需要對計算機的組成、硬件控制和指令的解釋過程有比較本文由收集整理清晰的掌握才可以,學生反映難懂。
第二,匯編語言指令和偽指令眾多,語法難記,調試困難,程序的可讀性差。因此學生普遍反映這門課難學難懂。
由此,學生一開始就產生了畏學情緒,學習的能動性喪失,給老師的教學工作也帶來一定的困難。在多年該課程教學經驗的基礎上,我們對該課程的教學進行了深入的改革,在教學模式、教學方法和教學手段等方面提出并采用了一系列新舉措,明顯提高了教學質量和效果。
二關于匯編語言課程立體化教學模式的探索
1組建創新型教師隊伍,是精品課程建設成功的基礎
創新型教師應當是學術造詣深、授課經驗豐富、創新意識強、改革成果明顯的創造型高素質教師。合理的教學梯隊,能夠將多年積累下來的行之有效教學經驗和教學成果鞏固和發展下去。因此要形成師資質量優秀、師德高尚、人員穩定、教學水平高、教學效果好、年齡結構和職稱結構鈞合理的教師隊伍。目前匯編語言程序設計課程組教師7人,其中2名博士,4名碩士;高級職稱4人,中級職稱3人,教師隊伍結構合理,師資力量扎實牢固。
近年來,課程組積極加強在職教師的素質培訓,多次組織專題研討會和教研室會議,就課程的教學內容安排、教學中出現的疑難問題及如何提高教學效果等問題進行研討,共同提高授課水平。為提高教學技能,教學組定期和不定期地進行教學心得和教學方法的交流,并鼓勵撰寫教學研究論文。課題組還多次組織教學觀摩活動,一方面要求青年教師學習優秀教師課堂教學的經驗和技巧,另一方面也要求有經驗的教師結對幫助青年教師,提高他們的教學質量。鼓勵青年教師積極申請教學和科研項目,鼓勵青年教師出國深造等。嚴格按照省級精品課程評選標準進行建設,定期組織專家對本課程建設情況進行檢查和監督,每年召開不少于一次的精品課程建設工作研討會。積極開展課程建設,大力支持本課程省部級以上教學成果和教改項目的申報工作。
2教學方法改革,讓學生由被動接受變為主動求知
⑴啟發與鼓勵
啟發式教學是教學實踐中一個古老又新穎的課題。從孔子提出啟發式教學至今兩千多年的歷史中,啟發式教學日益展現出自身強大的功能[4]。
現代教學的指導思想是“學生為主體,教師為主導”,如何體現“學生為主體,教師為主導”,關鍵是學生能否有學習動機,而學生的學習動機并不會無緣無故地產生,在很大程度上和教師的主導作用有直接關系,要靠教師在師生的交流中去激發、去培養。特別是對于匯編語言這門指令多、語法難記、程序難讀的課程,啟發的過程中,可能對一部分同學還產生不了很好的效果,這
時就要啟發加激勵并行。例如在講解尋址方式時,不同的尋址方式如何區分?區分尋址方式的關鍵點在哪里?問題拋出后,給學生一段思考的時間后,為了讓學生能夠站起來主動回答這個問題,一定要對主動回答問題的同學給予適當的鼓勵和表揚,而且不管回答對與否,主要是先把學生的學習的主動性和積極性調動起來,使學生擺脫教師那種生澆硬灌的教學模式,掌握學習的主動權,主動探求蘊藏在教材中的知識,變“講授知識”為“主動求知”。
⑵探究式教學
探究性教學模式是指以“自主、探究、合作”為特征的學習方式對當前教學內容中的主要知識點進行自主學習、深入探究并進行小組合作交流,從而較好地達到課程標準中關于認知目標與情感目標要求的一種教學模式[5]。
探究式教學的核心是問題,所以教師在采用探究式的教學方法之前,需要根據教學目的和內容,精心考量,提出難度適度、邏輯合理的問題,以便全班學生帶著這些問題去探究,去挖掘自己的內在潛力,獲得新知、增長能力。教師為了達到讓學生自主學習的目的,要引導學生自己去發現問題,學生不明白時可適當點撥,誘導探究的方向。在探究教學中,教師是引導者,基本任務是啟發誘導;學生是探究者,其主要任務是通過自己的探究,發現新事物。因此,必須正確處理教師的“引”和學生的“探”的關系,做到既不放任自流,讓學生漫無邊際去探究,也不能過多牽引。最后教師引導學生對問題進行總結,對學習成果進行分析歸納,并可聯系實際,對當前知識點進行深化、遷移與提高。
探究式教學使學生的主體地位和自主能力都得到了加強,對知識技能的理解與掌握都達到了較深的程度,非常有利于創新思維和創新能力的形成和發展。
3改變考核方式,注重綜合能力的培養
打破以最終的一次期末考試成績作為學生學習好壞的唯一評價標準的模式。把評價學生的標準分成三部分:平時表現占20%,期末考試占40%,能力作業占40%。結合教學內容教師布置專題項目的學習內容作為能力作業,學生以小組形式通過課下調研、上網、各級圖書館資料查詢完成作業。最后學生要上臺講授自己的能力作業,通過評分競選優勝者。這樣就把由教師講授學生被動接受的過程變成學生主動獲取知識的過程。通過這種形式的學習,在引入競爭機制后,不僅培養學生的濃厚的學習興趣,而且學生可獲得更多課堂以外的專業知識,擁有了較強的自學能力、組織能力、人際交往能力和人與人之間的協作溝通能力。最后對于學生的評價是根據學生的學習成績和能力作業給予綜合評定,全面考察學生的綜合素質。
4課堂教學與網絡教學相結合
隨著網絡、通信技術的迅速發展,可以制作多媒體網絡課件、建立網上教學平臺。網上教學的優勢在于它不受課堂教學時間和空間的限制,可以在課程網站上補充、增加更多的相關專業知識與內容,建立更多的專業網站鏈接,有助于學生從更大范圍內了解學科與專業發展的現狀。借助于網絡教學,學生的自學、自測基本不受時間和地點的限制,方便了學生的自主學習;學生遇到任何問題,教師都可以通過網絡進行答疑,這些問題也可能是同學們共有的問題,教師的回答信息可供學生共享,這就從一對一的形式轉變成一對多形式,大大提高了教學效率。我們學院已經建立了一個比較完善的網絡教學平臺,供教師和學生使用。
5重視立體化教材建設
程序設計在高校計算機及相關專業的課程中是最主要的基礎課,而匯編語言程序設計又是程序設計的基礎,并且是微機原理、操作系統、編譯原理和系統結構等主要課程的基礎課,是一門軟硬件相結合、理論聯系實踐的課程。如果沒有匯編語言程序設計作為基礎,想要學深學透后續課程是十分困難的。學好匯編語言可以更好地深入理解和掌握計算機的硬件構成和工作機理,為進行計算機相關的應用和研究奠定基礎[1,2]。因為匯編語言是接近于計算機硬件的低級語言,它是聯系高級語言和計算機系統的橋梁,對于例如變量參數等在高級語言不容易理解的概念,用匯編語言講述則很清楚,而且對于理解計算機原理幫助較大。但是由于匯編語言是面向機器的一種語言,很多學生在學習過程中感覺比較難入手。
匯編語言作為一種用助記符表示的面向機器的符號語言,如何認識該課程的作用和地位,如何取得更好的教學效果?在長期從事該課程的教學過程中,筆者嘗試各種提高該課程教學質量的探索,有些體會,供大家參考。
1 目前《匯編語言程序設計課程》的教學狀況
匯編語言是面向機器的一種符號語言,它與機器的結構密切相關,是直接針對CPU、內存和I/O端口編程的程序設計語言。而目前的各種高級語言和網絡應用開發工具很多程序幾乎可以自動生成。然而機器語言、匯編語言和高級語言的程序設計語言體系仍然是計算機技術的基礎,也是計算機技術的重要知識體系之一。對于計算機及其相關專業的學生以及計算機愛好者來說,匯編語言程序設計是需要掌握的重要專業基礎知識之一。可由于匯編語言面向機器的特點,不僅需要硬件知識的配合,而且它有大量的語法規則需要記憶,加之上機調試單調且容易出錯,導致了大部分同學對于《匯編語言程序設計》課程的畏難情緒,學生初學階段普遍反映該課程難學,很多學生在學習過程中感覺比較難入手。
2 教學方法探討
2.1 合理組織課程內容
教學過程中為了讓學生掌握所學知識并用于程序開發,在課程教學中把握教材的難點和重點尤為關鍵。
(1)基礎知識的教學。
主要包括計算機硬件和指令系統的教學。對計算機硬件基礎知識的理解和掌握程度直接影響學生對匯編語言地理解和掌握,其中包括CPU內部的構成、總線的作用、寄存器的設置和用途以及內存的使用等是較難理解的部分,在實際教學中,可將相關內容融匯在一起來進行教學。通過應用如:圖片和動畫等形象化的方法將這些比較抽象的知識以較容易理解的方式展現出來。作為編程的指令系統對匯編語言程序設計而言是很重要的一部分內容,在進行該部分內容教學時,可以盡量通過演示程序來進行講解,解釋各條指令的運用方法、效果等,同時也可以適當應用動畫等方式演示指令的執行過程。
(2)程序控制結構的教學。
程序控制結構是程序設計教學中的重點,匯編語言中的選擇結構和循環程序結構程序設計則是此部分的難點。為了使學生更好地掌握,在教學過程中,可選擇部分典型的例題,如:解決漢諾塔問題和階乘的計算等。
2.2 教學手段上采用傳統教學與多媒體教學相結合
在教學過程中我們可以有選擇地使用多媒體教學,例如:用動畫模擬匯編語言中尋址方式、子程序調用的堆棧變化過程、中斷調用過程等。運用多媒體教學,增強學生的直觀感,加深對問題的。在講用匯編語言指令編程序的內容時,采用傳統的教學方法,教會學生如何思考、推理,如何用指令實現算法,培養學生的抽象思維、邏輯推理能力。傳統教學方法與多媒體教學相結合,將有助于提高學生的理解能力及綜合思維能力。
2.3 隨堂寫一些小程序增強記憶
在課堂上多加練習編寫小程序段會提高學生對指令的記憶及理解掌握。經過幾年的教學發現,課堂上練習少了以后,很多同學往往出現在編寫程序時有些指令寫不出來或不會用相關指令來組織程序。在課堂上練習,使學生可以增強記憶,對指令的使用方法有了進一步了解,能夠運用自如。
2.4 注重案例教學
案例教學法在當前面向各個層次學生的教學過程中已得到廣泛應用,具體是指教師需要根據課程教學目標與內容的要求,選擇相關典型的實例并組織學生學習、組織學生討論從而最大程度調動學生的創造性思維的教學方法。其具體執行有兩種形式。
(1)案例講解。
案例講解需要在理論知識講授之后進行,通過案例講解輔助,達到加深學生理解的目標。
(2)案例分析法。
案例分析方法的重點在于討論和分析,其主要目的是培養學生的創造性思維。案例的選擇應注意培養學生理解知識,提高學生分析問題和解決問題的能力。在匯編語言程序設計的教學中綜合運用案例講解法和分析法,能夠使學生盡快理解匯編語言程序設計的本質特征并迅速掌握編程方法。
2.5 注重實驗內容的實用性和趣味性
把實驗實踐環節與理論教學相融合,用實踐教學促進學科理論知識學習,激發學生學習興趣。對于任何一門計算機語言課程來說,實驗都是教學中非常重要的一個環節,實驗可以加深對理論知識的理解,提高學生的實踐動手能力。為了避免傳統的程序三大結構、數據組織與數值計算、代碼轉換和數制轉換等方面的枯燥無味的實驗,應將實驗內容和實際應用相結合,如將匯編語言和計算機的系統維護等實際相聯系,用匯編語言編寫簡單的設備驅動程序等等,增加圖形化的實驗內容等方法和手段,使實驗變得實用有趣,增強學生動手的積極性和提高學生的動手能力。
2.6 突出重點和難點
另外,在教學過程中,加強傳統的教學方法也是重要的,如在教學過程中要突出重點和難點;課堂上多做練習,課后注意答疑、輔導。
如:講解指令系統時部分指令應結合指令編碼(即機器指令)來介紹,這樣學生更容易理解和接受。
例如:講解轉移指令中段間轉移直接尋址和段間轉移間接尋址問題,如果只列出樣例:
段間直接尋址:jmp far ptr target1
段間間接尋址:jmp dword ptr addr [bx]
學生很難理解,具體怎么實現跳轉。但是如果結合指令編碼來講解上述兩條轉移指令則效果會有很大改進。
如:
段間轉移直接尋址指令編碼需要5個字節,如圖1所示。
也就是說,上例中Jmp far ptr target1 的target1給出的是轉移地址,即包括段地址和偏移地址。
而段間轉移間接尋址的指令編碼是2~4字節,如圖2所示。
指令中由MOD和R/M確定的雙字存儲單元中的內容分別送入IP寄存器和CS段寄存器,完成轉移。
【摘要】 隨著科學技術不斷發展,軟件工程取得了進一步發展。匯編語言與C語言作為兩種計算機基礎語言,在推動軟件工程發展等方面具有重要作用。本文將對匯編語言與C語言概念進行分析和研究,并闡述匯編語言和C語言在軟件工程中的應用,進而推動軟件工程可持續發展。
【關鍵詞】 匯編語言 C語言 軟件工程 應用
前言:軟件工程作為一門工程化方法,是構建及維護有效的、高質量軟件學科,廣泛應用于工業、銀行及航空等多個領域發展中,并發揮著積極的促進作用,而匯編語言與C語言是低級與高級語言,各自存在一定優勢及缺陷,如何更好的使用兩種語言受到越來越多的關注。至此,加強對匯編語言及C語言在軟件工程應用的研究具有現實意義。
一、匯編語言與C語言概念
匯編語言主要是指匯編指令集、偽指令集及使用規則的總稱,通過具有特點的符號作為助憶符號,用符號地址等組合成為匯編格式指令。C語言主要是指一種編程語言,實現簡便、效率高且要求低的運行的編程目標,兩種語言都是軟件工程編寫的基礎。
二、匯編語言在軟件工程中的應用
匯編語言是建立在傳統機器語言基礎之上的,保留了傳統語言的優勢的同時,突破了傳統語言的弊端,能夠對關鍵程序代碼進行準確控制,且能夠直接訪問并控制相應的硬件系統,促使硬件發揮積極作用,從而確保系統穩定運行,不僅如此,匯編語言程序編譯后的目標代碼空間需求較小,執行效率較高,在系統軟件程序和過程控制程序中的應用比較廣泛、且普遍,其具有獨特的優勢,是其他語言難以取代的。但是,事物具有兩面性,匯編語言也存在一定不足,由于其基礎是機器語言,使得其對象沒有發生變化,沒有改變其是一種低級語言的地位,且理解難度也較高。在軟件開發中應用此語言,效率并不明顯,且針對硬件系統而言,且精確度并不高,兼容性較差,即便是類似硬件也不能夠通用。在軟件工程中,匯編語言憑借自身與硬件系統聯系密切,且能夠實現直接訪問,很多系統軟件都采用匯編語言進行編程,還包括一些對處理速度要求較高的程度也是通過匯編語言編寫的。不僅如此,在系統核心部分、軟件加密、解密及計算機病毒分析等方面也都具有廣泛的應用。在一些行業中,匯編語言是不可缺少的,只能夠選擇它,在熟悉的程序員手中,使用匯編語言能夠顯著提升效率及性能,但是,其弊端是需要利用更長的時間進行調整和優化。匯編語言在一些工業企業中,制作4位單片機等,以此來實現對工業生產過程的控制和管理,另外,針對需要快速及實時響應的場合,也需要選擇匯編語言,例如:儀器儀表及工業控制設備等,一般情況下,匯編語言應用于最底層,驅動程序及嵌入式操作程度等,隨著現代軟件系統不斷發展,匯編語言逐漸成為計算機專業學生必須了解和掌握的一門課程,能夠幫助學生認識計算機運行原理,夯實計算機相關知識基礎。
三、C語言在軟件工程中的應用
C語言自上個世紀90年代出現在計算機領域中,C語言作為一種高級語言,不僅具有人性化特點,還包括匯編語言的特性,受到軟件工程開發廣泛關注,其本質是高級與低級語言有機結合的編程工作單元,通過函數、循環等應用,能夠形成結構化設計方法,提高系統層次性、清晰度等方面具有積極作用,且方便用戶調試和維護。C語言自身優勢很多,運算符豐富,實現多樣化表達,滿足多元化需求,且數據類型較多,例如:指針型、實型等類型,能夠實現相對復雜的數據運算任務,相比較而言,C語言更具有靈活性,兼顧人性化及實用性兩方面,能夠直接對對位地址和字節地址進行操作,另外,運用C語言編寫源程序,不僅系統質量高,而且執行效率也很高為更好地移植和修改奠定了堅實的基礎,誠然,C語言也存在一定缺陷,靈活度高,使得其對語法規則要求并不嚴格,使得變量類型規范也受到一定影響,存在一定安全隱患,初學者剛接觸C語言時,難以更好地接受和理解,增加了學習難度。指針作為C語言在軟件工程中應用的關注點,針對與硬件聯系較多的程序,C語言編寫程序更為高效,且多種機型及操作系統也可以選擇C語言,幫助人們直接訪問地址,及時檢查語法錯誤,糾正錯誤,既能夠提高系統質量,也能夠有效提高系統運行效率。未來,C語言將會廣泛應用于系統程序編寫中。綜上所述,匯編語言與c語言自身都存在優勢及缺陷,單純的使用一種語言,難以發揮有效作用,且不利于軟件工程開發,至此,可以將二者有機結合,實現優勢互補,在程序編寫過程中,發揮各自優勢,更好地滿足用戶對系統的需求。
結論:根據上文所述,軟件工程作為一項綜合性工程,在促進社會發展等方面占據不可替代的位置,而匯編語言與C語言作為實現軟件工程開發的核心,二者均具有自身獨特的優勢及不足,為了更好地實現程序編寫,應將二者結合在一起,取二者之長,提高系統軟件可讀性、靈活性,進而為用戶提供更加優質的服務。
關鍵詞:計算機教學;匯編語言;實驗;改革創新
中圖分類號:G642 文獻標識碼:B
文章編號:1672-5913(2007)18-0129-03
1 “匯編語言程序設計”課程存在的必要性
高職教育的目標在于培養具有組織、管理高新技術的生產,能夠操作、調試和維護高新技術設備,解決生產過程中遇到的各種實際問題的高素質技能型人才,與普通本科教育有著本質的區別。眼下許多高職院校的計算機專業已經進行了各種教學改革。這些方法和措施所強調的大都是:以提高學生實踐能力為主,理論夠用就行,應用型不強的科目該砍就砍。所以,在許多高職院校的教學改革中,“匯編語言程序設計”被大刀闊斧地砍掉了,或者合并到“微機原理”、“計算機組成”等其他課程中。但是,盡管與發展初期相比,計算機開發和應用技術已經有了根本性的變化,我們有了各種高級語言、有了網絡應用開發的許多編程工具,很多程序甚至可以自動生成,那么匯編語言是不是就真的應該退出歷史舞臺呢?筆者不這樣認為。
匯編語言是計算機專業及相關學科一門重要的基礎課程,是培養學生直接使用計算機硬件資源能力的一門課程。它不僅能幫助學生進一步理解計算機組成原理課程中的各種概念,而且還為其它課程如:操作系統、接口與通信技術和計算機控制技術等課程提供必要的預備知識。該課程在計算機學科課程設置中起著承上啟下的作用。不能了解和熟悉匯編語言知識不僅將導致學生知識結構的不完整,也可能導致學生認知水平降低、開發手段貧乏。在一些應用中,匯編語言甚至是開發工具的唯一選擇。
當前嵌入式系統軟件的開發非常熱門,其發展前景很廣闊,嵌入式系統較常用的操作系統Windows CE與Windows同樣是基于Win32 API的,Win32匯編語言的學習有利于開展后續課程“嵌人式系統”,為嵌人式系統的軟硬件開發打下了堅實的基礎。
總之,無論對于計算軟件還是硬件工作者來說,匯編語言都是十分重要的基本工具。因此,高職教育中計算機及其相關專業開設“匯編語言程序設計”課程是非常必要的。
2課程改革勢在必行
目前許多高職院校尤其是計算機專業的教學模式,大多是本科計算機專業的“壓縮版”,在制定教學計劃和大綱時,以名校相應專業的教學大綱作為自己的大綱,以名校選用的教材作為自己開展教學的教材,就如“匯編語言程序設計”這門課的教材,很多學校仍然采用清華大學出版社出版的《IBM-PC匯編語言程序設計》。這種教學模式盡管有其先進和優秀之處,但并不適合高職教育。而另一方面,匯編語言本身固有的復雜性,使學生理解起來比較困難。這體現在以下幾個方面:
1) 由于匯編語言與硬件聯系緊密,學生一般是在還沒有學習過相關硬件課程的情況下就開始學習匯編語言的,因此初學時不易理解,容易造成厭學情緒。
2) 匯編語言的內容豐富,需要記憶的內容很多,學生在學習一段時間后容易遺忘,從而造成跟不上課程的進度而放棄的現象。
3) 由于學習高級語言后產生的思維模式,使得學生在編制匯編語言程序時易出現一些語法或邏輯上的錯誤。
4) 在學習匯編語言的過程中,由于課程的特點,學生不能夠及時上機實現,造成學生感到課程抽象,很難理解,甚至覺得所學的知識無用,從而產生厭學情緒。
以上歸納的幾點,是我們在教學實踐中經常遇到的現象,要解決這些問題除了要改革教學方法以外,還要從學科特點和學生的實際出發,改革課程設置,完善課程的前后銜接,合理安排課程開設的次序等。因此,如何改革匯編語言課程以提高其教學效果和教學質量,使它跟上計算機技術的發展,是我們當前亟待解決的問題,而不是簡單地取消這門課。
為了使學生系統而全面地掌握匯編語言的編程方法,把握本課程的重點,消化難點,我們用實驗的方法對“匯編語言程序設計”這門課程的教學方法進行了改革,取得了一定的成績。
3行之有效的改革嘗試
在認清匯編語言的重要作用和明確其教學改革的緊迫性后,我們制定了改進的教學大綱,并據此編寫了相應的實驗教材講義,開始了“升級”匯編語言教學的改革嘗試。
3.1教學手段的改革
“匯編語言程序設計”課程一向都有上機實驗的教學要求,但教學主體是課堂教學,無論是實驗設計還是實驗強度都帶有強烈的“驗證性”色彩。而高職院校的培養對象區別于普通高等學校學生的鮮明特點是:思想活躍、智商與情商皆高、活動能力強,但普遍存在的問題主要是學習自覺性不高、單純憑興趣學習的觀點重、刻苦精神差等。因此,如果上課基本不聽,則驗證性實驗的基礎就不存在,實際教學效果也可想而知。所以對于這樣的學生群體單憑課堂教學和一般作業,要真正領會匯編語言程序設計課程所介紹的概念、原理、方法和技巧等,是很困難的。經驗表明,學習并真正體會和掌握匯編語言程序設計的最好方式是對它進行充分的實踐。把實驗作為學習匯編語言程序設計的主導方法,為學生提供了一個掌握匯編語言程序設計全新的學習方法,可以由此來體驗匯編語言程序設計的知識及其應用技巧。當然,通過實驗,也一定能夠很好地提高學生匯編語言程序設計能力。
區別于傳統實驗,我們的理想是,用實驗、實踐的方法來改革理論教學方法。所以我們把課堂搬到了實驗室,所有的課程都在實驗室完成,讓學生在實踐中激發對相關理論的興趣,再用提高了的理論水平來指導新的實驗和實踐活動。而我們在教學中采用“先做后說”的方法,把根據學科理論知識精心設計的實驗實踐環節與學科理論教學相融合,解決學生的認知困難,取得了很好的教學效果。
3.2教學內容的改革
我們在取舍教學內容時,體現了“淺、廣、新”的特點。其中,“淺”體現在重點介紹基本概念、原理和方法,而沒有過多地詳述深入和細節內容;“廣”體現在比較全面地介紹了指令系統和匯編語言所涉及的內容,形成比較完整的知識體系;而“新”更是我們教學改革的重點,介紹了簡化段定義程序格式、32位指令及編程、混合編程等。根據當前國內教學實際,我們仍然以16位8086CPU指令系統和基本匯編語言知識和程序結構作為基本的、重點的內容;而將新增內容作為獨立章節引出。采用微軟的最新版本匯編程序MASM 6.11,但主體內容仍然適合MASM 5.0版本。教學內容中,舍棄了一些過時的應用技術,而引入了一些實用的匯編語言程序設計方法,例如開發大型程序需要的模塊化方法、與C/C++語言的混合編程技術(尤其是匯編語言與Visual C++ 5.0/6.0的混合編程,非常受學生的歡迎)、新增的高級語言特性偽指令等。
新編的實驗教材包括7個方面共20個實驗。全部實驗結合目前廣泛使用的PC機Intel 80x86 CPU來開展教學,目的是通過一系列使用80x86和Windows環境下32位匯編語言的實驗練習,把匯編語言程序設計的概念和理論知識融入到實踐當中,從而加深對匯編語言程序設計的認識和理解。實驗練習幾乎覆蓋了匯編語言程序設計教學的各個方面,內容涉及匯編語言編程基礎、構建匯編語言編程環境、匯編語言程序設計、輸入輸出與中斷、Win32匯編語言程序設計及匯編語言與C/C++的混合編程等。
3.3考核方法的改革
為了保證教學效果,必須進行考核。傳統的匯編語言教學的考核方法多為筆試,再參考平時上機的表現,這種考核方法不能體現學生的真實水平。改革后的考核手段多樣化,由平時作業、實驗、論文、課程設計、階段性練習和期中、期末考試等多種環節組成,新編的實驗教材每個實驗后面都有學生自測和教師評價欄目,并且得到了切實認真地執行,這樣極大地改變了讀書為了考試,只有考試前才讀書,甚至連考試前都不讀書的狀況。
4實驗教學中應重視教材建設
教育的一個重要原則是“因材施教”,高職教育對人才的培養,應該體現到教材建設上。教材建設不僅要做好減法――適當地降低理論要求,也要做好加法――增加探究性實驗并在實踐環節中有突破性的創新。要根據學生求知欲望強的特點重視擴大學生的知識面,要利用學生動手能力強的特點來提高學生的實踐能力、創新能力和就業競爭能力,努力形成一個“什么都學過什么都會點”的積極局面。
教學內容要有可操作性、趣味性和適當難度。可操作性保證學生都能完成作業、實驗、設計而促進學生學習信心的建立,在一定程度上減少學生抄襲的理由,克服作業、實驗、論文普遍抄襲的弊病;趣味性體現“寓教于樂”以提高學生完成作業、實驗、論文的積極性;適當難度有助于激發優秀學生進一步鉆研的斗志。
實踐證明,“匯編語言程序設計”課程的實驗教學改革,取得了明顯的效果,也受到了學生的普遍歡迎,通過教學改革,學生提高了學習興趣,由被動學習變為主動學習,為后續課程的學習打下了堅實的基礎。
筆者在“匯編語言程序設計”課程實驗教學中所做的改革嘗試,目的是為了“拋磚引玉”,試圖引起更多的老師產生共鳴而繁榮計算機實驗教學。
參考文獻
[1] 周蘇,金海溶. 匯編語言程序設計實驗教程[M]. 北京:科學出版社.
[2] 李立冬,朱曉鷗. 微機原理與匯編語言基礎[M]. 北京:高等教育出版社.
由于《匯編語言程序設計》本身的特點具有理論抽象性、與硬件的相關性,使它難學難教,學生普遍反映這門課程難學、不容易理解、抽象。這門課程難學的另一個原因體現在上機實驗方面。上機實驗時是DOS黑白界面,檢查語法編譯程序繁瑣,結果不具直觀性。編寫程序復雜、調試程序復雜,所以很多教師講課時側重于理論教學,忽視實驗教學。另外,盡管有上機實驗的教學要求,但教學主體是課堂教學。無論是實驗設計還是實驗強度都遠遠不夠。帶有強烈的“驗證性”色彩。這些影響了學生學習時的積極性,許多學生在學習《匯編語言程序設計》的過程中往往感覺找不到頭緒。認為《匯編語言程序設計》是一門難學的課程,比較抽象,是“天書級”的語言,不像應用型課程非常直觀與生動。在學習《匯編語言程序設計》時積極性不高。因此,對匯編語言程序設計的教學改革勢在必行。
2、用建構主義理論分析匯編語言
教學現狀匯編語言與高級語言教學是有區別的,高級語言經常包含學生原有的經驗和知識,因此在對新知識的理解,通過運用已有的經驗建構起來,得心應手。而匯編語言中很多都是新的知識,并且與學生原有的知識有較大的差別,教師就要以學生為主體,利用網絡和多媒體手段創設有利的學習情境,幫助學生完成新知識的建構。在教育心理學領域中,建構主義作為一種新的學習理論,對學習和教學提出了一系列新解釋,認為認識是一種以主體已有的知識和經驗為基礎的主動建構過程。建構主義認為,知識不是通過教師的傳授得到的,而是學習者在一定的情境即社會文化背景下,借助他人的幫助即通過人與人之間的協作活動,利用必要的學習資料,通過意義建構的方式來獲得。建構主義更關注學習者如何以原有的經驗、認知結構、心理結構和經驗為基礎來建構知識、建構知識結構。學生是在教師的幫助下,利用自己特有的思考方式和學習方法,通過自己的經驗對外部信息進行主動的選擇、加工和處理,從而獲得自己的意義,建構自己的理解過程。建構主義這種強調以學習者為中心的學習理論,既強調了學習者的認知主體作用,又不忽視教師的指導作用。教師不是知識的傳授者與灌輸者,而是意義建構的幫助者與促進者。學生是信息加工的主體,是意義建構的主動者,這種學習方法更加強調學習的主動性、社會性情景與協作性。從教師的視角來理解建構主義,教師就應該重視學生自己對各種現象的理解,傾聽他們的看法,洞察他們這些想法的由來,以此為根據,引導學生豐富或調整自己的理解,在新知識的輸入階段、相互作用階段、操作階段和輸出階段等不同階段幫助學生完成新知識的建構。匯編語言本質上是機器語言,與高級語言相比又具有一些自身的特點:①匯編語言屬于低級語言,與硬件聯系緊密;②指令繁雜,編程繁瑣;③調試環境不易被學生理解與掌握匯編語言調試工具采用的是Debug,DOS下的命令交互方式,界面不友好;④課程中段才涉及程序設計和應用。按照建構主義理論,目前匯編語言教學方面的問題主要體現在以下方面:①教師通常將教材內容按部就班地灌輸給學生,教學內容順序安排不合理,并未真正地按循序漸進的原則來教授;②有的內容一講到底,以教師為主體,學生處于被動接受的地位,雖然教師教學很認真,但不和學生進行互動,不及時提供實踐的機會,使學生缺乏主動性,學習效果自然不理想;③教學實踐缺乏有效性。目前該課程上機實踐多數僅滿足于對理論知識的驗證,很少有具備針對性或直接面向實際問題的綜合訓練,學生難以對所學知識融會貫通,綜合運用所學知識解決實際問題的能力沒能得到很好培養。現有的例題特別是上機習題編排,不利于培養提高學生的匯編語言程序設計技能,更不利于通過上機實驗進一步調動學生語言的積極性。因此,在建構主義理論的輸入階段,受高級語言的影響,匯編語言學習者很難實現新知識的輸入;在建構主義理論的相互作用階段,原有的高級語言學習方法、理論基礎不能在這里形成知識與編程技能的正遷移,反倒阻礙了新知識與能力的習得;在建構主義理論的操作階段,由于學生不熟悉DEBUG調試環境,不能很好地駕馭上機環境,實踐脫離了理論,不能使新學習的知識與原有的認知結構之間產生較為密切的聯系。在輸出階段,由于作業或課程設計題目主要針對操作系統的某一子功能進行設計,無正誤判定,很大程度上影響了學生解決具體應用問題的信心與決心。
3、建構主義理論的匯編語言教學實施
3.1、隨著計算機發展,多次討論修改教學大綱
隨著PC性能的不斷攀升,內存的不斷擴大。匯編語言的優點已經不是特別突出,學生總覺得匯編語言指令繁多,枯燥難學。有了很多種高級語言,開發程序非常容易。他們非常不愿意學習匯編語言。哪些需要刪除,哪些增添,已經是需要重新討論的問題。教研室主要討論了以下內容:明確學習《匯編語言程序設計》的目的,如何與其他高級語言銜接,如何相輔相成。在整個計算機體系中處于什么地位。哪些陳舊的內容需要刪掉,哪些新的內容需要增添,這是教研室會議重點討論的問題。
3.2、多用形象的類比
匯編語言枯燥抽象,硬件結構又看不見摸不到,用類比的方法講授就顯得比較重要。用鮮活的例子來打比方可以起到事倍功半的效果。例如在講解尋址方式時,筆者就用類比的講解方法,告訴學生說,例如,一個小孩子對他媽媽說:“我要吃蘋果”,媽媽就給他拿了一個蘋果,這就是直接給出,是立即尋址方式:孩子大了一點,有一天又和媽媽講,我要吃蘋果,媽媽給了他一個盒子,孩子打開盒子,蘋果放在盒子里,這就像寄存器尋址,操作數在寄存器里;再大了一點,孩子又和媽媽說要吃蘋果,媽媽給了他一個紙條,上面寫著放蘋果的地址,例如在廚柜的第二個抽屜里,孩子按照地址找到蘋果。這就是直接尋址方式。給出操作數的地址;如果媽媽給孩子一個盒子,打開盒子,里面是一個字條,寫著放蘋果的地方,孩子按照地址找蘋果。這就像寄存器間接尋址,寄存器存放的是操作數的地址,按照地址找到操作數。通過這樣的講解使得學生很容易理解尋址方式的精髓,不必再去死記硬背,很快就能理解和記憶,在實際教學中效果良好。
3.3、實現對上機環境的知識建構
通過分析代碼在源程序和DEBUG下的區別,幫助學生利用已學得的匯編指令實現對上機環境的知識建構。代碼在源程序和DEBUG下的區別明顯存在的,源程序中的匯編指令經過編譯發了很多變化,不同版本的DEBUG對機器指令的反匯編結果也不完全一致。了解這些區別對學生熟悉和掌握DEBUG的作用非常巨大。
3.4、努力提高學生的學習興趣
根據高級語言程序“可視化”的特點,在開展案例教學時,利用DOS功能調用和BIOS功能調用來設計“可視化”的匯編語言程序,在相互作用階段幫助學生建構匯編語言的案例知識。匯編語言寫起來費勁,調試起來困難,怎樣才能引起學生學習的興趣是教師的一個非常重要的工作。因為平常所說的操作用匯編語言來寫都十分困難,即使是寫出來了,運行起來可能什么都看不到,學生很難有興趣去編寫更多的匯編程序,如何解決這一問題是匯編語言教學成敗的關鍵,用DOS功能調用和BIOS功能調用,就可以在很大程度上解決匯編程序運行起來什么都看不到的問題,如果運用得好可以產生非常好的演示效果,大大增強匯編語言運行的可視程度,從而極大地激發學生學習匯編語言的興趣。另外,還要特別給學生指出:如果在調試運行程序時系統中斷資源發生變化,一些使用BIOS中斷資源或DOS功能調用的程序,其執行結果可能會不正常。如有的學生在錄入源程序時為注釋漢字信息,而在WINDOWS平臺的DOS兼容模式下加載了漢字平臺,結果該讓喇叭鳴叫的地方而無此運行現象。
3.5、編制有利于學生興趣建構的上機習題集
深入分析匯編語言上機環境,結合理論教學進度,編制梯度合理、易學、易練、易調試,有較直觀的運行結果和一定趣味性的上機習題集,提高學生的程序設計和調試技能,促進匯編語言教學效果的進一步提高。
3.6、建構教師引導、學生主導的生態課堂
密切關注課堂生態環境,充分利用環境資源,引導學生進入生動活潑的教學氛圍。在匯編語言教學中,為了隨堂掌握學生的學習情況,經常要求學生把自己編寫的程序段寫在黑板上來講評,由于學生對知識理解和掌握的差異,在評講過程中,無法預料會出現何種錯誤,因此需要教師隨機應變,根據學生情況,總結代表性的錯誤總之,針對匯編語言的課程特點,將建構主義的理論與方法手段引入課堂,使課堂不僅成為知識傳遞的場所,更是促進學生完善和發展自我的舞臺,實現教學相長。
4、結束語