時間:2022-12-28 12:54:50
導語:在匯編語言程序設計的撰寫旅程中,學習并吸收他人佳作的精髓是一條寶貴的路徑,好期刊匯集了九篇優秀范文,愿這些內容能夠啟發您的創作靈感,引領您探索更多的創作可能。
程序設計在高校計算機及相關專業的課程中是最主要的基礎課,而匯編語言程序設計又是程序設計的基礎,并且是微機原理、操作系統、編譯原理和系統結構等主要課程的基礎課,是一門軟硬件相結合、理論聯系實踐的課程。如果沒有匯編語言程序設計作為基礎,想要學深學透后續課程是十分困難的。學好匯編語言可以更好地深入理解和掌握計算機的硬件構成和工作機理,為進行計算機相關的應用和研究奠定基礎[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段寄存器,完成轉移。
關鍵詞:匯編語言程序設計; 教學方法; 內聯編程
1課程的現狀
匯編語言不同于其它高級語言,必須要求編程人員有一定的硬件基礎,如對CPU的結構、CPU與存儲器等部件的數據傳送過程必須要有基本的了解,這樣才能學好這門課程。在教學過程中,我們發現學生對高級語言編程學習積極性高,對匯編語言課程缺乏興趣,因為課程本身指令復雜,規定繁多,再加上學習匯編指令前對CPU的相關工作過程理解不透,導致學生厭學,又由于本課程面對的低年級學生只有高級語言的基礎,習慣于高級語言的自然表達,初次接觸計算機硬件知識心理上有恐懼感,更難以適應繁雜的低級語言。
針對本課程的特點,對教學內容、環節、過程等進行了精心設計,下面就教學方法的設計、實踐教學方法、課程考核形式等方面進行的一系列改革進行詳細探討。
2教學方法設計改革
為了避免學生因指令復雜,規定繁多、難度大而對該課程產生畏懼的學習心理,教師有必要對教學內容進行合理組織,對教學過程進行精心的設計。
2.1利用FLASH技術,使教學難點容易理解
在多年的教學過程中,我發現學生在學習CPU結構這章節中,對介紹的CPU由哪些寄存器(名稱、大小)構成,各個寄存器的含義,用途,CPU與存儲器等部件的數據傳送過程,會覺得很抽象,多數同學都是采用死記硬背的方式,這章節是第二章節的內容,也是能否學好該課程關鍵的一章,如果理解不深,這無疑為后續的學習,特別是尋址方式的學習埋下了隱患。
針對這個問題,教師有必要對教學過程進行精心的設計。
在這章節中我們利用FLASH技術,把各種尋址方式下傳送指令的CPU與存儲器等部件的數據傳送過程以動畫形式展現給學生,使得復雜,抽象的過程變得直觀,學生理解比較容易,也加深了對尋址方式的記憶。
2.2對比法教學
目前計算機專業的課程設置中,《匯編程序語言的程序設計》課程通常是學習完C語言課程之后開始學習的。所以在教學中可以采用對比法來講解課程,對某些語法知識點和程序設計過程我們可以以C語言和匯編語言對應分析。
例如在介紹寄存器時,由于在一般的c語言程序中并沒有直接使用到寄存器。因此,我們使用vC++6.0環境下的調試工具顯示一個c語言程序及其對應的機器碼,讓學生看到編寫匯編程序寄存器的用途,加深了學生對匯編語言程序的理解。
int m=5,n=6,c;
004010E8 mov dword ptr [ebp-4],5
004010EF mov dword ptr [ebp-8],6
c=m+n;
004010F6 mov eax,dword ptr [ebp-4]
004010F9 add eax,dword ptr [ebp-8]
004010FC mov dword ptr [ebp-0Ch],eax
在介紹語法知識時,比如變量的定義:
C語言中的變量定義形式如下:
int c1,c2=0;
匯編語言的變量定義形式如下:
cl DW ?
c2 DW 0 轉貼于
2.3抽象概念的比喻教學法
在對段地址和偏移地址的講解過程中,可以采用比喻法,把操作數比喻成學生,把教室的房間號比喻成段地址,教室內每個座位編個號,編號就是偏移地址,要想到教室把某個學生找到,就要找到相應的教室號,再到對應的座位號找到這個學生,同理,要想把主存中的操作數找到就要找到段地址和相應的偏移地址,另外要讓學生知道每個教室里的座位號都是從0號開始編號的,也就是每個段里的偏移地址如果不特別指定,也是從0號開始編號的。
3實踐教學改革
3.1增強實驗環節,做一些實際項目
程序設計對于大多數的初學者來說有一定的難度。對于給定的一個實驗題目,許多學生往往感到無從下手。目前的上機實驗時間往往很短,常常是學生才剛剛有點入門,實驗環節就結束了;且課外實踐環節幾乎沒有,導致學生即使課內學的再好也不會應用。
在實驗設計方面可以先把一些經典的程序提供給學生,例如分支結構的設計、循環結構的設計等,讓學生在寫出C語言程序之后再設計匯編程序,找出兩者編程思維的區別。這樣通過一段時間的經驗積累,就能夠編寫比較復雜的的程序,由于上機時間有限,可以每次實驗課之后布置一些題目供學生選擇思考,讓學生課外分組來設計這些程序,題目的類型可以是研討型的讓學生從更多的角度去思考上機實驗過的題目,編寫出不同的程序;另一種為編程型,
例如可以設置這2道題目,音樂小鍵盤、貪吃蛇游戲等,以加強同學們的編程能力的訓練。
3.2采用與高級語言混合編程
目前越來越多的場合要使用匯編語言和高級語言進行混合編程,因此在教學時應強調匯編語言和C/C++的混合編程,并且這樣也可以為今后嵌入式系統軟件開發的學習打下堅實的軟硬件基礎。
在實驗課中可以借助 Visual C++開發工具,采用內聯匯編的方式,在 C/C++源程序中嵌入匯編指令序列完成一定的功能,并讓學生設置斷點然后跟蹤執行,同時注意觀察寄存器的內容和變量的值。這樣可以一方面讓同學們熟練掌握兩種語言的切換使用,另一方面讓他們感受到兩種語言各有特點。例如可以利用匯編語言處理高級語言中不方便處理的一些問題。
4課程考核形式改革
因為“匯編語言程序設計”是實踐性很強的一門課程,所以實驗課成績應該在總成績中占有相當大的比重。目前大多數高校的匯編語言課程的實驗課成績只占很小的比重,即理論知識往往占課程期末考核總成績的70%~80%,這樣往往會導致學生不得不將大量的精力放在理論知識的學習中,結果只會造就大批的應試高手。在教學中,我們遇到過有的學生考試試卷能考90分以上,卻連最基本的計算機操作都不能動手。今后這門課程的考核,實驗課成績應該提高到占總成績的1/2。老師在實驗中應該營造出互動氣氛,檢查每個學生的完成情況同時做好記錄,根據學生的實際動手情況給出他們的平時實驗成績,而不是只依據交上來的實驗報告,這樣也能杜絕抄襲之風。
5結束語
通過教學改革的實踐,在一定程度上提高了他們對本課程的學習積極性,又降低了學習難度。良好的教學效果是永遠追求的目標,在今后的教學中,我們還需要不斷進行探索、研究和嘗試,不斷更新觀念,發現自身教學過程中的問題,找到解決辦法,提高教學效果。
參考文獻
[1] 王成耀.80x86匯編語言程序設計[M].北京:人民郵電出版社,2008(第2版).
[2] 卜登立,彭嵩松,唐衛東,龍侃.“匯編語言程序設計”課程教學改革研究與探討[J].井岡山學院學報,2009,30(10):124-127.
關鍵詞:匯編語言 I/O 子程序 庫
中圖分類號:TP313 文獻標識碼:B 文章編號:1002-2422(2008)03-0086-02
設計的I/O子程序庫包括16位版本和32位版本,可分別應用于16位和32位匯編語言應用程序,提供的子程序功能包括不同數制和字符串的輸入與顯示,狀態標志的顯示,滿足匯編語言程序設計的通常要求。
1 設計方案
1.1子程序功能需求
根據在匯編語言程序設計中的通常要求,子程序所提供的功能主要包括鍵盤輸入和顯示器顯示,輸入和顯示的內容可以是不同的數制與字符串格式。如表1所示。
1.2子程序庫結構
為了方便整個子程序庫的設計,設計了一些通用予程序。在實現提供給用戶使用的子程序時,充分利用這些通用子程序,簡化了子程序的代碼編寫,減少了子程序庫的長度。主要子程序之間的關系如圖1所示。
字符輸入和顯示子程序READC、DISPC是整個子程序庫輸入輸出的基礎。利用這兩個子程序實現了字符串輸入和顯示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同數制數據輸入和顯示的基礎:通過調用READMSG讀入字符串,然后調用字符串轉換子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分別將字符串轉換為不同數制的數據,從而實現了不同數制輸入的子程序READBIN、READHEX、READUI、READSI等;通過調用DISPMSG顯示字符串,然后調用數據轉換字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分別將字符串轉換為不同數制的數據,從而實現了顯示不同數制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
設計的16位和32位的子程序庫提供的子程序功能都是相同的,區別在于16位的字符輸入子程序是利用DOS系統調用實現的,而32位的字符輸入子程序是利用WIN-DOWS API函數實現的。其他子程序則可以通用。
各個子程序匯編后,由庫管理工具LIB.EXE生成16位子程序庫I/O16.LIB和32位子程序庫I/O32.LIB。
1.3參數傳遞
匯編語言子程序的參數傳遞可以采用寄存器傳遞,共享內存變量和堆棧傳遞三種方法。堆棧傳遞參數時,可以用MASM提供的偽指令PROTO來聲明子程序,用INVOKE來調用子程序。這兩個偽指令在聲明和調用子程序時相對于CALL指令和PROC偽指令要簡潔得多。使用堆棧傳遞參數也是高級語言通常使用的子程序傳遞參數的方法,用堆棧傳遞參數的子程序可以被高級語言調用。子程序的返回參數也遵循高級語言子程序的規范,采用寄存器EAX返回子程序的出口參數。
1.4宏命令
調用子程序需要用專門的調用指令并遵循一定的格式要求,這對于初學者來說有一定的難度。當子程序的參數比較多時,調用子程序的編碼量較多,設計了調用子程序的宏指令,利用宏指令來實現對應的子程序調用,格式簡單,使用方便,尤其適合初學者應用。為提高代碼的復用性,被調用子程序的聲明和宏定義都放在包含文件IO.INC中,在匯編語言應用程序中用INCLUDE語句包含該文件即可。
關鍵詞: 比較教學法;匯編語言; C語言;實踐;教學效果
中圖分類號:G642 文獻標識碼:A 文章編號:1009-3044(2013)10-2402-02
匯編語言程序設計是計算機專業學生的專業基礎課、必修課,屬于低級語言的程序設計,是硬件類課程和操作系統的先行課和基礎課,是高級語言程序設計的擴展。匯編語言是架起軟件、硬件知識的一座橋梁,它不但有利于學生理解計算機的工作原理,而且對學生程序設計能力的培養起著十分重要的作用。
在匯編語言課程教學中發現,匯編語言相對于其他高級語言來說缺乏直觀性與生動性,是一門比較抽象和理論化的課程,學生養成了“重軟件、輕硬件”的學習態度,往往會選擇一些容易學習的高級語言而忽視了對匯編語言的學習,因此在教學中普遍存在“教師難教,學生難學”的問題。
如何改善匯編語言課程的教學效果和教學質量,提高學生學習的興趣和主動性是當前急需解決的問題。將比較教學法引入到“匯編語言”的教學中,該教學方法注重將匯編語言和
高級語言進行比較教學,能夠極大提高學生的學習興趣,取得良好的教學效果。
1 比較教學法在匯編語言課程教學中的應用
1.1 比較教學法
比較教學法( 或叫類比教學法)是指在教學活動中將兩個或兩個以上的認識對象放在一定的條件下,按照同一標準進行對照比較,從而確定認識對象屬性的同異、地位的主次、作用的大小、性能的優劣、問題的難易或認識的正誤深淺,以達到辨識、了解和把握認識對象之目的的一種方法[1]。比較教學法是最常用的教學方法之一,也是使用范圍最廣的教學方法之一。
由于學生在學習匯編語言之前已經至少學習過如C這類高級語言,所以采用比較教學法不僅能更好地理解匯編語言,同時加深對高級語言的理解也有很大的好處。在實際教學過程中,可以將新的陌生的東西(匯編語言)和舊的熟悉的東西(C語言)做比較,找出它們之間相同的地方和不同的地方,然后進行差異化的學習,重在存同求異,這樣就會事半功倍,達到理想的教學效果。
1.2 比較教學法在匯編語言課程與C語言課程教學中的實踐
高級語言(如C語言)和匯編語言兩者都是程序設計的工具,在程序的基本功能和程序設計的基本問題上均有相應的實現機制,同時在某些方面是相通的,換句話說許多用匯編語言能作的工作也可以用C語言來完成。
2)兩操作數的類型匹配問題。
2 結論
限于篇幅,以上僅舉2個例子來說明教學過程中如何將匯編語言和C語言進行比較教學,已經取得了很好的教學效果。由于語言的相通性,實際上在整個匯編語言教學中還有很多知識點可以把C語言知識貫穿其中。通過比較教學,一方面學生可以更好地學習匯編語言的相關知識,極大地提高學習效率;另一方面,更提高了學生對C語言的更高層次上的認識,間接地對其他學科的學習也起到了很大的幫助作用。
參考文獻:
[1] 李運模.比較教學法論略[J].中南民族學院學報:人文社會科學版,2000(3).
[2] 沈美明,沈冬嬋. IBM-PC 匯編語言程序設計[M].2版.北京:清華大學出版社,2001.
[3] 譚浩強.C程序設計[M].3 版.北京:清華大學出版社,2005.
“匯編語言”課程是計算機科學、自動化及電子信息類專業的一門核心專業課程。[1-2]對于計算機及其相關專業的學生來說,匯編語言程序設計是需要掌握的重要專業基礎知識之一。了解和熟悉匯編語言可以優化學生的知識結構,提高學生的認知水平,增加學生的程序開發手段。相較于快速發展的可視化高級語言,作為低級語言的匯編語言,可讀性較差,比較繁瑣,不符合自然語言表述,學生普遍感到難學。因此,“匯編語言”課程如何優化教學質量、提高教學效果,是任課教師面臨的一個重要問題。[3]本文結合實際教學體會,就如何提高“匯編語言”課程教學效果進行了分析與探討。
一、匯編語言程序的特點
計算機是一個編碼的世界,只能識別和處理由“0”和“1”組成的二進制代碼的機器語言,這種指令代碼編寫易出錯且不易修改。于是,人們發明了“指令的助記符”,用助記符(mnemonic)代替操作碼,用標號(label)和地址符號(symbol)代替地址碼,用這種符號系統形成匯編語言。[4]因此,匯編語言本質上就是機器語言,只不過更容易被人讀懂且更容易記憶。使用匯編語言編程,可以對計算機內部硬件進行直接控制,合理地安排機器內部的各種資源。歸納起來,匯編語言程序有以下幾個主要特點:
一是與硬件的相關性。匯編語言與機器指令一一對應,不同類型的cpu內部硬件結構不同,因而有不同的指令系統,相應的匯編語言程序也就不同,其通用性、可移植性比較差。二是執行效率高。由于匯編語言與硬件相關,它可以有效、直接地控制機器,程序的執行代碼短、速度快,是其他高級語言難以企及的。三是編程、調試相對困難。為了有效地控制機器,匯編語言指令涉及到硬件資源的各種細節,如標志、堆棧、寄存器、存儲單元等。相對高級語言,其編程及調試比較繁瑣、復雜。[5-6]
二、明確教學目的,優化教學內容
1.激發學生的學習熱情
“匯編語言”與許多課程聯系緊密,如圖1所示,它是“操作系統”、“計算機接口技術”、“計算機組成原理”、“嵌入式系統”等課程的基礎,在開發嵌入式系統時更是必不可少的語言。“匯編語言”課程學習起來比較枯燥、學習周期較長,不像高級語言那樣上手比較容易且能很快見到效果。因此,應教育學生少一些急功近利的思想,應著眼于長遠的、全面的技術成長。有條件的教師可以將自己相關的科研成果帶入課堂,說明匯編語言有著廣泛的應用領域。在授課過程中,注意拓寬學生的知識面,結合具體的應用,激發學生的學習熱情。
2.優化教學內容
不同于高級語言的教學模式,匯編語言是一種硬件編程語言,是連接軟硬件的橋梁。一方面,匯編語言與芯片密切相關,學習匯編語言時應具備一定的硬件基礎知識,需要時穿插相關知識點,回顧前導課程的相關內容,如計算機結構等;另一方面,又不需要緊跟著產品來講授,只要選擇一種典型的匯編語言指令集講清楚、講透徹,使學生掌握學習與思考的方法,今后遇到其他的芯片,也就可以舉一反三,觸類旁通。
具體到一種匯編語言指令集,應突出其重點、難點,如分段管理技術、尋址方式、堆棧管理、中斷技術等。為了便于后續程序結構的學習,在學習尋址方式和指令集時就教會學生使用debug,講解了常用的調試命令,使學生能盡快上機實踐,驗證指令,編寫短小程序,看到運行結果,從而加深影響,鞏固所學的內容。由于匯編語言的指令很多,涉及的知識點抽象,剛開始接觸這門課程時,學生往往不太適應,前后的知識點容易混淆,教師應及時對講授過的內容進行比較與小結。課堂上,應適當增加講授例題的數量,不同的教學階段,例題的側重點不一樣。開始階段,例題主要涉及匯編語言格式與匯編語言指令;中間階段,例題講授的是如何用匯編語言指令實現匯編語言流程;后續階段,例題重點講解匯編語言程序設計算法的確定,分析、解決問題的思路與方法。而在學生掌握了基本內容及重點內容的基礎后,教師應提綱挈領,從系統的整體角度分析“匯編語言”課程在整個硬件知識體系中的作用,讓學生從更高層次理解、使用匯編語言。
3.多種教育手段相結合
隨著現代教育技術快速發展,多媒體技術在教學中有著廣泛的應用。在“匯編語言”課程中,可以利用多媒體課件圖文并茂的特點吸引學生的注意力,活躍課堂氣氛。例如,可以通過動畫形式將尋址過程、堆棧變化、循環移位、子程序調用、中斷調用過程等表示出來,將復雜的、抽象的問題簡單化、形象化,提高教學效率。而在確定匯編語言程序設計的算法,用匯編語言實現編程,培養學生的推理、思維能力時,采用傳統教學方法。對不同的知識點,結合不同的教學方法,有利于學生對不同教學內容的理解與掌握。
三、注重實驗環節,提高教學效果
1.實驗平臺及實驗內容
匯編語言程序設計要經過編輯、匯編、連接和調試等過程,如圖2所示,傳統的上機實驗一般是在dos操作系統環境下進行的。目前流行的是windows操作系統平臺,學生對dos操作環境相對陌生。為了提高上機的效率,應摒棄dos環境,采用基于windows操作系統的匯編語言集成實驗環境。在該環境下,可以方便編輯匯編語言程序,使用下拉式菜單或快捷按鈕進行匯編、連接及調試等工作,并可以預先設定段定義、過程定義等。
在實驗內容安排上,應根據授課的進度及學生的掌握程度,并與教學目標相匹配,精心選擇一些有代表性的、有實用價值的內容,盡量避免實驗內容過長、過雜等問題。實驗的內容應包括:指令系統及調試工具debug使用;匯編語言程序設計上機環境及過程;順序、分支、循環基本結構程序設計;子程序設計和宏匯編程序設計;中斷調用程序設計;綜合性實驗。
轉貼于
2.發揮學生在實驗中的主體作用
在整個實驗過程中,以學生為主體,教師只是起到組織、引導的作用。
實驗前,教師講解難點、重點及有關注意事項,點到為止,也可以先給出相關的問題,讓學生去思考、去觀察。要求學生對實驗內容進行預習,并在下次上實驗課時用提問、抽查等形式檢查。學生通過預習帶著問題進行實驗,可以提高學習的主動性,且能對知識點的領悟更深刻。
實驗中,鼓勵學生按照自己的思路去編寫、調試程序。對于學生在實驗過程中提出的問題,一般不直接給出答案,而是引導學生通過學過的理論知識自己尋找解決的方法。只要能達到預定的實驗目標,對實驗步驟及過程不做過多要求。對學有余力的學生,鼓勵他們在完成規定的實驗內容后,對補充題或對自己設計的問題進行實驗;而對基礎較差的學生,則鼓勵他們獨立地解決問題。
實驗后,要求學生及時對實驗進行歸納、總結,并撰寫實驗報告。
3.實驗實踐貫穿整個教學
“匯編語言”課程有其特殊性,只有通過不斷的上機實踐,學生才能加深對理論知識的理解,提高編寫程序的能力。因此,要轉變觀念,重視實驗教學,避免實驗教學流于形式。程序設計是一個調試修改語法及邏輯錯誤,最終得到正確程序的過程。教師應充分利用多媒體等手段,引導學生動手編程,通過實際例題觀察數據流變化,培養學生調試、修改程序的能力和意識。教師演示與學生實踐可以穿插交替進行。如果學生對自己編的程序沒有把握,則鼓勵他們上機進行驗證,反復地調試、修改、運行。對有些驗證性實驗,可以用作業的形式要求學生在課外完成。如用debug調試工具驗證各類指令的功能和格式,對標志位的影響,查看數及字符在存儲器中的存放形式,堆棧的變化等。既加深了學生對所學內容的理解,又為匯編語言程序設計打下了基礎。
本課程的目的是使學生掌握程序設計的方法,學會用匯編語言編寫程序。結合各章節所學的知識點,每次實驗要求學生編寫相關的程序,檢驗學生具體知識點的掌握程度。注意加強前后實驗之間的相互聯系,融會貫通各個知識點。隨著課程進展的加快,實驗內容應從比較簡單到相對復雜,再到課程結束階段,經過知識及多個實驗經驗的積累,使學生具備一定的程序設計能力。
【關鍵詞】C語言 編程 結構化
1 C語言的編程特點
1.1 C語言的定位
很多人都普遍的認為C語言是在B語言的基礎上發展過來的一種高級編程語言。然而從編程語言的層次結構方面來說,我們應該認為C語言,是在匯編語言的基礎上發展而來的,它比匯編這類編程語言要高級,但是比一些可視化的編程語言又低級,所以準確來說,C語言應該算是中級編程語言,或者稱為準高級程序設計語言。目前很多高級程序設計語言都是在C語言的基礎上發展而來的,或者至少借鑒了C語言程序設計的思想。80年代初,Bjarne Stroustrup在貝爾實驗室對標準C進行了改進和完善,C++得以誕生,使得面向對象的程序設計思想得以提出和落實;21世紀初,人們將C語言和單片機相結合,開發出來了應用于單片機編程的C51語言,使得單片機的程序設計從反復的匯編語言設計中抽身出來,大大的提高了程序的設計效率。
可見C語言在整個編程語言的發展過程中屬于承上啟下的作用,同時其自身的應用領域又在不斷的更新和發展。
1.2 C語言的編程特點
通過上述C語言的定位可知,它既具備高級程序設計語言的結構性和層次性特點,同時也兼具了低級程序設計語言的實用性。
(1)用相應的C語句可以實現對微機操作中的字節、地址等進行直接訪問。
(2)基于函數的結構化特點,使得復雜的軟件系統可以由多個人,以設計子函數的形式,分別各自進行程序開發。之后進行函數的匯總,最后由主函數,按照既定的程序流完成對各個子函數的調用就行。
(3)豐富的數據類型,尤其是指針類型,可以很方便的應用于復雜數據和大數據的訪問和處理。
(4)由于C語言基本上不向低級語言那樣直接涉及到對硬件的操作,所以C語言程序往往具有很好的通用性,方便程序移植。
2 C語言的編程技巧
2.1 扎實基本工
在進行C語言程序設計之前,首先要熟悉運算符、表達式以及各鐘類型數據的定義和使用方法,其次對順序、分支和循環三大程序結構要有較好的把握,并熟練使用while循環、for循環、switch語句等。如果要在程序的設計上有進一步的提高,那就需要對“指針”能夠進行熟練的使用了。指針可以用于表示變量,但更多的是用于代表數組、存儲地址以及函數地址。在代替不同變量時將返回不同的值,可以說指針的功能十分強大。對其熟練使用有助于程序設計的簡潔和便利。
2.2 立足C語言的結構化的特點,熟練程序設計基本構型
C語言典型的特點就是結構化,在進行具體的程序開發時,應該首先要根據設計的軟件項目,然后進行任務的細分,由于C語言不需要編程人員去配置硬件資源,因此程序設計人員可以把更多的精力放在各個細分任務的子函數設計上,考慮用最簡單的程序結構去實現。在數據類型的選擇上,能夠用短數據類型就盡量用短數據類型。
另外,為了提高程序代碼的執行效率,建議C語言程序設計人員要了解C語言程序最終運行的硬件的基礎機構,是在微型計算機上運行,還是在單片機上運行。在了解硬件平臺結構及內部資源的前提下進行相應的程序設計,將有助于提升程序的運行效率。
3 C語言的實踐應用
3.1 混合編程
很多程序設計人員都認為C語言比匯編語言高級,所以認為沒有必要去學習和了解低級語言。其實這種思路是及其錯誤的。匯編語言之所以稱之為低級語言,是因為其更加貼近于硬件。在編程時一定要明確的在代碼中描述清楚,數據如何從一個存儲單元送入另一個單元,因此顯得編程復雜,由于其直接和硬件打交道,所以被稱為低級語言。但是其運行效率卻是最高的。所以在C語言程序設計上要有質的飛越,有必要了解匯編語言的編程思路和理念。有條件的話可以將C語言和匯編語言混合編程,從而發揮出兩類編程語言各自的優點,達到設計程序的最優化。
在進行C語言和匯編語言的混合編程時,無論是采用C語言調用匯編,還是匯編調用C語言,還是C語言嵌入匯編的方式,都應該對調用關系、各模塊的連接以及參數的傳遞進行妥善的處理。對于調用關系,則需要對調用的函數和過程進行說明;通過明確函數和變量的命名以及存儲模式的關聯性,從而實現各模塊的有效連接;通常情況下往往通過堆棧的方式來實現參數的傳遞。
3.2 C語言在工程上的應用
C語言在電力電氣系統、交通控制系統以及機器人控制方面都有廣泛的應用。下面以工廠通風控制系統的C語言程序設計為例來加深對C語言軟件編程思想的理解。
工廠通風控制程序的設計時采用模塊化得設計思想,即單獨的編寫初始化函數void Initial(void);中斷處理函數void**(void)interrupt;數據采集函數unsigned char ADconvert(unsigned char address)以及其它函數等。然后由主程序負責對各個子函數的調用,從而實現對工廠通風系統的控制。簡化的主程序如下:
main( ){ ... Initial(void);
while(l){ReadAi( );ADconvert(unsignedchar address);
DataChange( ); DisPlay( ); …}
整個系統由于需要不停的對工廠數據進行采集,所有主程序的結構就設置成了循環結構,當通風控制系統有序的進行準備工作之后,通過調用初始化函數,程序就開始進入主循環,主循環中通過調用采集程序,完成對測量對象的循環檢測以及對顯示程序,數據處理函數的循環調用。一遍又一遍的不停循環執行主程序。在這個主程序循環的過程中,如果有異常情況發生,則隨著中斷觸發事件的發生,將進入中斷響應,實現對中斷函數的調用。
4 總結
C語言作為編程語言中經典的一類程序設計語言,因其結構化、可移植化、編程簡介的特點,被廣泛的應用國民生產的各個領域。而隨著信息技術、互聯網技術以及物聯網技術的飛速發展,未來C語言的應用領域將變得更加廣泛。對C語言在軟件編程方面的研究和分析將變得更有意義。
參考文獻
[1]顧泰龍,李遠靜.基于C語言的計算機軟件編程實驗研究[J].軟件工程師,2013(08).
[2]李強.計算機軟件開發語言的選擇探討[J].電子制作,2013(09).
作者單位
(蘇州大學計算機科學與技術學院,江蘇蘇州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”則是程序調用?;分羔槨R虼?,從匯編后的代碼中學生可以看出局部靜態變量存放在數據段中,函數執行結束后其存儲空間不會被回收,而局部動態變量則存放在程序調用棧中,函數執行結束后其存儲空間則被調用棧調整出去。學生通過對高級語言匯編或反匯編輸出,還能進一步了解關于一維數組的指針和一維數組首地址的指針以及類中普通成員函數和虛函數等編譯層面的區別。
3.4 以實際應用激發學生學習興趣
興趣是學習最好的導師,教師要通過有應用價值的實例激發學生學習的興趣,讓學生了解匯編語言的用武之地,例如,可以向學生講解硬件驅動、屏幕取詞、單片機開發、緩沖區溢出攻擊的原理;同時讓學生寫一些簡單而力所能及的小程序,如基于280單片機的電子廣告牌控制程序,這樣一方面提高學生匯編實驗的動手能力,另一方面也加深了學生對操作系統、微機接口等相關課程的理解。
4 結語
實踐結果表明,與往屆學生匯編實驗情況對比,使用C語言中嵌入匯編代碼方式的學生能很快上手開展匯編實驗,明顯降低了學生匯編實驗入門的門檻,提高了學生匯編實驗的效率;通過匯編程序中采用結構化程序的方法,學生能快速寫出多重嵌套的匯編程序,能明顯增強學生閱讀和編寫復雜匯編程序的能力;借助反匯編學習高級語言只能提高基礎知識較好的學生各科知識點串聯和貫通的程度,部分學生由于基礎知識較差,融會貫通多科知識點還較困難;以實際應用激勵學生也只能讓少部分可以靜下心來刻苦鉆研的學生比較感興趣,部分學生感覺題目綜合性強,涉及知識點多,課后不認真鉆研,很容易就會對實際應用失去興趣。經過多方面嘗試,教學雖然取得一定的效果,也暴露出一些不足,這些也成為我們匯編教學和實驗中需繼續思考和解決的問題。
參考文獻:
[1]張洪業,宋人杰,周欣欣,“匯編語言”教學改革與實踐[J].計算機教育,2009(21): 60-61.
[2]沈美明,溫冬嬋.IBM-PC匯編語言程序設計[M],北京:清華大學出版社,2001: 50-52.
關鍵詞:學習共同體;匯編語言;學習模式
作者簡介:胡靜芳(1980-),女,江西南昌人,景德鎮陶瓷學院信息工程學院,講師;李步升(1978-),男,江西大余人,景德鎮陶瓷學院信息工程學院,講師。(江西 景德鎮 333403)
基金項目:本文系2012年江西省省級教改基金項目的研究成果。
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2013)32-0101-02
1999年高校大規模擴招以來,我國高等教育由精英教育階段進入了大眾化教育階段,本科生的教育也從單一的專業教育轉變為“廣基礎、窄專業”的教育。所以在教學大綱的多次修訂下,專業課課時越來越少,學時的壓縮導致課堂呈現一言堂式的教學模式,課堂上師生互動越來越少。隨著學生人數的增加,大部分學校課程都是大班教學模式,教學內容的更新、學生人數的激增和專業課課時的壓縮已經成為大眾化教育下課堂教學的現實瓶頸。研究一種新的教學模式以解決當下日益增長的教學矛盾成了一個迫切的問題。
一、“學習共同體”概念
“學習共同體”(learning community)有時又被翻譯為“學習社區”,顧名思義,在這個社區中應該有多重角色存在。在這里引入的“學習共同體”概念主要是針對在校學習的情況,所以該“學習共同體”是由在校大學生充當的學習者角色和由教師充當的助學者角色共同組成。這個社區是以完成課程學習任務為目標,同時要求學習者發揮主觀能動性,與其他學習者互相溝通交流以及分享各種學習資源和學習心得,進而相互影響共同進步。它與傳統的教學方式的主要區別就在于強調了學生與學生的溝通、學生與老師的互動,在學習中強調發揮集體的力量。據統計,學生從老師處學到的知識占個人知識總量的百分比不足20%,剩下的知識都是通過課外閱讀和平時生活積累來獲取的。所以在“學習共同體”的教學模式下,作為助學者的教師要能給學生一定的空間,讓學生自己去思考和理解分析。師生之間、學生之間相互協作互動,共同完成知識獲取的過程。
二、景德鎮陶瓷學院“匯編語言程序設計”課程現狀
“匯編語言程序設計”是高校計算機科學與技術專業本科生的一門必修專業基礎課,是計算機操作系統、編譯原理等其它核心課程的必要先修課,但它卻是學生和老師都普遍反映難學難教的課程。第一,課程本身概念相對抽象,又和硬件底層密切相關,使得學生普遍反映難學、難理解。第二,這門課程的上機實驗用的masm軟件是DOS黑白界面,編譯鏈接過程繁瑣,實驗結果也不直觀,讓很多學生對實驗失去興趣。第三,由于這是一門面向機器的語言,不直接面向應用系統進行開發,使很多同學都對匯編語言課程學習的必要性產生懷疑。
由于專業學時的壓縮,景德鎮陶瓷學院(以下簡稱“我?!保﹨R編語言課程學時壓縮為48學時,其中理論課時為32學時,實驗學時為16學時。教師要在這32學時內,面對80~100人的大班將匯編語言的幾大知識體系講清楚,只能采取教師全程講述的教學模式,這樣學生的參與度不高,興趣也就不高了,教學質量也就無法得到保證。
三、“匯編語言程序設計”采用“學習共同體”教學模式的構建策略
“學習共同體”教學模式中強調了學習是學習者(大學生)主動建構內部心理表征的過程,所以學習需要學生之間、學生與老師之間的對話與合作,而學生理解獲取知識的過程受到特定學習環境的影響。所以本課題準備從以下五個方面來構建課堂“學習共同體”:
1.課程教學目標設定
(1)培養濃厚的學習興趣。在“學習共同體”的教學模式下,課堂教學的首要目標就是培養學生的學習興趣。引導學生建立“學習不光是為了考試拿學位,更重要的是提升自身的能力”的觀點。在匯編語言課程教學中首先要更正學生認為匯編語言已經過時的錯誤觀念,使其認識到匯編語言尤其適用于軟硬件緊密結合的環境,例如單片機、嵌入式等場合。在課堂上多介紹目前流行的嵌入式開發,讓學生覺得匯編語言的前景還是光明的,引發學習興趣。
本課題采用多種教學方法以提高學生的學習興趣。首先將一些基本的驗證性實驗作為作業布置下去,從驗證著手,讓學生通過電腦驗證結果,發掘匯編語言的奇妙性。其次對于一些抽象的概念聯系生活實際來展開教學。最后對于實驗環節,盡量給學生布置有明顯實驗結果的實驗內容,這樣學生能感覺到自己的努力有了效果,更增加了學習興趣。
(2)根據個性差異和學習能力創建多個學習小組。在“學習共同體”的教學模式下,還應該注意學生之間的個人差異,要根據不同的個性和學習能力制訂不同的目標層次。我校匯編語言課程開設在三年級上學期,經過前兩年的學習,每個學生的能力各不相同。課程開始之初讓學生自主組建學習小組,以5~6人為一單位,將以往的獨立學習改為團隊學習。實驗課程中每一小組都有獨立的實驗小題目,小組成員共同完成任務,各小組之間進行競爭,實驗成績最終納入最后的課程成績考核。在組建學習小組的過程中,每個學生都會切實考慮自身的能力。比如能力強的同學希望能強強結合,這樣實驗中可以選擇系數重的題目給自己加分,而能力稍弱的同學也希望能在小組競爭中取得加分。因此教師就必須給小組中的每一個學生分配好任務,使他們通過自己的課外查閱,與教師溝通,共同完成分配任務。這樣就極大地促進了學生學習的主觀能動性,主動努力去完成自己的學習目標。
2.自主學習環境
在基于“學習共同體”的教學模式中,教師應更加注重學生的課程參與度。要做到學生和教師之間良好互動,就要求學生事先熟悉課本知識,在課前完成自主學習。但是大學生活豐富多彩,對于大多數的學生來說,保證提前預習相關內容存在一定難度。所以對于“學習共同體”的助學者——教師就要幫助學習者實現自我管理,創建自主學習環境。目前已經在學校的THEOL網絡教學綜合平臺上進行了“匯編語言課程設計”課程的精品課程建設,在這個平臺上把該課程的教學大綱、授課計劃以及授課教案都掛在上面。這樣學生就能很清楚地知道每節課要講什么,哪些是重點,哪些是難點,可以有的放矢地進行預習。教師把相關課程的講課錄像掛在網上,學生如果想提前預習還可以進行網絡聽課。每節課的作業也都被掛在這個系統上,所有的學生都必須進入該系統進行作業。以上做法都保證了學生的自主學習環境。
3.課堂教學安排
相比傳統的一言堂講授式教學模式,基于“學習共同體”教學模式就更應該注重課堂教學形式的多樣化。首先根據教學內容不同階段特點設計不同的教學方式。最初接觸匯編語言,應該先給學生建立基本的匯編概念,比如匯編中的段、匯編中的尋址等。當學生對概念熟悉到一定程度的時候,就要重點讓他們利用所學知識去解決實際的問題了。在引出下一個知識點時,教師應更加注重方式方法。筆者的做法是在每一個知識點結束的時候都設計好一個問題,然后讓學生積極發言,與學生一起研究探索解決問題的方案,進而引入下一個知識點,這樣學生在研究討論的過程中掌握了新的知識點。
4.教學過程監督與評價策略
大班教學不可能掌握每一個學習者的學習進度,因此在評價中應設計合理的評價體系。本課題組在教學過程中采用考慮綜合能力和課程參與度的方式進行綜合評價,采用平時和考試3:7的方式進行考核??荚嚦煽円豢级ǚ謹?,但是這只占考核成績的70%。剩下的30%就由平時的考勤和上課參與度以及分組實驗的成績來綜合評價??记谝膊皇呛唵吸c名,教師會不定期在課堂上留下小作業,讓學生當場完成并上交,這樣既可以作為點名依據,也能看出學生是否掌握課堂內容,爭取對所有的學生都做到公平公正。
四、總結
“學習共同體”這是一種區別于原來以教師“教”為主的全新的教學模式,但對它的研究畢竟有限,所以在上文中只列出了幾點構建策略。在今后的教學研究中將采取更多的教學方法,來歸納出一套切實可行的教學方法,以適應新的教學模式。本課題在深入研究已有的“學習共同體”理論基礎上,用抽象的匯編語言程序設計作為載體,從課堂教學出發,對教學目標、教學安排、教學評價等多方面做了具體的研究設計,對解決當前課時少、學生人數多的大班教學問題是一個重要的探索。目前這種教學模式僅僅被應用在匯編語言課程設計這一門課上,如果成功,對其它后繼專業課的學習都將起到推動作用。
參考文獻:
[1]辛源,冒榮.大學學習共同體:創新學習視角下的解讀[J].江蘇高教,2008,(2).
[2]南旭光,羅慧英,張燕.基于網絡學習共同體的任務驅動型教學模式分析——以開放教育工商管理模擬實驗為例[J].現代教育技術,
2009,19(12):68-71.
關鍵詞:匯編語言;排序;冒泡排序
中圖分類號:TP313 文獻標識碼:A文章編號:1007-9599 (2011) 16-0000-01
Sort Data with Assembly Language
Ren Hong,Wang Yunxia
(Information Technology Department of Xuanhua Science and Technology College,Zhangjiakou075100,China)
Abstract:The assembly language is a computer can provide to users the fastest and most effective use of language,is able to use all of your computer hardware features and can only directly control the hardware language This article discusses how to use assembly language in computer programming sort important operation.
Keywords:Assembly language;Sort;Bubble Sort
一、引言
排序是計算機程序設計中的一種重要運算,其功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。經過排序的數據可采用優化的算法提高程序的執行效率;增加輸出數據的清晰度,便于信息檢索;同時經過排序后的數據往往還隱含一些特殊的含義,為用戶提供有價值的信息。
匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機所有硬件特性并能直接控制硬件的唯一語言,因而,對于程序的空間和時間要求很高的場合,匯編語言是必不可少的。本文將主要討論如何利用匯編語言實現數據的排序功能。
二、算法分析
設計要求:編寫一個排序程序,實現10個數據的從小到大的升序排列。
程序算法:氣泡排序是一種常用的排序方法,它的規則是:表中相鄰兩元素一一比較,并把大值元素向下交換,直至表尾(大值元素落底),此時,稱為一次冒泡(程序中一次大循環)。以后重復冒泡排序,直至最小元素冒到表頂為止。若在一次冒泡排序中沒有出現兩元素交換(設標志為0),則停止排序。
具體算法:該程序采用雙重循環結構,其中DL用來設置外循環次數,CX用來設置內循環次數,DH設為交換標志。其中內部循環L1主要完成一次冒泡過程,即對相鄰兩個元素進行比較。外循環L2主要用來控制整個冒泡的次數,即n-1次。
算法描述如下:
datasegment
memdb 10,9,8,7,6,5,4,3,2,1
len dw$-mem
dataends
codesegment
mainproc far
assume cs:code,ds:data
start:push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov dh,1
mov dl,len
Lo: ordh,dh
JzL3
mov dh,0
mov cx,len
sub cx,bx
mov si,offsetmem
L1:mov al,[si]
Incsi
cmp al,[si]
jbeL2
xchg al,[si]
mov [si-1],al
mov dh,1
L2:loop L1
incbx
decdl
jnz L0
L3: ret
code ends
endstart
三、算法分析
空間效率:冒牌法排序僅用了一個輔助單元,即空間復雜度為O(1)。
時間效率:
待排元素狀態 “比較”次數 “移動”次數
正序 n-1 0
逆序 n(n-1)/2 3n(n-1)/2
若待排序元素處于隨機狀態,則冒泡法排序的平均時間復雜度為O(n2)。
穩定性:冒泡排序是一種穩定排序方法。
四、結束語
本文主要介紹了采用匯編語言實現數據排序功能的具體方法.排序是計算機程序設計中的一種重要運算,排序還有很多方法,例如選擇排序,基數排序,快速排序等等。本文主要介紹了常用的冒泡排序法,希望以此為基礎能夠寫出其他排序方法的匯報語言程序。此外,排序算法同樣可以采用C語言來實現,而且同學們在大一時就已經學習過C語言。因此在教學過程中,還可以采用類比法進行講授,激發學生的學習興趣。
參考文獻:
[1]沈美明,溫冬嬋.IBM-PC匯編語言程序設計(第2版)[M].清華大學出版社