馬力妮 趙 剛 夏紅科
文章編號(hào):1672-5913(2009)10-0106-02
摘要:“匯編語(yǔ)言程序設(shè)計(jì)”課程是計(jì)算機(jī)及相關(guān)專業(yè)的專業(yè)基礎(chǔ)課,多年來(lái)隨著計(jì)算機(jī)硬件和軟件的發(fā)展,匯編語(yǔ)言從DOS匯編、80X86匯編到Win32匯編經(jīng)歷了較大的變化。在教學(xué)過(guò)程中如何準(zhǔn)確的制定教學(xué)計(jì)劃、確定教學(xué)內(nèi)容、較好地掌握教學(xué)方法是該課程在教學(xué)過(guò)程中的關(guān)鍵問(wèn)題。本文根據(jù)作者長(zhǎng)期的教學(xué)經(jīng)驗(yàn)和實(shí)踐過(guò)程對(duì)“匯編語(yǔ)言程序設(shè)計(jì)”課程的教學(xué)內(nèi)容和實(shí)踐方法等方面進(jìn)行了探討。
關(guān)鍵詞:匯編語(yǔ)言;教學(xué)內(nèi)容;實(shí)踐方法
中圖分類號(hào):G642
文獻(xiàn)標(biāo)識(shí)碼:B
1引言
“匯編語(yǔ)言程序設(shè)計(jì)”課程是高等院校計(jì)算機(jī)及相關(guān)專業(yè)必修的一門課程,尤其是對(duì)計(jì)算機(jī)專業(yè)來(lái)說(shuō),它是一門靠近機(jī)器的語(yǔ)言課程,該語(yǔ)言在時(shí)間和空間上具有較高的執(zhí)行效率,對(duì)于訓(xùn)練學(xué)生加深對(duì)操縱硬件的方法的理解、掌握系統(tǒng)底層程序設(shè)計(jì)技術(shù)、程序調(diào)試技術(shù)以及程序的代碼分析都有著不可替代的作用。目前,大多數(shù)“匯編語(yǔ)言程序設(shè)計(jì)”的教學(xué)內(nèi)容主要是在實(shí)模式下的16位/32位匯編指令和程序設(shè)計(jì)方法,然而,當(dāng)前保護(hù)模式下的Win32匯編得到了廣泛的應(yīng)用,因此,應(yīng)當(dāng)合理的調(diào)整教學(xué)內(nèi)容,使本門課程更適應(yīng)當(dāng)前的應(yīng)用環(huán)境。同時(shí),案例教學(xué)是當(dāng)前教學(xué)法研究的主要探討的問(wèn)題,如何將復(fù)雜的教學(xué)內(nèi)容案例化,是解決在教學(xué)過(guò)程中匯編語(yǔ)言復(fù)雜難學(xué)問(wèn)題的關(guān)鍵。
2匯編語(yǔ)言教學(xué)內(nèi)容的分析
2.1匯編語(yǔ)言的應(yīng)用情況
匯編語(yǔ)言是與機(jī)器語(yǔ)言一一對(duì)應(yīng)的語(yǔ)言,因此,是培養(yǎng)學(xué)生了解和直接使用計(jì)算機(jī)硬件資源的語(yǔ)言,多年來(lái)匯編語(yǔ)言一直是學(xué)習(xí)和理解其他高級(jí)語(yǔ)言的基礎(chǔ),在教學(xué)過(guò)程中也是計(jì)算機(jī)組成原理、微機(jī)原理與接口技術(shù)、操作系統(tǒng)、接口與通信技術(shù)和計(jì)算機(jī)控制技術(shù)等課程的前導(dǎo)課程,在計(jì)算機(jī)與相關(guān)學(xué)科課程設(shè)置中起著承上啟下的作用。
在實(shí)際應(yīng)用中匯編語(yǔ)言也是有廣泛的應(yīng)用需求,例如:與硬件有關(guān)的嵌入式系統(tǒng)的底層設(shè)計(jì)、操作系統(tǒng)的核心部分設(shè)計(jì)、實(shí)時(shí)控制系統(tǒng)的軟件設(shè)計(jì)、接口電路的初始化程序,外部設(shè)備的底層驅(qū)動(dòng)程序以及復(fù)雜算法的優(yōu)化等,匯編語(yǔ)言具有執(zhí)行速度快占用內(nèi)存空間小的特點(diǎn)。值得說(shuō)明的是匯編語(yǔ)言可移植性差,不同的應(yīng)用環(huán)境采用的匯編語(yǔ)言也不同,但基本原理是相同的,匯編語(yǔ)法規(guī)則和指令格式基本相同,因此,目前大部分高校在匯編語(yǔ)言程序設(shè)計(jì)課程的內(nèi)容設(shè)置上仍以80X86的實(shí)模式為教學(xué)的主要內(nèi)容。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,微機(jī)的操作系統(tǒng)由在DOS系統(tǒng)變?yōu)閃indows系統(tǒng),在Windows系統(tǒng)下的匯編有較大的變化,Win32匯編的應(yīng)用領(lǐng)域也非常廣泛,例如:在Windows下的系統(tǒng)分析、代碼優(yōu)化、系統(tǒng)漏洞和病毒分析等,通過(guò)逆向工程技術(shù)可以還原大型軟件系統(tǒng)底層邏輯以及頂層架構(gòu),通過(guò)反匯編的代碼可以加深對(duì)Windows底層理解,對(duì)高級(jí)語(yǔ)言的系統(tǒng)調(diào)試通過(guò)反匯編解決底層bug的能力,匯編語(yǔ)言仍然是不可替代的。因此,為了能夠適應(yīng)當(dāng)前計(jì)算機(jī)應(yīng)用環(huán)境,匯編語(yǔ)言程序設(shè)計(jì)的教學(xué)內(nèi)容有必然要引入Win32匯編。
2.280X86的三種工作模式
Windows操作系統(tǒng)是一個(gè)多任務(wù)的操作系統(tǒng),可以同時(shí)處理多個(gè)程序。該系統(tǒng)微處理器有3種工作模式:實(shí)模式、保護(hù)模式和虛擬86模式,目前匯編語(yǔ)言程序設(shè)計(jì)課程主要介紹在實(shí)模式下的匯編程序設(shè)計(jì),32位指令也是在實(shí)模式下,因此在實(shí)模式下的80X86處理器就相當(dāng)于一個(gè)快速的8086處理器。保護(hù)模式是80386以上處理器的主要工作模式。在此方式下,可以尋址4GB的地址空間,同時(shí),保護(hù)模式提供了先進(jìn)的多任務(wù)、內(nèi)存分頁(yè)管理和優(yōu)先級(jí)保護(hù)等機(jī)制。虛擬86模式可以在保護(hù)模式的多任務(wù)條件下進(jìn)行16位與32位任務(wù)的切換,支持內(nèi)存分頁(yè)管理和優(yōu)先級(jí),內(nèi)存的尋址方式和8086相同,可以尋址1 MB的空間。由此可知這三種工作模式具有一定的聯(lián)系。
三種工作模式的存儲(chǔ)結(jié)構(gòu)存在較大差異,實(shí)模式是80386以上處理器工作的基礎(chǔ),真正能發(fā)揮Win32作用的是保護(hù)模式,保護(hù)模式是當(dāng)前個(gè)人計(jì)算機(jī)的主要工作模式,因此,匯編語(yǔ)言程序設(shè)計(jì)課程的內(nèi)容應(yīng)在原來(lái)的實(shí)模式下的匯編增加保護(hù)模式的Win32匯編,但是Win32匯編結(jié)構(gòu)具有一定的難度,可以根據(jù)學(xué)生的掌握情況適當(dāng)增減其內(nèi)容。
3實(shí)模式32位匯編與保護(hù)模式的Win32匯編的主要區(qū)別
3.1程序架構(gòu)的區(qū)別
實(shí)模式匯編程序是將程序分成若干個(gè)段,如:數(shù)據(jù)段、代碼段、堆棧段、附加段等段的內(nèi)存模式,每個(gè)段的最大存儲(chǔ)空間為64K,段與段之間可以重疊、部分重疊、鄰接和分離。Win32程序是運(yùn)行在保護(hù)模式下的,Windows操作系統(tǒng)把每一個(gè)Win32應(yīng)用程序放到分開的虛擬地址空間中去運(yùn)行,Win32程序只有一種內(nèi)存模式,即FLAT模式,沒(méi)有64K的段大小限制,所有的Win32的應(yīng)用程序運(yùn)行在一個(gè)連續(xù)、平坦的4GB空間中。由于Win32的匯編程序不用和段寄存器打交道,可以用任意的段寄存器尋址任意的地址空間,因此,保護(hù)模式的Win32匯編比實(shí)模式32位匯編在程序架構(gòu)上更簡(jiǎn)捷方便。
3.2輸入/輸出的方法
在實(shí)模式匯編程序是通過(guò)BIOS和DOS中斷完成輸入/輸出操作的,而保護(hù)模式的Win32匯編的輸入/輸出操作是調(diào)用Windows的API函數(shù),一般要包括三個(gè)關(guān)鍵的動(dòng)態(tài)連接庫(kù):Kernel32.dll(系統(tǒng)服務(wù)功能)、Gdi32.dll(圖形設(shè)備接口)、User32.dll(用戶接口服務(wù)),從而提供了Win32 API 的核心技術(shù)。這樣使得程序員可以像使用高級(jí)語(yǔ)言調(diào)用庫(kù)函數(shù)一樣方便的使用API函數(shù),完成很多功能。但是,雖然 Windows提供了大量的API函數(shù),需要使用者深入的了解和掌握消息、句柄、窗口和API函數(shù)的使用方法,這部分內(nèi)容實(shí)際上是“Windows程序設(shè)計(jì)”課程的主要內(nèi)容,如果“Windows程序設(shè)計(jì)”課程安排在“匯編語(yǔ)言程序設(shè)計(jì)”課程之前,那么,保護(hù)模式的Win32匯編將更容易理解。
4匯編語(yǔ)言案例教學(xué)方法的思路
案例教學(xué)法是教師利用與教學(xué)內(nèi)容密切相關(guān)的實(shí)際案例來(lái)解決教學(xué)中的存在的問(wèn)題。通過(guò)對(duì)匯編語(yǔ)言程序設(shè)計(jì)課程的分析,本門課程主要存在的問(wèn)題是:授課學(xué)時(shí)少教學(xué)內(nèi)容多,教學(xué)內(nèi)容復(fù)雜,尤其是增加了Win32匯編,因此,教學(xué)方法的改革是非常必要的。
4.1課堂教學(xué)內(nèi)容和方法的改革
課程內(nèi)容的設(shè)置主要完成如下部分,基礎(chǔ)部分:微型計(jì)算機(jī)的CPU結(jié)構(gòu),存儲(chǔ)器的組織方式,80X86的三種工作模式;80X86的尋址方式;以16位指令為基礎(chǔ),結(jié)合80386以上的32位指令,指令的重點(diǎn)在常用指令(包括32位指令),應(yīng)徹底改變面面俱到的大量指令的堆砌。程序設(shè)計(jì)部分:該部分應(yīng)該側(cè)重于匯編程序的特點(diǎn),切忌用高級(jí)語(yǔ)言的思路講匯編語(yǔ)言,要注意突出匯編語(yǔ)言的是底層語(yǔ)言的特點(diǎn)。輸入輸出部分:應(yīng)包括3部分,DOS、BIOS和Win32的接口程序的應(yīng)用,匯編的底層概念主要體現(xiàn)在輸入輸出中斷服務(wù)程序的設(shè)計(jì)和調(diào)用,雖然微機(jī)目前是Windows操作系統(tǒng),DOS、BIOS的調(diào)用仍然有重要的意義和應(yīng)用價(jià)值,如果只介紹Win32的接口程序,就失去了匯編語(yǔ)言的底層的意義。應(yīng)用部分:主要是C/C++與匯編語(yǔ)言的混合編程和Win32匯編的程序設(shè)計(jì),該部分內(nèi)容應(yīng)考慮實(shí)際應(yīng)用的案例使學(xué)生充分體會(huì)匯編的魅力。
4.2實(shí)踐環(huán)節(jié)的建設(shè)
將最新的技術(shù)體現(xiàn)在實(shí)踐教學(xué)中,在教學(xué)過(guò)程中注重實(shí)踐能力和創(chuàng)新能力的培養(yǎng),需要我們重視對(duì)實(shí)驗(yàn)實(shí)踐環(huán)節(jié)的建設(shè)。
在實(shí)踐教學(xué)過(guò)程中我們編寫了具有一定應(yīng)用價(jià)值的實(shí)驗(yàn)案例指導(dǎo)書,任課教師將科研成果移植到教學(xué)實(shí)驗(yàn)中,實(shí)驗(yàn)案例包括:語(yǔ)法案例、經(jīng)典案例和綜合案例等。將教學(xué)內(nèi)容通過(guò)實(shí)驗(yàn)案例在課堂上和實(shí)驗(yàn)中講給學(xué)生,將復(fù)雜的教學(xué)內(nèi)容實(shí)例化,讓學(xué)生真切的體會(huì)到匯編的實(shí)用價(jià)值。在實(shí)驗(yàn)過(guò)程中采用Win32的編譯系統(tǒng):RadASM + MASM32,調(diào)試工具為Code View,該系統(tǒng)使用調(diào)試方便,為后續(xù)的繼續(xù)學(xué)習(xí)和使用打下基礎(chǔ)。
5結(jié)束語(yǔ)
匯編語(yǔ)言程序設(shè)計(jì)課程是計(jì)算機(jī)及相關(guān)專業(yè)基礎(chǔ)課程,匯編語(yǔ)言具有的應(yīng)用價(jià)值是高級(jí)語(yǔ)言不可相比的,在教學(xué)過(guò)程中教學(xué)內(nèi)容的合理安排、案例的設(shè)計(jì)、實(shí)驗(yàn)方法與實(shí)驗(yàn)工具的確定是課程改革的關(guān)鍵,案例教學(xué)模式是提高學(xué)生對(duì)課程的理解能力、動(dòng)手能力和創(chuàng)新能力最好的教學(xué)模式。
參考文獻(xiàn):
[l] 李未. 提高教育質(zhì)量,培養(yǎng)創(chuàng)新人才[J]. 計(jì)算機(jī)教育,2008(1).
[2] 馬力妮.80X86匯編語(yǔ)言程序設(shè)計(jì)[M]. 北京:機(jī)械工業(yè)出版社,2004.
[3] 趙樹升,楊建軍.DOS/Windows匯編語(yǔ)言程序設(shè)計(jì)教程[M]. 北京:清華大學(xué)出版社,2005.
[4] 嚴(yán)義,包健,周尉. Win32匯編語(yǔ)言程序設(shè)計(jì)教程[M]. 北京:機(jī)械工業(yè)出版社,2007.
[5] Intel Corporation. IA232 Intel Architecture Software Developers Manual Vol.3: System Programming Guide[M].[S.1.]: [s.n.],2004.
[6] Microsoft Corporation. MSDN Library [M]. [S.1.]:[s.n.],2005.