匯編語言程序設(shè)計課程的教學(xué)設(shè)計_第1頁
匯編語言程序設(shè)計課程的教學(xué)設(shè)計_第2頁
匯編語言程序設(shè)計課程的教學(xué)設(shè)計_第3頁
匯編語言程序設(shè)計課程的教學(xué)設(shè)計_第4頁
匯編語言程序設(shè)計課程的教學(xué)設(shè)計_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

匯編語言程序設(shè)計課程的教學(xué)設(shè)計

“語言編程”是一項重要的計算課程。目前,中國大多數(shù)高校都有相關(guān)課程。從時間上看,“匯編語言程序設(shè)計”一般開設(shè)在大學(xué)二年級,從課程的銜接上看,則一般開設(shè)在“高級語言程序設(shè)計”和“計算機組成原理”之后。匯編語言也好,高級語言也好,它們都只不過是程序設(shè)計的工具,因此對于程序的基本功能和程序設(shè)計的基本問題,它們都有相應(yīng)的實現(xiàn)機制,而且在很多方面都是相通的,尤其是在程序設(shè)計的基本思想方法上。但匯編語言和高級語言畢竟是兩種不同的語言類別。從源程序的基本單位——語句的層面看,高級語言語句的功能遠比匯編語言語句即各種指令和偽指令的功能要強大。此外即便是同樣的問題,如數(shù)據(jù)安排、數(shù)據(jù)處理、流程控制、子程序結(jié)構(gòu)等,它們的實現(xiàn)機制也不一樣。效率最高的教學(xué)方法首推比較教學(xué)法(或叫類比教學(xué)法),也就是將新的陌生的東西和舊的熟悉的東西做比較,找出它們之間相同的地方和不同的地方,然后進行差異化的學(xué)習(xí),重在存同求異,這樣就會事半功倍。因此,筆者在多年從事“匯編語言程序設(shè)計”的教學(xué)中,特別注重以學(xué)生在學(xué)習(xí)高級語言程序設(shè)計課程時所獲得的知識和體驗為基礎(chǔ),將匯編語言和高級語言進行比較教學(xué)。本文就是這一教學(xué)方法的經(jīng)驗總結(jié)。1匯編語言中的數(shù)據(jù)空間程序是用來加工處理數(shù)據(jù)的,因此程序設(shè)計工作離不開數(shù)據(jù)的組織安排。數(shù)據(jù)的組織安排就是指為程序加工處理的數(shù)據(jù)安排合適的空間并且組織好,以提高對數(shù)據(jù)加工處理的效率。從應(yīng)用層面看,數(shù)據(jù)的組織安排通常包括3個方面:(1)安排在哪?即空間位置問題。(2)安排多大空間?即數(shù)據(jù)長度問題。(3)存放什么樣的數(shù)據(jù)?即數(shù)據(jù)類型問題。在數(shù)據(jù)空間的組織安排方面,匯編語言和高級語言的一個重要差別是:高級語言提供的是直接面向應(yīng)用的數(shù)據(jù)類型,如C語言中的基本類型——整型(int)、浮點型(float)、字符型(char),而整型又有長(long)、短(short)之分,浮點型又有單精度(single)和雙精度(double)之分,此外還有有符號(signed)和無符號(unsigned)之分等。高級語言的數(shù)據(jù)類型是面向應(yīng)用的,因此它們有兩方面的含義:類型特點和長度大小,這就解決了上述3個問題中的后兩個問題。在C語言中,數(shù)據(jù)除了有類型這個概念之外,還有類別之分,即存儲類別問題,共有4種:static、auto、register和extern。從嚴格意義上講,其中和數(shù)據(jù)空間的組織安排有關(guān)的只是前3種:static和auto對應(yīng)的是內(nèi)存空間,而register對應(yīng)的則是寄存器空間,這又解決了上述3個問題中的第一個問題。與高級語言不同的是,匯編語言的數(shù)據(jù)類型是面向機器的,如MASM中的基本類型——DB、DW、DD、DQ、DT等,它們只有長度大小的含義,而且都是對應(yīng)內(nèi)存空間的,因此用它們定義的變量都屬于內(nèi)存變量。在匯編語言中,由于可以直接引用各個寄存器,而且各個寄存器的空間大小都是確定的,因此這些寄存器實際上就相當(dāng)于C語言中的寄存器變量。總之,在匯編語言中,數(shù)據(jù)一般只有空間大小和位置之分,而不管這個空間中存放什么樣的數(shù)據(jù),即無類型之分。因此,在用匯編語言設(shè)計程序時,對程序中的數(shù)據(jù)有一個面向應(yīng)用的自我理解問題!這是在教學(xué)時應(yīng)特別予以關(guān)注的!2面向系統(tǒng)的輸出機制在數(shù)據(jù)的輸入輸出方面,匯編語言和高級語言也有重要差別。以面向標(biāo)準(zhǔn)輸入輸出設(shè)備的數(shù)據(jù)輸入輸出為例,高級語言提供的也是直接面向應(yīng)用的相關(guān)語句、函數(shù)和過程,如C語言中的fprintf、printf、sprintf、vprintf、vfprintf、vsprintf、fscanf、scanf、sscanf、fgetc、fputc、getc、putc、getchar、putchar、fgets、fputs、pus、gets等,這些函數(shù)基本上滿足了面向應(yīng)用的各種類型數(shù)據(jù)的輸入輸出。匯編語言提供的則基本上是面向字符的中斷調(diào)用,即通過調(diào)用相關(guān)的中斷服務(wù)程序來實現(xiàn)數(shù)據(jù)的輸入輸出,如MASM中的常用的DOS提供的21H類中斷服務(wù)程序的1、2、8、9、10號功能等??傊?高級語言提供的一般是直接面向應(yīng)用的輸入輸出機制,而匯編語言提供的則一般是面向系統(tǒng)的輸入輸出機制。因此在匯編語言程序設(shè)計的教學(xué)中,如何利用面向系統(tǒng)的輸入輸出機制通過編程實現(xiàn)面向應(yīng)用的輸入輸出功能是我們的又一個重點。在數(shù)據(jù)的內(nèi)部加工處理方面,高級語言和匯編語言都提供一序列的運算符。在C語言中,這些運算符包括為數(shù)據(jù)傳送提供的賦值運算符“=”和為數(shù)據(jù)運算提供的算術(shù)運算符“+、-、*、/、%、++、--”、關(guān)系運算符“>、>=、<、<=、==、!=”、邏輯運算符“&&、||、!”和位運算符“&、|、~、<<、>>”以及各種混合運算符等。在MASM中,這些運算符包括算術(shù)運算符:“+、-、*、/、MOD”,邏輯運算符:“AND、OR、NOT、XOR”,關(guān)系運算符:“EQ、NE、LT、GT、LE、GE”,移位運算符:SHR和SHL等。值得注意的是,除了形式上的差別外,高級語言的運算符和匯編語言的運算符在功能上也是有差別的:高級語言的運算符往往可以用在包括常量和變量的各種數(shù)據(jù)之間,而匯編語言的運算符則往往只能用在常量之間,對變量的加工處理則是依靠相應(yīng)的指令來實現(xiàn)的。3匯編語言的二分支機構(gòu)為了實現(xiàn)流程控制,高級語言都提供有兩類基本語句:分支控制語句和循環(huán)控制語句,如C語言和PASCAL語言中的if語句、switch語句、for語句、while語句、do-while語句、case語句、repeat語句以及比較特別的goto語句等。匯編語言則提供有相應(yīng)的流程控制類指令,如MASM中的無條件轉(zhuǎn)移指令(JMP)、條件轉(zhuǎn)移指令(JA、JB、JAE、JBE、JNZ、JZ、JG、JL、JGE、JLE、JO、JNO、JS、JNS、JC、JNC等)、循環(huán)控制指令(LOOP、LOOPZ、LOOPNZ)等。在功能上,匯編語言的轉(zhuǎn)移類指令既可以用于分支控制,也可以用于循環(huán)控制,而循環(huán)類指令則自然主要用于循環(huán)控制。它們的實現(xiàn)機制在高級語言中也有體現(xiàn),如C語言中的goto語句。從功能上看,C語言中的goto語句主要有兩種用法:(1)goto標(biāo)號;(2)if條件goto標(biāo)號。前一種用法實現(xiàn)的正好是匯編語言中無條件轉(zhuǎn)移指令的功能,而后一種用法實現(xiàn)的則正好是匯編語言中條件轉(zhuǎn)移指令和循環(huán)控制指令的功能。在用匯編語言寫分支控制程序時尤其要注意的是,由于只能一個分支一個分支的縱向展開,因此除最后書寫的分支外,前面的分支結(jié)尾處一般都應(yīng)該有一條無條件轉(zhuǎn)移指令以跳過后面的分支,避免執(zhí)行不該執(zhí)行的分支。例如:輸入一個字符,判斷其是否為數(shù)字‘9’,若是,則輸出字符‘Y’;否則,輸出字符‘N’。這是一個簡單的二分支問題,其匯編語言程序段如下:匯編語言除了提供上述轉(zhuǎn)移控制類指令和循環(huán)控制類指令以實現(xiàn)分支程序設(shè)計和循環(huán)程序設(shè)計外,還提供有子程序和中斷服務(wù)程序的調(diào)用(CALL、INT)指令和返回(RET、IRET)指令以及比較特別的重復(fù)前綴指令(REP、REPZ、REPNZ)等。匯編語言的子程序概念和高級語言中的子程序概念、函數(shù)概念以及過程概念是對應(yīng)的,而中斷服務(wù)程序概念則一般是匯編語言獨有的。如果僅從程序執(zhí)行機制上看,子程序、函數(shù)、過程、中斷服務(wù)程序的地位是一樣的,只不過是在不同的語言環(huán)境中采用了不同的稱呼而已。主程序和子程序、函數(shù)、過程、中斷服務(wù)程序之間的流程控制都是通過調(diào)用與返回實現(xiàn)的,差別是:在高級語言中,主程序和子程序、函數(shù)、過程之間的流程控制是通過直接引用子程序、函數(shù)或過程的名字(加上適當(dāng)?shù)膮?shù))來實現(xiàn)的;而在匯編語言中,主程序和子程序、中斷服務(wù)程序之間的流程控制是通過前面提到的專門的控制指令(CALL、RET、INT、IRET)來實現(xiàn)的。4子程序參數(shù)傳遞前已述及,匯編語言的子程序結(jié)構(gòu)相當(dāng)于高級語言中的子程序、函數(shù)和過程。在采用子程序結(jié)構(gòu)時,一個重要的問題就是參數(shù)傳遞。主程序在通過調(diào)用子程序為自己解決某些問題時,通常需要為子程序提供一些相關(guān)的數(shù)據(jù),子程序在內(nèi)部對這些數(shù)據(jù)做相應(yīng)的加工處理后應(yīng)該將處理結(jié)果返回給主程序,這就是所謂的參數(shù)傳遞問題。主程序提供給子程序的數(shù)據(jù)通常叫做入口參數(shù),而子程序返回給主程序的數(shù)據(jù)則通常叫做出口參數(shù)。匯編語言子程序的參數(shù)傳遞和高級語言中子程序、函數(shù)或過程的參數(shù)傳遞機制從本質(zhì)上看是一致的。需要做參數(shù)傳遞時,通常有兩種選擇:一種方法是直接傳遞所需要的數(shù)據(jù),另一種方法是傳遞所需數(shù)據(jù)的位置信息即內(nèi)存地址。第一種方法即通常所說的值傳遞,第二種方法即通常所說的地址傳遞。需要注意的是,傳地址的目的也是為了傳數(shù)據(jù)。從表象即實現(xiàn)形式上看,匯編語言子程序的參數(shù)傳遞和高級語言子程序的參數(shù)傳遞卻有著不小的差別。在高級語言中,函數(shù)在定義時往往就有參數(shù)說明,如C語言的函數(shù)定義格式如下:高級語言的函數(shù)在調(diào)用時需要同時提供參數(shù),一般格式是:函數(shù)名(實際參數(shù)表)。而在匯編語言中,子程序在定義時不需要有關(guān)參數(shù)的說明,在調(diào)用時自然也就無需同時提供參數(shù)。如在MASM中,子程序的定義格式為:由此可見,高級語言中函數(shù)的參數(shù)傳遞是顯式進行的,較之匯編語言子程序中隱式進行的的參數(shù)傳遞問題要易于實現(xiàn)和理解接受一些。因此,匯編語言中的子程序的參數(shù)傳遞問題就是教學(xué)中的一個重點內(nèi)容。在匯編語言中,為了實現(xiàn)子程序的參數(shù)傳遞,不管是采用值傳遞還是采用地址傳遞,都需要由程序設(shè)計者事先安排好一個第三方空間。值傳遞時將所需要的數(shù)據(jù)本身放在這個事先安排好的空間中,而地址傳遞時則將存放所需要的數(shù)據(jù)位置信息即內(nèi)存地址放在這個事先安排好的空間里。在安排用于參數(shù)傳遞的第三方空間時,既可以安排寄存器,也可以安排內(nèi)存單元,還可以安排堆棧。因此具體的參數(shù)傳遞方式靈活多樣,而且各有各的優(yōu)勢,在實際應(yīng)用中通常綜合以上各種做法以求達到最佳效果。5比較教學(xué)的必要性限于篇幅,以上僅就程序設(shè)計的幾個主要方面作了比較論述,而且主要是從實現(xiàn)機制的角度來談,因此細節(jié)的東西基本上都省卻了。事實上,在其他方面,匯編語言和高級語言也具有一定的可比性。實踐證明,通過比較教學(xué),一方面可以利用學(xué)生已有的知識和體驗幫助他們更好地學(xué)習(xí)匯編語言的相

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論