時間:2022-12-28 12:54:50
導(dǎo)語:在匯編語言程序設(shè)計的撰寫旅程中,學(xué)習(xí)并吸收他人佳作的精髓是一條寶貴的路徑,好期刊匯集了九篇優(yōu)秀范文,愿這些內(nèi)容能夠啟發(fā)您的創(chuàng)作靈感,引領(lǐng)您探索更多的創(chuàng)作可能。
程序設(shè)計在高校計算機及相關(guān)專業(yè)的課程中是最主要的基礎(chǔ)課,而匯編語言程序設(shè)計又是程序設(shè)計的基礎(chǔ),并且是微機原理、操作系統(tǒng)、編譯原理和系統(tǒng)結(jié)構(gòu)等主要課程的基礎(chǔ)課,是一門軟硬件相結(jié)合、理論聯(lián)系實踐的課程。如果沒有匯編語言程序設(shè)計作為基礎(chǔ),想要學(xué)深學(xué)透后續(xù)課程是十分困難的。學(xué)好匯編語言可以更好地深入理解和掌握計算機的硬件構(gòu)成和工作機理,為進行計算機相關(guān)的應(yīng)用和研究奠定基礎(chǔ)[1,2]。因為匯編語言是接近于計算機硬件的低級語言,它是聯(lián)系高級語言和計算機系統(tǒng)的橋梁,對于例如變量參數(shù)等在高級語言不容易理解的概念,用匯編語言講述則很清楚,而且對于理解計算機原理幫助較大。但是由于匯編語言是面向機器的一種語言,很多學(xué)生在學(xué)習(xí)過程中感覺比較難入手。
匯編語言作為一種用助記符表示的面向機器的符號語言,如何認識該課程的作用和地位,如何取得更好的教學(xué)效果?在長期從事該課程的教學(xué)過程中,筆者嘗試各種提高該課程教學(xué)質(zhì)量的探索,有些體會,供大家參考。
1 目前《匯編語言程序設(shè)計課程》的教學(xué)狀況
匯編語言是面向機器的一種符號語言,它與機器的結(jié)構(gòu)密切相關(guān),是直接針對CPU、內(nèi)存和I/O端口編程的程序設(shè)計語言。而目前的各種高級語言和網(wǎng)絡(luò)應(yīng)用開發(fā)工具很多程序幾乎可以自動生成。然而機器語言、匯編語言和高級語言的程序設(shè)計語言體系仍然是計算機技術(shù)的基礎(chǔ),也是計算機技術(shù)的重要知識體系之一。對于計算機及其相關(guān)專業(yè)的學(xué)生以及計算機愛好者來說,匯編語言程序設(shè)計是需要掌握的重要專業(yè)基礎(chǔ)知識之一。可由于匯編語言面向機器的特點,不僅需要硬件知識的配合,而且它有大量的語法規(guī)則需要記憶,加之上機調(diào)試單調(diào)且容易出錯,導(dǎo)致了大部分同學(xué)對于《匯編語言程序設(shè)計》課程的畏難情緒,學(xué)生初學(xué)階段普遍反映該課程難學(xué),很多學(xué)生在學(xué)習(xí)過程中感覺比較難入手。
2 教學(xué)方法探討
2.1 合理組織課程內(nèi)容
教學(xué)過程中為了讓學(xué)生掌握所學(xué)知識并用于程序開發(fā),在課程教學(xué)中把握教材的難點和重點尤為關(guān)鍵。
(1)基礎(chǔ)知識的教學(xué)。
主要包括計算機硬件和指令系統(tǒng)的教學(xué)。對計算機硬件基礎(chǔ)知識的理解和掌握程度直接影響學(xué)生對匯編語言地理解和掌握,其中包括CPU內(nèi)部的構(gòu)成、總線的作用、寄存器的設(shè)置和用途以及內(nèi)存的使用等是較難理解的部分,在實際教學(xué)中,可將相關(guān)內(nèi)容融匯在一起來進行教學(xué)。通過應(yīng)用如:圖片和動畫等形象化的方法將這些比較抽象的知識以較容易理解的方式展現(xiàn)出來。作為編程的指令系統(tǒng)對匯編語言程序設(shè)計而言是很重要的一部分內(nèi)容,在進行該部分內(nèi)容教學(xué)時,可以盡量通過演示程序來進行講解,解釋各條指令的運用方法、效果等,同時也可以適當(dāng)應(yīng)用動畫等方式演示指令的執(zhí)行過程。
(2)程序控制結(jié)構(gòu)的教學(xué)。
程序控制結(jié)構(gòu)是程序設(shè)計教學(xué)中的重點,匯編語言中的選擇結(jié)構(gòu)和循環(huán)程序結(jié)構(gòu)程序設(shè)計則是此部分的難點。為了使學(xué)生更好地掌握,在教學(xué)過程中,可選擇部分典型的例題,如:解決漢諾塔問題和階乘的計算等。
2.2 教學(xué)手段上采用傳統(tǒng)教學(xué)與多媒體教學(xué)相結(jié)合
在教學(xué)過程中我們可以有選擇地使用多媒體教學(xué),例如:用動畫模擬匯編語言中尋址方式、子程序調(diào)用的堆棧變化過程、中斷調(diào)用過程等。運用多媒體教學(xué),增強學(xué)生的直觀感,加深對問題的。在講用匯編語言指令編程序的內(nèi)容時,采用傳統(tǒng)的教學(xué)方法,教會學(xué)生如何思考、推理,如何用指令實現(xiàn)算法,培養(yǎng)學(xué)生的抽象思維、邏輯推理能力。傳統(tǒng)教學(xué)方法與多媒體教學(xué)相結(jié)合,將有助于提高學(xué)生的理解能力及綜合思維能力。
2.3 隨堂寫一些小程序增強記憶
在課堂上多加練習(xí)編寫小程序段會提高學(xué)生對指令的記憶及理解掌握。經(jīng)過幾年的教學(xué)發(fā)現(xiàn),課堂上練習(xí)少了以后,很多同學(xué)往往出現(xiàn)在編寫程序時有些指令寫不出來或不會用相關(guān)指令來組織程序。在課堂上練習(xí),使學(xué)生可以增強記憶,對指令的使用方法有了進一步了解,能夠運用自如。
2.4 注重案例教學(xué)
案例教學(xué)法在當(dāng)前面向各個層次學(xué)生的教學(xué)過程中已得到廣泛應(yīng)用,具體是指教師需要根據(jù)課程教學(xué)目標與內(nèi)容的要求,選擇相關(guān)典型的實例并組織學(xué)生學(xué)習(xí)、組織學(xué)生討論從而最大程度調(diào)動學(xué)生的創(chuàng)造性思維的教學(xué)方法。其具體執(zhí)行有兩種形式。
(1)案例講解。
案例講解需要在理論知識講授之后進行,通過案例講解輔助,達到加深學(xué)生理解的目標。
(2)案例分析法。
案例分析方法的重點在于討論和分析,其主要目的是培養(yǎng)學(xué)生的創(chuàng)造性思維。案例的選擇應(yīng)注意培養(yǎng)學(xué)生理解知識,提高學(xué)生分析問題和解決問題的能力。在匯編語言程序設(shè)計的教學(xué)中綜合運用案例講解法和分析法,能夠使學(xué)生盡快理解匯編語言程序設(shè)計的本質(zhì)特征并迅速掌握編程方法。
2.5 注重實驗內(nèi)容的實用性和趣味性
把實驗實踐環(huán)節(jié)與理論教學(xué)相融合,用實踐教學(xué)促進學(xué)科理論知識學(xué)習(xí),激發(fā)學(xué)生學(xué)習(xí)興趣。對于任何一門計算機語言課程來說,實驗都是教學(xué)中非常重要的一個環(huán)節(jié),實驗可以加深對理論知識的理解,提高學(xué)生的實踐動手能力。為了避免傳統(tǒng)的程序三大結(jié)構(gòu)、數(shù)據(jù)組織與數(shù)值計算、代碼轉(zhuǎn)換和數(shù)制轉(zhuǎn)換等方面的枯燥無味的實驗,應(yīng)將實驗內(nèi)容和實際應(yīng)用相結(jié)合,如將匯編語言和計算機的系統(tǒng)維護等實際相聯(lián)系,用匯編語言編寫簡單的設(shè)備驅(qū)動程序等等,增加圖形化的實驗內(nèi)容等方法和手段,使實驗變得實用有趣,增強學(xué)生動手的積極性和提高學(xué)生的動手能力。
2.6 突出重點和難點
另外,在教學(xué)過程中,加強傳統(tǒng)的教學(xué)方法也是重要的,如在教學(xué)過程中要突出重點和難點;課堂上多做練習(xí),課后注意答疑、輔導(dǎo)。
如:講解指令系統(tǒng)時部分指令應(yīng)結(jié)合指令編碼(即機器指令)來介紹,這樣學(xué)生更容易理解和接受。
例如:講解轉(zhuǎn)移指令中段間轉(zhuǎn)移直接尋址和段間轉(zhuǎn)移間接尋址問題,如果只列出樣例:
段間直接尋址:jmp far ptr target1
段間間接尋址:jmp dword ptr addr [bx]
學(xué)生很難理解,具體怎么實現(xiàn)跳轉(zhuǎn)。但是如果結(jié)合指令編碼來講解上述兩條轉(zhuǎn)移指令則效果會有很大改進。
如:
段間轉(zhuǎn)移直接尋址指令編碼需要5個字節(jié),如圖1所示。
也就是說,上例中Jmp far ptr target1 的target1給出的是轉(zhuǎn)移地址,即包括段地址和偏移地址。
而段間轉(zhuǎn)移間接尋址的指令編碼是2~4字節(jié),如圖2所示。
指令中由MOD和R/M確定的雙字存儲單元中的內(nèi)容分別送入IP寄存器和CS段寄存器,完成轉(zhuǎn)移。
關(guān)鍵詞:匯編語言程序設(shè)計; 教學(xué)方法; 內(nèi)聯(lián)編程
1課程的現(xiàn)狀
匯編語言不同于其它高級語言,必須要求編程人員有一定的硬件基礎(chǔ),如對CPU的結(jié)構(gòu)、CPU與存儲器等部件的數(shù)據(jù)傳送過程必須要有基本的了解,這樣才能學(xué)好這門課程。在教學(xué)過程中,我們發(fā)現(xiàn)學(xué)生對高級語言編程學(xué)習(xí)積極性高,對匯編語言課程缺乏興趣,因為課程本身指令復(fù)雜,規(guī)定繁多,再加上學(xué)習(xí)匯編指令前對CPU的相關(guān)工作過程理解不透,導(dǎo)致學(xué)生厭學(xué),又由于本課程面對的低年級學(xué)生只有高級語言的基礎(chǔ),習(xí)慣于高級語言的自然表達,初次接觸計算機硬件知識心理上有恐懼感,更難以適應(yīng)繁雜的低級語言。
針對本課程的特點,對教學(xué)內(nèi)容、環(huán)節(jié)、過程等進行了精心設(shè)計,下面就教學(xué)方法的設(shè)計、實踐教學(xué)方法、課程考核形式等方面進行的一系列改革進行詳細探討。
2教學(xué)方法設(shè)計改革
為了避免學(xué)生因指令復(fù)雜,規(guī)定繁多、難度大而對該課程產(chǎn)生畏懼的學(xué)習(xí)心理,教師有必要對教學(xué)內(nèi)容進行合理組織,對教學(xué)過程進行精心的設(shè)計。
2.1利用FLASH技術(shù),使教學(xué)難點容易理解
在多年的教學(xué)過程中,我發(fā)現(xiàn)學(xué)生在學(xué)習(xí)CPU結(jié)構(gòu)這章節(jié)中,對介紹的CPU由哪些寄存器(名稱、大小)構(gòu)成,各個寄存器的含義,用途,CPU與存儲器等部件的數(shù)據(jù)傳送過程,會覺得很抽象,多數(shù)同學(xué)都是采用死記硬背的方式,這章節(jié)是第二章節(jié)的內(nèi)容,也是能否學(xué)好該課程關(guān)鍵的一章,如果理解不深,這無疑為后續(xù)的學(xué)習(xí),特別是尋址方式的學(xué)習(xí)埋下了隱患。
針對這個問題,教師有必要對教學(xué)過程進行精心的設(shè)計。
在這章節(jié)中我們利用FLASH技術(shù),把各種尋址方式下傳送指令的CPU與存儲器等部件的數(shù)據(jù)傳送過程以動畫形式展現(xiàn)給學(xué)生,使得復(fù)雜,抽象的過程變得直觀,學(xué)生理解比較容易,也加深了對尋址方式的記憶。
2.2對比法教學(xué)
目前計算機專業(yè)的課程設(shè)置中,《匯編程序語言的程序設(shè)計》課程通常是學(xué)習(xí)完C語言課程之后開始學(xué)習(xí)的。所以在教學(xué)中可以采用對比法來講解課程,對某些語法知識點和程序設(shè)計過程我們可以以C語言和匯編語言對應(yīng)分析。
例如在介紹寄存器時,由于在一般的c語言程序中并沒有直接使用到寄存器。因此,我們使用vC++6.0環(huán)境下的調(diào)試工具顯示一個c語言程序及其對應(yīng)的機器碼,讓學(xué)生看到編寫匯編程序寄存器的用途,加深了學(xué)生對匯編語言程序的理解。
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 轉(zhuǎn)貼于
2.3抽象概念的比喻教學(xué)法
在對段地址和偏移地址的講解過程中,可以采用比喻法,把操作數(shù)比喻成學(xué)生,把教室的房間號比喻成段地址,教室內(nèi)每個座位編個號,編號就是偏移地址,要想到教室把某個學(xué)生找到,就要找到相應(yīng)的教室號,再到對應(yīng)的座位號找到這個學(xué)生,同理,要想把主存中的操作數(shù)找到就要找到段地址和相應(yīng)的偏移地址,另外要讓學(xué)生知道每個教室里的座位號都是從0號開始編號的,也就是每個段里的偏移地址如果不特別指定,也是從0號開始編號的。
3實踐教學(xué)改革
3.1增強實驗環(huán)節(jié),做一些實際項目
程序設(shè)計對于大多數(shù)的初學(xué)者來說有一定的難度。對于給定的一個實驗題目,許多學(xué)生往往感到無從下手。目前的上機實驗時間往往很短,常常是學(xué)生才剛剛有點入門,實驗環(huán)節(jié)就結(jié)束了;且課外實踐環(huán)節(jié)幾乎沒有,導(dǎo)致學(xué)生即使課內(nèi)學(xué)的再好也不會應(yīng)用。
在實驗設(shè)計方面可以先把一些經(jīng)典的程序提供給學(xué)生,例如分支結(jié)構(gòu)的設(shè)計、循環(huán)結(jié)構(gòu)的設(shè)計等,讓學(xué)生在寫出C語言程序之后再設(shè)計匯編程序,找出兩者編程思維的區(qū)別。這樣通過一段時間的經(jīng)驗積累,就能夠編寫比較復(fù)雜的的程序,由于上機時間有限,可以每次實驗課之后布置一些題目供學(xué)生選擇思考,讓學(xué)生課外分組來設(shè)計這些程序,題目的類型可以是研討型的讓學(xué)生從更多的角度去思考上機實驗過的題目,編寫出不同的程序;另一種為編程型,
例如可以設(shè)置這2道題目,音樂小鍵盤、貪吃蛇游戲等,以加強同學(xué)們的編程能力的訓(xùn)練。
3.2采用與高級語言混合編程
目前越來越多的場合要使用匯編語言和高級語言進行混合編程,因此在教學(xué)時應(yīng)強調(diào)匯編語言和C/C++的混合編程,并且這樣也可以為今后嵌入式系統(tǒng)軟件開發(fā)的學(xué)習(xí)打下堅實的軟硬件基礎(chǔ)。
在實驗課中可以借助 Visual C++開發(fā)工具,采用內(nèi)聯(lián)匯編的方式,在 C/C++源程序中嵌入?yún)R編指令序列完成一定的功能,并讓學(xué)生設(shè)置斷點然后跟蹤執(zhí)行,同時注意觀察寄存器的內(nèi)容和變量的值。這樣可以一方面讓同學(xué)們熟練掌握兩種語言的切換使用,另一方面讓他們感受到兩種語言各有特點。例如可以利用匯編語言處理高級語言中不方便處理的一些問題。
4課程考核形式改革
因為“匯編語言程序設(shè)計”是實踐性很強的一門課程,所以實驗課成績應(yīng)該在總成績中占有相當(dāng)大的比重。目前大多數(shù)高校的匯編語言課程的實驗課成績只占很小的比重,即理論知識往往占課程期末考核總成績的70%~80%,這樣往往會導(dǎo)致學(xué)生不得不將大量的精力放在理論知識的學(xué)習(xí)中,結(jié)果只會造就大批的應(yīng)試高手。在教學(xué)中,我們遇到過有的學(xué)生考試試卷能考90分以上,卻連最基本的計算機操作都不能動手。今后這門課程的考核,實驗課成績應(yīng)該提高到占總成績的1/2。老師在實驗中應(yīng)該營造出互動氣氛,檢查每個學(xué)生的完成情況同時做好記錄,根據(jù)學(xué)生的實際動手情況給出他們的平時實驗成績,而不是只依據(jù)交上來的實驗報告,這樣也能杜絕抄襲之風(fēng)。
5結(jié)束語
通過教學(xué)改革的實踐,在一定程度上提高了他們對本課程的學(xué)習(xí)積極性,又降低了學(xué)習(xí)難度。良好的教學(xué)效果是永遠追求的目標,在今后的教學(xué)中,我們還需要不斷進行探索、研究和嘗試,不斷更新觀念,發(fā)現(xiàn)自身教學(xué)過程中的問題,找到解決辦法,提高教學(xué)效果。
參考文獻
[1] 王成耀.80x86匯編語言程序設(shè)計[M].北京:人民郵電出版社,2008(第2版).
[2] 卜登立,彭嵩松,唐衛(wèi)東,龍侃.“匯編語言程序設(shè)計”課程教學(xué)改革研究與探討[J].井岡山學(xué)院學(xué)報,2009,30(10):124-127.
關(guān)鍵詞:匯編語言 I/O 子程序 庫
中圖分類號:TP313 文獻標識碼:B 文章編號:1002-2422(2008)03-0086-02
設(shè)計的I/O子程序庫包括16位版本和32位版本,可分別應(yīng)用于16位和32位匯編語言應(yīng)用程序,提供的子程序功能包括不同數(shù)制和字符串的輸入與顯示,狀態(tài)標志的顯示,滿足匯編語言程序設(shè)計的通常要求。
1 設(shè)計方案
1.1子程序功能需求
根據(jù)在匯編語言程序設(shè)計中的通常要求,子程序所提供的功能主要包括鍵盤輸入和顯示器顯示,輸入和顯示的內(nèi)容可以是不同的數(shù)制與字符串格式。如表1所示。
1.2子程序庫結(jié)構(gòu)
為了方便整個子程序庫的設(shè)計,設(shè)計了一些通用予程序。在實現(xiàn)提供給用戶使用的子程序時,充分利用這些通用子程序,簡化了子程序的代碼編寫,減少了子程序庫的長度。主要子程序之間的關(guān)系如圖1所示。
字符輸入和顯示子程序READC、DISPC是整個子程序庫輸入輸出的基礎(chǔ)。利用這兩個子程序?qū)崿F(xiàn)了字符串輸入和顯示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同數(shù)制數(shù)據(jù)輸入和顯示的基礎(chǔ):通過調(diào)用READMSG讀入字符串,然后調(diào)用字符串轉(zhuǎn)換子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分別將字符串轉(zhuǎn)換為不同數(shù)制的數(shù)據(jù),從而實現(xiàn)了不同數(shù)制輸入的子程序READBIN、READHEX、READUI、READSI等;通過調(diào)用DISPMSG顯示字符串,然后調(diào)用數(shù)據(jù)轉(zhuǎn)換字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分別將字符串轉(zhuǎn)換為不同數(shù)制的數(shù)據(jù),從而實現(xiàn)了顯示不同數(shù)制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
設(shè)計的16位和32位的子程序庫提供的子程序功能都是相同的,區(qū)別在于16位的字符輸入子程序是利用DOS系統(tǒng)調(diào)用實現(xiàn)的,而32位的字符輸入子程序是利用WIN-DOWS API函數(shù)實現(xiàn)的。其他子程序則可以通用。
各個子程序匯編后,由庫管理工具LIB.EXE生成16位子程序庫I/O16.LIB和32位子程序庫I/O32.LIB。
1.3參數(shù)傳遞
匯編語言子程序的參數(shù)傳遞可以采用寄存器傳遞,共享內(nèi)存變量和堆棧傳遞三種方法。堆棧傳遞參數(shù)時,可以用MASM提供的偽指令PROTO來聲明子程序,用INVOKE來調(diào)用子程序。這兩個偽指令在聲明和調(diào)用子程序時相對于CALL指令和PROC偽指令要簡潔得多。使用堆棧傳遞參數(shù)也是高級語言通常使用的子程序傳遞參數(shù)的方法,用堆棧傳遞參數(shù)的子程序可以被高級語言調(diào)用。子程序的返回參數(shù)也遵循高級語言子程序的規(guī)范,采用寄存器EAX返回子程序的出口參數(shù)。
1.4宏命令
調(diào)用子程序需要用專門的調(diào)用指令并遵循一定的格式要求,這對于初學(xué)者來說有一定的難度。當(dāng)子程序的參數(shù)比較多時,調(diào)用子程序的編碼量較多,設(shè)計了調(diào)用子程序的宏指令,利用宏指令來實現(xiàn)對應(yīng)的子程序調(diào)用,格式簡單,使用方便,尤其適合初學(xué)者應(yīng)用。為提高代碼的復(fù)用性,被調(diào)用子程序的聲明和宏定義都放在包含文件IO.INC中,在匯編語言應(yīng)用程序中用INCLUDE語句包含該文件即可。
關(guān)鍵詞: 比較教學(xué)法;匯編語言; C語言;實踐;教學(xué)效果
中圖分類號:G642 文獻標識碼:A 文章編號:1009-3044(2013)10-2402-02
匯編語言程序設(shè)計是計算機專業(yè)學(xué)生的專業(yè)基礎(chǔ)課、必修課,屬于低級語言的程序設(shè)計,是硬件類課程和操作系統(tǒng)的先行課和基礎(chǔ)課,是高級語言程序設(shè)計的擴展。匯編語言是架起軟件、硬件知識的一座橋梁,它不但有利于學(xué)生理解計算機的工作原理,而且對學(xué)生程序設(shè)計能力的培養(yǎng)起著十分重要的作用。
在匯編語言課程教學(xué)中發(fā)現(xiàn),匯編語言相對于其他高級語言來說缺乏直觀性與生動性,是一門比較抽象和理論化的課程,學(xué)生養(yǎng)成了“重軟件、輕硬件”的學(xué)習(xí)態(tài)度,往往會選擇一些容易學(xué)習(xí)的高級語言而忽視了對匯編語言的學(xué)習(xí),因此在教學(xué)中普遍存在“教師難教,學(xué)生難學(xué)”的問題。
如何改善匯編語言課程的教學(xué)效果和教學(xué)質(zhì)量,提高學(xué)生學(xué)習(xí)的興趣和主動性是當(dāng)前急需解決的問題。將比較教學(xué)法引入到“匯編語言”的教學(xué)中,該教學(xué)方法注重將匯編語言和
高級語言進行比較教學(xué),能夠極大提高學(xué)生的學(xué)習(xí)興趣,取得良好的教學(xué)效果。
1 比較教學(xué)法在匯編語言課程教學(xué)中的應(yīng)用
1.1 比較教學(xué)法
比較教學(xué)法( 或叫類比教學(xué)法)是指在教學(xué)活動中將兩個或兩個以上的認識對象放在一定的條件下,按照同一標準進行對照比較,從而確定認識對象屬性的同異、地位的主次、作用的大小、性能的優(yōu)劣、問題的難易或認識的正誤深淺,以達到辨識、了解和把握認識對象之目的的一種方法[1]。比較教學(xué)法是最常用的教學(xué)方法之一,也是使用范圍最廣的教學(xué)方法之一。
由于學(xué)生在學(xué)習(xí)匯編語言之前已經(jīng)至少學(xué)習(xí)過如C這類高級語言,所以采用比較教學(xué)法不僅能更好地理解匯編語言,同時加深對高級語言的理解也有很大的好處。在實際教學(xué)過程中,可以將新的陌生的東西(匯編語言)和舊的熟悉的東西(C語言)做比較,找出它們之間相同的地方和不同的地方,然后進行差異化的學(xué)習(xí),重在存同求異,這樣就會事半功倍,達到理想的教學(xué)效果。
1.2 比較教學(xué)法在匯編語言課程與C語言課程教學(xué)中的實踐
高級語言(如C語言)和匯編語言兩者都是程序設(shè)計的工具,在程序的基本功能和程序設(shè)計的基本問題上均有相應(yīng)的實現(xiàn)機制,同時在某些方面是相通的,換句話說許多用匯編語言能作的工作也可以用C語言來完成。
2)兩操作數(shù)的類型匹配問題。
2 結(jié)論
限于篇幅,以上僅舉2個例子來說明教學(xué)過程中如何將匯編語言和C語言進行比較教學(xué),已經(jīng)取得了很好的教學(xué)效果。由于語言的相通性,實際上在整個匯編語言教學(xué)中還有很多知識點可以把C語言知識貫穿其中。通過比較教學(xué),一方面學(xué)生可以更好地學(xué)習(xí)匯編語言的相關(guān)知識,極大地提高學(xué)習(xí)效率;另一方面,更提高了學(xué)生對C語言的更高層次上的認識,間接地對其他學(xué)科的學(xué)習(xí)也起到了很大的幫助作用。
參考文獻:
[1] 李運模.比較教學(xué)法論略[J].中南民族學(xué)院學(xué)報:人文社會科學(xué)版,2000(3).
[2] 沈美明,沈冬嬋. IBM-PC 匯編語言程序設(shè)計[M].2版.北京:清華大學(xué)出版社,2001.
[3] 譚浩強.C程序設(shè)計[M].3 版.北京:清華大學(xué)出版社,2005.
“匯編語言”課程是計算機科學(xué)、自動化及電子信息類專業(yè)的一門核心專業(yè)課程。[1-2]對于計算機及其相關(guān)專業(yè)的學(xué)生來說,匯編語言程序設(shè)計是需要掌握的重要專業(yè)基礎(chǔ)知識之一。了解和熟悉匯編語言可以優(yōu)化學(xué)生的知識結(jié)構(gòu),提高學(xué)生的認知水平,增加學(xué)生的程序開發(fā)手段。相較于快速發(fā)展的可視化高級語言,作為低級語言的匯編語言,可讀性較差,比較繁瑣,不符合自然語言表述,學(xué)生普遍感到難學(xué)。因此,“匯編語言”課程如何優(yōu)化教學(xué)質(zhì)量、提高教學(xué)效果,是任課教師面臨的一個重要問題。[3]本文結(jié)合實際教學(xué)體會,就如何提高“匯編語言”課程教學(xué)效果進行了分析與探討。
一、匯編語言程序的特點
計算機是一個編碼的世界,只能識別和處理由“0”和“1”組成的二進制代碼的機器語言,這種指令代碼編寫易出錯且不易修改。于是,人們發(fā)明了“指令的助記符”,用助記符(mnemonic)代替操作碼,用標號(label)和地址符號(symbol)代替地址碼,用這種符號系統(tǒng)形成匯編語言。[4]因此,匯編語言本質(zhì)上就是機器語言,只不過更容易被人讀懂且更容易記憶。使用匯編語言編程,可以對計算機內(nèi)部硬件進行直接控制,合理地安排機器內(nèi)部的各種資源。歸納起來,匯編語言程序有以下幾個主要特點:
一是與硬件的相關(guān)性。匯編語言與機器指令一一對應(yīng),不同類型的cpu內(nèi)部硬件結(jié)構(gòu)不同,因而有不同的指令系統(tǒng),相應(yīng)的匯編語言程序也就不同,其通用性、可移植性比較差。二是執(zhí)行效率高。由于匯編語言與硬件相關(guān),它可以有效、直接地控制機器,程序的執(zhí)行代碼短、速度快,是其他高級語言難以企及的。三是編程、調(diào)試相對困難。為了有效地控制機器,匯編語言指令涉及到硬件資源的各種細節(jié),如標志、堆棧、寄存器、存儲單元等。相對高級語言,其編程及調(diào)試比較繁瑣、復(fù)雜。[5-6]
二、明確教學(xué)目的,優(yōu)化教學(xué)內(nèi)容
1.激發(fā)學(xué)生的學(xué)習(xí)熱情
“匯編語言”與許多課程聯(lián)系緊密,如圖1所示,它是“操作系統(tǒng)”、“計算機接口技術(shù)”、“計算機組成原理”、“嵌入式系統(tǒng)”等課程的基礎(chǔ),在開發(fā)嵌入式系統(tǒng)時更是必不可少的語言。“匯編語言”課程學(xué)習(xí)起來比較枯燥、學(xué)習(xí)周期較長,不像高級語言那樣上手比較容易且能很快見到效果。因此,應(yīng)教育學(xué)生少一些急功近利的思想,應(yīng)著眼于長遠的、全面的技術(shù)成長。有條件的教師可以將自己相關(guān)的科研成果帶入課堂,說明匯編語言有著廣泛的應(yīng)用領(lǐng)域。在授課過程中,注意拓寬學(xué)生的知識面,結(jié)合具體的應(yīng)用,激發(fā)學(xué)生的學(xué)習(xí)熱情。
2.優(yōu)化教學(xué)內(nèi)容
不同于高級語言的教學(xué)模式,匯編語言是一種硬件編程語言,是連接軟硬件的橋梁。一方面,匯編語言與芯片密切相關(guān),學(xué)習(xí)匯編語言時應(yīng)具備一定的硬件基礎(chǔ)知識,需要時穿插相關(guān)知識點,回顧前導(dǎo)課程的相關(guān)內(nèi)容,如計算機結(jié)構(gòu)等;另一方面,又不需要緊跟著產(chǎn)品來講授,只要選擇一種典型的匯編語言指令集講清楚、講透徹,使學(xué)生掌握學(xué)習(xí)與思考的方法,今后遇到其他的芯片,也就可以舉一反三,觸類旁通。
具體到一種匯編語言指令集,應(yīng)突出其重點、難點,如分段管理技術(shù)、尋址方式、堆棧管理、中斷技術(shù)等。為了便于后續(xù)程序結(jié)構(gòu)的學(xué)習(xí),在學(xué)習(xí)尋址方式和指令集時就教會學(xué)生使用debug,講解了常用的調(diào)試命令,使學(xué)生能盡快上機實踐,驗證指令,編寫短小程序,看到運行結(jié)果,從而加深影響,鞏固所學(xué)的內(nèi)容。由于匯編語言的指令很多,涉及的知識點抽象,剛開始接觸這門課程時,學(xué)生往往不太適應(yīng),前后的知識點容易混淆,教師應(yīng)及時對講授過的內(nèi)容進行比較與小結(jié)。課堂上,應(yīng)適當(dāng)增加講授例題的數(shù)量,不同的教學(xué)階段,例題的側(cè)重點不一樣。開始階段,例題主要涉及匯編語言格式與匯編語言指令;中間階段,例題講授的是如何用匯編語言指令實現(xiàn)匯編語言流程;后續(xù)階段,例題重點講解匯編語言程序設(shè)計算法的確定,分析、解決問題的思路與方法。而在學(xué)生掌握了基本內(nèi)容及重點內(nèi)容的基礎(chǔ)后,教師應(yīng)提綱挈領(lǐng),從系統(tǒng)的整體角度分析“匯編語言”課程在整個硬件知識體系中的作用,讓學(xué)生從更高層次理解、使用匯編語言。
3.多種教育手段相結(jié)合
隨著現(xiàn)代教育技術(shù)快速發(fā)展,多媒體技術(shù)在教學(xué)中有著廣泛的應(yīng)用。在“匯編語言”課程中,可以利用多媒體課件圖文并茂的特點吸引學(xué)生的注意力,活躍課堂氣氛。例如,可以通過動畫形式將尋址過程、堆棧變化、循環(huán)移位、子程序調(diào)用、中斷調(diào)用過程等表示出來,將復(fù)雜的、抽象的問題簡單化、形象化,提高教學(xué)效率。而在確定匯編語言程序設(shè)計的算法,用匯編語言實現(xiàn)編程,培養(yǎng)學(xué)生的推理、思維能力時,采用傳統(tǒng)教學(xué)方法。對不同的知識點,結(jié)合不同的教學(xué)方法,有利于學(xué)生對不同教學(xué)內(nèi)容的理解與掌握。
三、注重實驗環(huán)節(jié),提高教學(xué)效果
1.實驗平臺及實驗內(nèi)容
匯編語言程序設(shè)計要經(jīng)過編輯、匯編、連接和調(diào)試等過程,如圖2所示,傳統(tǒng)的上機實驗一般是在dos操作系統(tǒng)環(huán)境下進行的。目前流行的是windows操作系統(tǒng)平臺,學(xué)生對dos操作環(huán)境相對陌生。為了提高上機的效率,應(yīng)摒棄dos環(huán)境,采用基于windows操作系統(tǒng)的匯編語言集成實驗環(huán)境。在該環(huán)境下,可以方便編輯匯編語言程序,使用下拉式菜單或快捷按鈕進行匯編、連接及調(diào)試等工作,并可以預(yù)先設(shè)定段定義、過程定義等。
在實驗內(nèi)容安排上,應(yīng)根據(jù)授課的進度及學(xué)生的掌握程度,并與教學(xué)目標相匹配,精心選擇一些有代表性的、有實用價值的內(nèi)容,盡量避免實驗內(nèi)容過長、過雜等問題。實驗的內(nèi)容應(yīng)包括:指令系統(tǒng)及調(diào)試工具debug使用;匯編語言程序設(shè)計上機環(huán)境及過程;順序、分支、循環(huán)基本結(jié)構(gòu)程序設(shè)計;子程序設(shè)計和宏匯編程序設(shè)計;中斷調(diào)用程序設(shè)計;綜合性實驗。
轉(zhuǎn)貼于
2.發(fā)揮學(xué)生在實驗中的主體作用
在整個實驗過程中,以學(xué)生為主體,教師只是起到組織、引導(dǎo)的作用。
實驗前,教師講解難點、重點及有關(guān)注意事項,點到為止,也可以先給出相關(guān)的問題,讓學(xué)生去思考、去觀察。要求學(xué)生對實驗內(nèi)容進行預(yù)習(xí),并在下次上實驗課時用提問、抽查等形式檢查。學(xué)生通過預(yù)習(xí)帶著問題進行實驗,可以提高學(xué)習(xí)的主動性,且能對知識點的領(lǐng)悟更深刻。
實驗中,鼓勵學(xué)生按照自己的思路去編寫、調(diào)試程序。對于學(xué)生在實驗過程中提出的問題,一般不直接給出答案,而是引導(dǎo)學(xué)生通過學(xué)過的理論知識自己尋找解決的方法。只要能達到預(yù)定的實驗?zāi)繕?,對實驗步驟及過程不做過多要求。對學(xué)有余力的學(xué)生,鼓勵他們在完成規(guī)定的實驗內(nèi)容后,對補充題或?qū)ψ约涸O(shè)計的問題進行實驗;而對基礎(chǔ)較差的學(xué)生,則鼓勵他們獨立地解決問題。
實驗后,要求學(xué)生及時對實驗進行歸納、總結(jié),并撰寫實驗報告。
3.實驗實踐貫穿整個教學(xué)
“匯編語言”課程有其特殊性,只有通過不斷的上機實踐,學(xué)生才能加深對理論知識的理解,提高編寫程序的能力。因此,要轉(zhuǎn)變觀念,重視實驗教學(xué),避免實驗教學(xué)流于形式。程序設(shè)計是一個調(diào)試修改語法及邏輯錯誤,最終得到正確程序的過程。教師應(yīng)充分利用多媒體等手段,引導(dǎo)學(xué)生動手編程,通過實際例題觀察數(shù)據(jù)流變化,培養(yǎng)學(xué)生調(diào)試、修改程序的能力和意識。教師演示與學(xué)生實踐可以穿插交替進行。如果學(xué)生對自己編的程序沒有把握,則鼓勵他們上機進行驗證,反復(fù)地調(diào)試、修改、運行。對有些驗證性實驗,可以用作業(yè)的形式要求學(xué)生在課外完成。如用debug調(diào)試工具驗證各類指令的功能和格式,對標志位的影響,查看數(shù)及字符在存儲器中的存放形式,堆棧的變化等。既加深了學(xué)生對所學(xué)內(nèi)容的理解,又為匯編語言程序設(shè)計打下了基礎(chǔ)。
本課程的目的是使學(xué)生掌握程序設(shè)計的方法,學(xué)會用匯編語言編寫程序。結(jié)合各章節(jié)所學(xué)的知識點,每次實驗要求學(xué)生編寫相關(guān)的程序,檢驗學(xué)生具體知識點的掌握程度。注意加強前后實驗之間的相互聯(lián)系,融會貫通各個知識點。隨著課程進展的加快,實驗內(nèi)容應(yīng)從比較簡單到相對復(fù)雜,再到課程結(jié)束階段,經(jīng)過知識及多個實驗經(jīng)驗的積累,使學(xué)生具備一定的程序設(shè)計能力。
【關(guān)鍵詞】C語言 編程 結(jié)構(gòu)化
1 C語言的編程特點
1.1 C語言的定位
很多人都普遍的認為C語言是在B語言的基礎(chǔ)上發(fā)展過來的一種高級編程語言。然而從編程語言的層次結(jié)構(gòu)方面來說,我們應(yīng)該認為C語言,是在匯編語言的基礎(chǔ)上發(fā)展而來的,它比匯編這類編程語言要高級,但是比一些可視化的編程語言又低級,所以準確來說,C語言應(yīng)該算是中級編程語言,或者稱為準高級程序設(shè)計語言。目前很多高級程序設(shè)計語言都是在C語言的基礎(chǔ)上發(fā)展而來的,或者至少借鑒了C語言程序設(shè)計的思想。80年代初,Bjarne Stroustrup在貝爾實驗室對標準C進行了改進和完善,C++得以誕生,使得面向?qū)ο蟮某绦蛟O(shè)計思想得以提出和落實;21世紀初,人們將C語言和單片機相結(jié)合,開發(fā)出來了應(yīng)用于單片機編程的C51語言,使得單片機的程序設(shè)計從反復(fù)的匯編語言設(shè)計中抽身出來,大大的提高了程序的設(shè)計效率。
可見C語言在整個編程語言的發(fā)展過程中屬于承上啟下的作用,同時其自身的應(yīng)用領(lǐng)域又在不斷的更新和發(fā)展。
1.2 C語言的編程特點
通過上述C語言的定位可知,它既具備高級程序設(shè)計語言的結(jié)構(gòu)性和層次性特點,同時也兼具了低級程序設(shè)計語言的實用性。
(1)用相應(yīng)的C語句可以實現(xiàn)對微機操作中的字節(jié)、地址等進行直接訪問。
(2)基于函數(shù)的結(jié)構(gòu)化特點,使得復(fù)雜的軟件系統(tǒng)可以由多個人,以設(shè)計子函數(shù)的形式,分別各自進行程序開發(fā)。之后進行函數(shù)的匯總,最后由主函數(shù),按照既定的程序流完成對各個子函數(shù)的調(diào)用就行。
(3)豐富的數(shù)據(jù)類型,尤其是指針類型,可以很方便的應(yīng)用于復(fù)雜數(shù)據(jù)和大數(shù)據(jù)的訪問和處理。
(4)由于C語言基本上不向低級語言那樣直接涉及到對硬件的操作,所以C語言程序往往具有很好的通用性,方便程序移植。
2 C語言的編程技巧
2.1 扎實基本工
在進行C語言程序設(shè)計之前,首先要熟悉運算符、表達式以及各鐘類型數(shù)據(jù)的定義和使用方法,其次對順序、分支和循環(huán)三大程序結(jié)構(gòu)要有較好的把握,并熟練使用while循環(huán)、for循環(huán)、switch語句等。如果要在程序的設(shè)計上有進一步的提高,那就需要對“指針”能夠進行熟練的使用了。指針可以用于表示變量,但更多的是用于代表數(shù)組、存儲地址以及函數(shù)地址。在代替不同變量時將返回不同的值,可以說指針的功能十分強大。對其熟練使用有助于程序設(shè)計的簡潔和便利。
2.2 立足C語言的結(jié)構(gòu)化的特點,熟練程序設(shè)計基本構(gòu)型
C語言典型的特點就是結(jié)構(gòu)化,在進行具體的程序開發(fā)時,應(yīng)該首先要根據(jù)設(shè)計的軟件項目,然后進行任務(wù)的細分,由于C語言不需要編程人員去配置硬件資源,因此程序設(shè)計人員可以把更多的精力放在各個細分任務(wù)的子函數(shù)設(shè)計上,考慮用最簡單的程序結(jié)構(gòu)去實現(xiàn)。在數(shù)據(jù)類型的選擇上,能夠用短數(shù)據(jù)類型就盡量用短數(shù)據(jù)類型。
另外,為了提高程序代碼的執(zhí)行效率,建議C語言程序設(shè)計人員要了解C語言程序最終運行的硬件的基礎(chǔ)機構(gòu),是在微型計算機上運行,還是在單片機上運行。在了解硬件平臺結(jié)構(gòu)及內(nèi)部資源的前提下進行相應(yīng)的程序設(shè)計,將有助于提升程序的運行效率。
3 C語言的實踐應(yīng)用
3.1 混合編程
很多程序設(shè)計人員都認為C語言比匯編語言高級,所以認為沒有必要去學(xué)習(xí)和了解低級語言。其實這種思路是及其錯誤的。匯編語言之所以稱之為低級語言,是因為其更加貼近于硬件。在編程時一定要明確的在代碼中描述清楚,數(shù)據(jù)如何從一個存儲單元送入另一個單元,因此顯得編程復(fù)雜,由于其直接和硬件打交道,所以被稱為低級語言。但是其運行效率卻是最高的。所以在C語言程序設(shè)計上要有質(zhì)的飛越,有必要了解匯編語言的編程思路和理念。有條件的話可以將C語言和匯編語言混合編程,從而發(fā)揮出兩類編程語言各自的優(yōu)點,達到設(shè)計程序的最優(yōu)化。
在進行C語言和匯編語言的混合編程時,無論是采用C語言調(diào)用匯編,還是匯編調(diào)用C語言,還是C語言嵌入?yún)R編的方式,都應(yīng)該對調(diào)用關(guān)系、各模塊的連接以及參數(shù)的傳遞進行妥善的處理。對于調(diào)用關(guān)系,則需要對調(diào)用的函數(shù)和過程進行說明;通過明確函數(shù)和變量的命名以及存儲模式的關(guān)聯(lián)性,從而實現(xiàn)各模塊的有效連接;通常情況下往往通過堆棧的方式來實現(xiàn)參數(shù)的傳遞。
3.2 C語言在工程上的應(yīng)用
C語言在電力電氣系統(tǒng)、交通控制系統(tǒng)以及機器人控制方面都有廣泛的應(yīng)用。下面以工廠通風(fēng)控制系統(tǒng)的C語言程序設(shè)計為例來加深對C語言軟件編程思想的理解。
工廠通風(fēng)控制程序的設(shè)計時采用模塊化得設(shè)計思想,即單獨的編寫初始化函數(shù)void Initial(void);中斷處理函數(shù)void**(void)interrupt;數(shù)據(jù)采集函數(shù)unsigned char ADconvert(unsigned char address)以及其它函數(shù)等。然后由主程序負責(zé)對各個子函數(shù)的調(diào)用,從而實現(xiàn)對工廠通風(fēng)系統(tǒng)的控制。簡化的主程序如下:
main( ){ ... Initial(void);
while(l){ReadAi( );ADconvert(unsignedchar address);
DataChange( ); DisPlay( ); …}
整個系統(tǒng)由于需要不停的對工廠數(shù)據(jù)進行采集,所有主程序的結(jié)構(gòu)就設(shè)置成了循環(huán)結(jié)構(gòu),當(dāng)通風(fēng)控制系統(tǒng)有序的進行準備工作之后,通過調(diào)用初始化函數(shù),程序就開始進入主循環(huán),主循環(huán)中通過調(diào)用采集程序,完成對測量對象的循環(huán)檢測以及對顯示程序,數(shù)據(jù)處理函數(shù)的循環(huán)調(diào)用。一遍又一遍的不停循環(huán)執(zhí)行主程序。在這個主程序循環(huán)的過程中,如果有異常情況發(fā)生,則隨著中斷觸發(fā)事件的發(fā)生,將進入中斷響應(yīng),實現(xiàn)對中斷函數(shù)的調(diào)用。
4 總結(jié)
C語言作為編程語言中經(jīng)典的一類程序設(shè)計語言,因其結(jié)構(gòu)化、可移植化、編程簡介的特點,被廣泛的應(yīng)用國民生產(chǎn)的各個領(lǐng)域。而隨著信息技術(shù)、互聯(lián)網(wǎng)技術(shù)以及物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,未來C語言的應(yīng)用領(lǐng)域?qū)⒆兊酶訌V泛。對C語言在軟件編程方面的研究和分析將變得更有意義。
參考文獻
[1]顧泰龍,李遠靜.基于C語言的計算機軟件編程實驗研究[J].軟件工程師,2013(08).
[2]李強.計算機軟件開發(fā)語言的選擇探討[J].電子制作,2013(09).
作者單位
(蘇州大學(xué)計算機科學(xué)與技術(shù)學(xué)院,江蘇蘇州215006)
摘要:分析匯編程序?qū)嶒炚n中碰到的若干問題,提出在VC++開發(fā)工具中嵌入?yún)R編,在匯編程序中采用結(jié)構(gòu)化程序方法、借助反匯編進一步學(xué)習(xí)高級語言、以實際應(yīng)用激發(fā)學(xué)生學(xué)習(xí)興趣3個教學(xué)實踐,為匯編語言實驗教學(xué)提供參考。
關(guān)鍵詞 :匯編語言;程序設(shè)計;反匯編
文章編號:1672-5913(2015)15-0097-03
中圖分類號:G642
基金項目:國家級計算機與信息技術(shù)實驗教學(xué)中心資助項目( 50118003)。
第一作者簡介:刁,男,實驗師,研究方向為中文信息處理、機器學(xué)習(xí),hjdiao@suda.edu.cn。
1 背景
匯編語言是一種面向機器的程序設(shè)計語言,在高等院校計算機專業(yè)的學(xué)科中,是一門軟件與硬件相結(jié)合的基礎(chǔ)課程。通過匯編語言,在硬件方面可以了解CPU、BIOS等編程結(jié)構(gòu),在軟件方面可以理解操作系統(tǒng)、編譯原理等底層操作。因此,學(xué)生學(xué)好匯編語言程序設(shè)計,不但能更好地掌握計算機工作原理、微機編程接口,還能進一步加深對操作系統(tǒng)和高級語言的理解。
2 匯編語言實驗課程現(xiàn)狀
(1)匯編語言編輯編譯麻煩。學(xué)生早已習(xí)慣了C++/Java等高級語言的可視化集成式開發(fā)環(huán)境,而匯編實驗還采用MASM、LINK等命令行編譯連接工具,匯編程序書寫時也不像高級語言那樣具有上下文智能提示功能的編輯工具,對用慣了高級語言編程工具的學(xué)生來說,命令行編譯連接工具給匯編實驗入門帶來一定的困難。
(2)匯編語言程序編寫繁瑣。匯編語言是面向機器的語言,匯編指令與機器指令之間存在著密切的關(guān)系,因此其語言表達能力和方式受限于機器的指令系統(tǒng)。書寫匯編程序不僅需要在程序邏輯上花費精力,還要在內(nèi)存分配、尋址和訪問上投入甚多,相比于高級語言,其書寫繁瑣很多。就拿C語言中經(jīng)典的“Hello World”程序做比較,在80×86匯編程序中,首先要定義存放字符串的數(shù)據(jù)段并為其字符串存儲空間,然后定義堆棧段,再定義代碼段以及匯編編譯指令和代碼指令,不但匯編語句比高級語言繁瑣,程序結(jié)構(gòu)也比高級語言冗長。
(3)匯編語言程序調(diào)試困難。匯編語言提供給程序員很大的訪問機器資源的“能力”和程序設(shè)計的靈活性,學(xué)生在匯編程序中可以通過各種技巧使用資源。因此,在調(diào)試程序的時候,不僅要正確理解當(dāng)前指令的含義,還要清楚指令中使用到的資源的狀態(tài)以及指令執(zhí)行完對資源的影響。匯編語言的調(diào)試工具也不像Java/C#等高級語言那樣,有智能化的表達式監(jiān)控窗口以及調(diào)試步驟回退功能。
(4)匯編語言結(jié)構(gòu)條理性差。高級語言中任何程序邏輯都是由順序、分支、循環(huán)3種結(jié)構(gòu)組合而成,而且3種結(jié)構(gòu)進行嵌套時都通過分層次縮進的方式進行對齊。然而在匯編程序中一方面沒有定義這3種邏輯結(jié)構(gòu)的規(guī)范,另一方面匯編程序書寫是一行一條語句,語句與語句之間按行對齊,并不按嵌套縮進的方式對齊。因此,學(xué)生在寫匯編程序時自由度比較高,分支和循環(huán)在匯編中只能通過各種轉(zhuǎn)移指令實現(xiàn),如果這些轉(zhuǎn)移指令使用不規(guī)范,不但使程序的可讀性很差,而且導(dǎo)致整個程序結(jié)構(gòu)很凌亂,從而演變?yōu)椤懊鏃l式”代碼。
3 匯編實驗改進實踐
3.1 VC++開發(fā)工具中嵌入?yún)R編語言
為了降低學(xué)生匯編實驗入門的門檻,教師可以采用學(xué)生熟悉的VC++編程工具,以C語言嵌入?yún)R編語句的方式先開展匯編實驗。例如,設(shè)X和y均為16位無符號數(shù),用加法指令實現(xiàn)求解表達式SX+Y值的程序。用C語言嵌入?yún)R編語言的代碼如圖1所示。
在C語言中嵌入?yún)R編語言比書寫完整的匯編程序在結(jié)構(gòu)上要簡單很多,學(xué)生可以把重點放在匯編指令和尋址方式的學(xué)習(xí)上,通過這種實驗方式也教會了學(xué)生用C語言和匯編語言編寫混合程序的方法。等學(xué)生熟悉并掌握了完整的匯編語言書寫格式后,再使用命令行的編譯和連接工具進行匯編實驗。
3.2 在匯編程序中采用結(jié)構(gòu)化程序方法
隨著匯編實驗的開展,匯編實驗越來越難,匯編程序邏輯也越來越復(fù)雜。如果這個時候?qū)W生不能養(yǎng)成良好的編程風(fēng)格,勢必會造成程序代碼混亂、匯編實驗效率低下的問題。因此,教師可以在匯編教學(xué)實驗中引入高級語言中的結(jié)構(gòu)化程序設(shè)計的方法,讓學(xué)生嚴格按照結(jié)構(gòu)化的套路設(shè)計程序,例如,寫一個把字符串中的所有大寫字母改成小寫字母的程序。字符串大寫轉(zhuǎn)小寫的流程如圖2所示。
字符大寫轉(zhuǎn)小寫流程的邏輯結(jié)構(gòu)由while循環(huán)和在while循環(huán)中內(nèi)嵌的一個單分支結(jié)構(gòu)構(gòu)成。因此,在編寫上述程序時可以用匯編語句先構(gòu)造while循環(huán)結(jié)構(gòu),再在while循環(huán)結(jié)構(gòu)中嵌入單分支結(jié)構(gòu),其他的順序性匯編代碼只要填寫到相應(yīng)的結(jié)構(gòu)中就可以了。兩種結(jié)構(gòu)的代碼如圖3所示,這樣整個程序就可以按結(jié)構(gòu)化方式進行設(shè)計了。這樣不但提高了學(xué)生編寫程序的效率,還進一步加強了學(xué)生對高級語言中的各種分支和循環(huán)結(jié)構(gòu)在編譯器層面的理解。
3.3 借助反匯編進一步學(xué)習(xí)高級語言
結(jié)構(gòu)化匯編程序設(shè)計讓學(xué)生初步了解了分支和循環(huán)等結(jié)構(gòu)在編譯器層面的實現(xiàn)。利用匯編或反匯編輸出,學(xué)生們還可以進一步了解高級語言中一些特性在編譯層面的實現(xiàn)。例如,關(guān)于C語言程序中局部靜態(tài)和動態(tài)變量編譯實現(xiàn)上的區(qū)別,事例C語言代碼經(jīng)匯編輸出后如圖4所示。
從圖4中可以看出“a=3”轉(zhuǎn)換為匯編語言后對變量a采用直接尋址,而“_?a@?l??main-@@9@4HA”這個字符串是在段名為“BBS”的數(shù)據(jù)段中定義的,代碼如圖5所示。
“b=4”轉(zhuǎn)換為匯編語言后對變量b采用寄存器相對尋址,“b$”被定義為常量,其值為-4,而“ebp”則是程序調(diào)用?;分羔?。因此,從匯編后的代碼中學(xué)生可以看出局部靜態(tài)變量存放在數(shù)據(jù)段中,函數(shù)執(zhí)行結(jié)束后其存儲空間不會被回收,而局部動態(tài)變量則存放在程序調(diào)用棧中,函數(shù)執(zhí)行結(jié)束后其存儲空間則被調(diào)用棧調(diào)整出去。學(xué)生通過對高級語言匯編或反匯編輸出,還能進一步了解關(guān)于一維數(shù)組的指針和一維數(shù)組首地址的指針以及類中普通成員函數(shù)和虛函數(shù)等編譯層面的區(qū)別。
3.4 以實際應(yīng)用激發(fā)學(xué)生學(xué)習(xí)興趣
興趣是學(xué)習(xí)最好的導(dǎo)師,教師要通過有應(yīng)用價值的實例激發(fā)學(xué)生學(xué)習(xí)的興趣,讓學(xué)生了解匯編語言的用武之地,例如,可以向?qū)W生講解硬件驅(qū)動、屏幕取詞、單片機開發(fā)、緩沖區(qū)溢出攻擊的原理;同時讓學(xué)生寫一些簡單而力所能及的小程序,如基于280單片機的電子廣告牌控制程序,這樣一方面提高學(xué)生匯編實驗的動手能力,另一方面也加深了學(xué)生對操作系統(tǒng)、微機接口等相關(guān)課程的理解。
4 結(jié)語
實踐結(jié)果表明,與往屆學(xué)生匯編實驗情況對比,使用C語言中嵌入?yún)R編代碼方式的學(xué)生能很快上手開展匯編實驗,明顯降低了學(xué)生匯編實驗入門的門檻,提高了學(xué)生匯編實驗的效率;通過匯編程序中采用結(jié)構(gòu)化程序的方法,學(xué)生能快速寫出多重嵌套的匯編程序,能明顯增強學(xué)生閱讀和編寫復(fù)雜匯編程序的能力;借助反匯編學(xué)習(xí)高級語言只能提高基礎(chǔ)知識較好的學(xué)生各科知識點串聯(lián)和貫通的程度,部分學(xué)生由于基礎(chǔ)知識較差,融會貫通多科知識點還較困難;以實際應(yīng)用激勵學(xué)生也只能讓少部分可以靜下心來刻苦鉆研的學(xué)生比較感興趣,部分學(xué)生感覺題目綜合性強,涉及知識點多,課后不認真鉆研,很容易就會對實際應(yīng)用失去興趣。經(jīng)過多方面嘗試,教學(xué)雖然取得一定的效果,也暴露出一些不足,這些也成為我們匯編教學(xué)和實驗中需繼續(xù)思考和解決的問題。
參考文獻:
[1]張洪業(yè),宋人杰,周欣欣,“匯編語言”教學(xué)改革與實踐[J].計算機教育,2009(21): 60-61.
[2]沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計[M],北京:清華大學(xué)出版社,2001: 50-52.
關(guān)鍵詞:學(xué)習(xí)共同體;匯編語言;學(xué)習(xí)模式
作者簡介:胡靜芳(1980-),女,江西南昌人,景德鎮(zhèn)陶瓷學(xué)院信息工程學(xué)院,講師;李步升(1978-),男,江西大余人,景德鎮(zhèn)陶瓷學(xué)院信息工程學(xué)院,講師。(江西 景德鎮(zhèn) 333403)
基金項目:本文系2012年江西省省級教改基金項目的研究成果。
中圖分類號:G642.0 文獻標識碼:A 文章編號:1007-0079(2013)32-0101-02
1999年高校大規(guī)模擴招以來,我國高等教育由精英教育階段進入了大眾化教育階段,本科生的教育也從單一的專業(yè)教育轉(zhuǎn)變?yōu)椤皬V基礎(chǔ)、窄專業(yè)”的教育。所以在教學(xué)大綱的多次修訂下,專業(yè)課課時越來越少,學(xué)時的壓縮導(dǎo)致課堂呈現(xiàn)一言堂式的教學(xué)模式,課堂上師生互動越來越少。隨著學(xué)生人數(shù)的增加,大部分學(xué)校課程都是大班教學(xué)模式,教學(xué)內(nèi)容的更新、學(xué)生人數(shù)的激增和專業(yè)課課時的壓縮已經(jīng)成為大眾化教育下課堂教學(xué)的現(xiàn)實瓶頸。研究一種新的教學(xué)模式以解決當(dāng)下日益增長的教學(xué)矛盾成了一個迫切的問題。
一、“學(xué)習(xí)共同體”概念
“學(xué)習(xí)共同體”(learning community)有時又被翻譯為“學(xué)習(xí)社區(qū)”,顧名思義,在這個社區(qū)中應(yīng)該有多重角色存在。在這里引入的“學(xué)習(xí)共同體”概念主要是針對在校學(xué)習(xí)的情況,所以該“學(xué)習(xí)共同體”是由在校大學(xué)生充當(dāng)?shù)膶W(xué)習(xí)者角色和由教師充當(dāng)?shù)闹鷮W(xué)者角色共同組成。這個社區(qū)是以完成課程學(xué)習(xí)任務(wù)為目標,同時要求學(xué)習(xí)者發(fā)揮主觀能動性,與其他學(xué)習(xí)者互相溝通交流以及分享各種學(xué)習(xí)資源和學(xué)習(xí)心得,進而相互影響共同進步。它與傳統(tǒng)的教學(xué)方式的主要區(qū)別就在于強調(diào)了學(xué)生與學(xué)生的溝通、學(xué)生與老師的互動,在學(xué)習(xí)中強調(diào)發(fā)揮集體的力量。據(jù)統(tǒng)計,學(xué)生從老師處學(xué)到的知識占個人知識總量的百分比不足20%,剩下的知識都是通過課外閱讀和平時生活積累來獲取的。所以在“學(xué)習(xí)共同體”的教學(xué)模式下,作為助學(xué)者的教師要能給學(xué)生一定的空間,讓學(xué)生自己去思考和理解分析。師生之間、學(xué)生之間相互協(xié)作互動,共同完成知識獲取的過程。
二、景德鎮(zhèn)陶瓷學(xué)院“匯編語言程序設(shè)計”課程現(xiàn)狀
“匯編語言程序設(shè)計”是高校計算機科學(xué)與技術(shù)專業(yè)本科生的一門必修專業(yè)基礎(chǔ)課,是計算機操作系統(tǒng)、編譯原理等其它核心課程的必要先修課,但它卻是學(xué)生和老師都普遍反映難學(xué)難教的課程。第一,課程本身概念相對抽象,又和硬件底層密切相關(guān),使得學(xué)生普遍反映難學(xué)、難理解。第二,這門課程的上機實驗用的masm軟件是DOS黑白界面,編譯鏈接過程繁瑣,實驗結(jié)果也不直觀,讓很多學(xué)生對實驗失去興趣。第三,由于這是一門面向機器的語言,不直接面向應(yīng)用系統(tǒng)進行開發(fā),使很多同學(xué)都對匯編語言課程學(xué)習(xí)的必要性產(chǎn)生懷疑。
由于專業(yè)學(xué)時的壓縮,景德鎮(zhèn)陶瓷學(xué)院(以下簡稱“我?!保﹨R編語言課程學(xué)時壓縮為48學(xué)時,其中理論課時為32學(xué)時,實驗學(xué)時為16學(xué)時。教師要在這32學(xué)時內(nèi),面對80~100人的大班將匯編語言的幾大知識體系講清楚,只能采取教師全程講述的教學(xué)模式,這樣學(xué)生的參與度不高,興趣也就不高了,教學(xué)質(zhì)量也就無法得到保證。
三、“匯編語言程序設(shè)計”采用“學(xué)習(xí)共同體”教學(xué)模式的構(gòu)建策略
“學(xué)習(xí)共同體”教學(xué)模式中強調(diào)了學(xué)習(xí)是學(xué)習(xí)者(大學(xué)生)主動建構(gòu)內(nèi)部心理表征的過程,所以學(xué)習(xí)需要學(xué)生之間、學(xué)生與老師之間的對話與合作,而學(xué)生理解獲取知識的過程受到特定學(xué)習(xí)環(huán)境的影響。所以本課題準備從以下五個方面來構(gòu)建課堂“學(xué)習(xí)共同體”:
1.課程教學(xué)目標設(shè)定
(1)培養(yǎng)濃厚的學(xué)習(xí)興趣。在“學(xué)習(xí)共同體”的教學(xué)模式下,課堂教學(xué)的首要目標就是培養(yǎng)學(xué)生的學(xué)習(xí)興趣。引導(dǎo)學(xué)生建立“學(xué)習(xí)不光是為了考試拿學(xué)位,更重要的是提升自身的能力”的觀點。在匯編語言課程教學(xué)中首先要更正學(xué)生認為匯編語言已經(jīng)過時的錯誤觀念,使其認識到匯編語言尤其適用于軟硬件緊密結(jié)合的環(huán)境,例如單片機、嵌入式等場合。在課堂上多介紹目前流行的嵌入式開發(fā),讓學(xué)生覺得匯編語言的前景還是光明的,引發(fā)學(xué)習(xí)興趣。
本課題采用多種教學(xué)方法以提高學(xué)生的學(xué)習(xí)興趣。首先將一些基本的驗證性實驗作為作業(yè)布置下去,從驗證著手,讓學(xué)生通過電腦驗證結(jié)果,發(fā)掘匯編語言的奇妙性。其次對于一些抽象的概念聯(lián)系生活實際來展開教學(xué)。最后對于實驗環(huán)節(jié),盡量給學(xué)生布置有明顯實驗結(jié)果的實驗內(nèi)容,這樣學(xué)生能感覺到自己的努力有了效果,更增加了學(xué)習(xí)興趣。
(2)根據(jù)個性差異和學(xué)習(xí)能力創(chuàng)建多個學(xué)習(xí)小組。在“學(xué)習(xí)共同體”的教學(xué)模式下,還應(yīng)該注意學(xué)生之間的個人差異,要根據(jù)不同的個性和學(xué)習(xí)能力制訂不同的目標層次。我校匯編語言課程開設(shè)在三年級上學(xué)期,經(jīng)過前兩年的學(xué)習(xí),每個學(xué)生的能力各不相同。課程開始之初讓學(xué)生自主組建學(xué)習(xí)小組,以5~6人為一單位,將以往的獨立學(xué)習(xí)改為團隊學(xué)習(xí)。實驗課程中每一小組都有獨立的實驗小題目,小組成員共同完成任務(wù),各小組之間進行競爭,實驗成績最終納入最后的課程成績考核。在組建學(xué)習(xí)小組的過程中,每個學(xué)生都會切實考慮自身的能力。比如能力強的同學(xué)希望能強強結(jié)合,這樣實驗中可以選擇系數(shù)重的題目給自己加分,而能力稍弱的同學(xué)也希望能在小組競爭中取得加分。因此教師就必須給小組中的每一個學(xué)生分配好任務(wù),使他們通過自己的課外查閱,與教師溝通,共同完成分配任務(wù)。這樣就極大地促進了學(xué)生學(xué)習(xí)的主觀能動性,主動努力去完成自己的學(xué)習(xí)目標。
2.自主學(xué)習(xí)環(huán)境
在基于“學(xué)習(xí)共同體”的教學(xué)模式中,教師應(yīng)更加注重學(xué)生的課程參與度。要做到學(xué)生和教師之間良好互動,就要求學(xué)生事先熟悉課本知識,在課前完成自主學(xué)習(xí)。但是大學(xué)生活豐富多彩,對于大多數(shù)的學(xué)生來說,保證提前預(yù)習(xí)相關(guān)內(nèi)容存在一定難度。所以對于“學(xué)習(xí)共同體”的助學(xué)者——教師就要幫助學(xué)習(xí)者實現(xiàn)自我管理,創(chuàng)建自主學(xué)習(xí)環(huán)境。目前已經(jīng)在學(xué)校的THEOL網(wǎng)絡(luò)教學(xué)綜合平臺上進行了“匯編語言課程設(shè)計”課程的精品課程建設(shè),在這個平臺上把該課程的教學(xué)大綱、授課計劃以及授課教案都掛在上面。這樣學(xué)生就能很清楚地知道每節(jié)課要講什么,哪些是重點,哪些是難點,可以有的放矢地進行預(yù)習(xí)。教師把相關(guān)課程的講課錄像掛在網(wǎng)上,學(xué)生如果想提前預(yù)習(xí)還可以進行網(wǎng)絡(luò)聽課。每節(jié)課的作業(yè)也都被掛在這個系統(tǒng)上,所有的學(xué)生都必須進入該系統(tǒng)進行作業(yè)。以上做法都保證了學(xué)生的自主學(xué)習(xí)環(huán)境。
3.課堂教學(xué)安排
相比傳統(tǒng)的一言堂講授式教學(xué)模式,基于“學(xué)習(xí)共同體”教學(xué)模式就更應(yīng)該注重課堂教學(xué)形式的多樣化。首先根據(jù)教學(xué)內(nèi)容不同階段特點設(shè)計不同的教學(xué)方式。最初接觸匯編語言,應(yīng)該先給學(xué)生建立基本的匯編概念,比如匯編中的段、匯編中的尋址等。當(dāng)學(xué)生對概念熟悉到一定程度的時候,就要重點讓他們利用所學(xué)知識去解決實際的問題了。在引出下一個知識點時,教師應(yīng)更加注重方式方法。筆者的做法是在每一個知識點結(jié)束的時候都設(shè)計好一個問題,然后讓學(xué)生積極發(fā)言,與學(xué)生一起研究探索解決問題的方案,進而引入下一個知識點,這樣學(xué)生在研究討論的過程中掌握了新的知識點。
4.教學(xué)過程監(jiān)督與評價策略
大班教學(xué)不可能掌握每一個學(xué)習(xí)者的學(xué)習(xí)進度,因此在評價中應(yīng)設(shè)計合理的評價體系。本課題組在教學(xué)過程中采用考慮綜合能力和課程參與度的方式進行綜合評價,采用平時和考試3:7的方式進行考核。考試成績一考定分數(shù),但是這只占考核成績的70%。剩下的30%就由平時的考勤和上課參與度以及分組實驗的成績來綜合評價??记谝膊皇呛唵吸c名,教師會不定期在課堂上留下小作業(yè),讓學(xué)生當(dāng)場完成并上交,這樣既可以作為點名依據(jù),也能看出學(xué)生是否掌握課堂內(nèi)容,爭取對所有的學(xué)生都做到公平公正。
四、總結(jié)
“學(xué)習(xí)共同體”這是一種區(qū)別于原來以教師“教”為主的全新的教學(xué)模式,但對它的研究畢竟有限,所以在上文中只列出了幾點構(gòu)建策略。在今后的教學(xué)研究中將采取更多的教學(xué)方法,來歸納出一套切實可行的教學(xué)方法,以適應(yīng)新的教學(xué)模式。本課題在深入研究已有的“學(xué)習(xí)共同體”理論基礎(chǔ)上,用抽象的匯編語言程序設(shè)計作為載體,從課堂教學(xué)出發(fā),對教學(xué)目標、教學(xué)安排、教學(xué)評價等多方面做了具體的研究設(shè)計,對解決當(dāng)前課時少、學(xué)生人數(shù)多的大班教學(xué)問題是一個重要的探索。目前這種教學(xué)模式僅僅被應(yīng)用在匯編語言課程設(shè)計這一門課上,如果成功,對其它后繼專業(yè)課的學(xué)習(xí)都將起到推動作用。
參考文獻:
[1]辛源,冒榮.大學(xué)學(xué)習(xí)共同體:創(chuàng)新學(xué)習(xí)視角下的解讀[J].江蘇高教,2008,(2).
[2]南旭光,羅慧英,張燕.基于網(wǎng)絡(luò)學(xué)習(xí)共同體的任務(wù)驅(qū)動型教學(xué)模式分析——以開放教育工商管理模擬實驗為例[J].現(xiàn)代教育技術(shù),
2009,19(12):68-71.
關(guān)鍵詞:匯編語言;排序;冒泡排序
中圖分類號: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
一、引言
排序是計算機程序設(shè)計中的一種重要運算,其功能是將一個數(shù)據(jù)元素的任意序列,重新排列成一個按關(guān)鍵字有序的序列。經(jīng)過排序的數(shù)據(jù)可采用優(yōu)化的算法提高程序的執(zhí)行效率;增加輸出數(shù)據(jù)的清晰度,便于信息檢索;同時經(jīng)過排序后的數(shù)據(jù)往往還隱含一些特殊的含義,為用戶提供有價值的信息。
匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機所有硬件特性并能直接控制硬件的唯一語言,因而,對于程序的空間和時間要求很高的場合,匯編語言是必不可少的。本文將主要討論如何利用匯編語言實現(xiàn)數(shù)據(jù)的排序功能。
二、算法分析
設(shè)計要求:編寫一個排序程序,實現(xiàn)10個數(shù)據(jù)的從小到大的升序排列。
程序算法:氣泡排序是一種常用的排序方法,它的規(guī)則是:表中相鄰兩元素一一比較,并把大值元素向下交換,直至表尾(大值元素落底),此時,稱為一次冒泡(程序中一次大循環(huán))。以后重復(fù)冒泡排序,直至最小元素冒到表頂為止。若在一次冒泡排序中沒有出現(xiàn)兩元素交換(設(shè)標志為0),則停止排序。
具體算法:該程序采用雙重循環(huán)結(jié)構(gòu),其中DL用來設(shè)置外循環(huán)次數(shù),CX用來設(shè)置內(nèi)循環(huán)次數(shù),DH設(shè)為交換標志。其中內(nèi)部循環(huán)L1主要完成一次冒泡過程,即對相鄰兩個元素進行比較。外循環(huán)L2主要用來控制整個冒泡的次數(shù),即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
三、算法分析
空間效率:冒牌法排序僅用了一個輔助單元,即空間復(fù)雜度為O(1)。
時間效率:
待排元素狀態(tài) “比較”次數(shù) “移動”次數(shù)
正序 n-1 0
逆序 n(n-1)/2 3n(n-1)/2
若待排序元素處于隨機狀態(tài),則冒泡法排序的平均時間復(fù)雜度為O(n2)。
穩(wěn)定性:冒泡排序是一種穩(wěn)定排序方法。
四、結(jié)束語
本文主要介紹了采用匯編語言實現(xiàn)數(shù)據(jù)排序功能的具體方法.排序是計算機程序設(shè)計中的一種重要運算,排序還有很多方法,例如選擇排序,基數(shù)排序,快速排序等等。本文主要介紹了常用的冒泡排序法,希望以此為基礎(chǔ)能夠?qū)懗銎渌判蚍椒ǖ膮R報語言程序。此外,排序算法同樣可以采用C語言來實現(xiàn),而且同學(xué)們在大一時就已經(jīng)學(xué)習(xí)過C語言。因此在教學(xué)過程中,還可以采用類比法進行講授,激發(fā)學(xué)生的學(xué)習(xí)興趣。
參考文獻:
[1]沈美明,溫冬嬋.IBM-PC匯編語言程序設(shè)計(第2版)[M].清華大學(xué)出版社