周 蘇
新的教育形勢對教學(xué)改革提出了很多要求,其中一些要求集中體現(xiàn)到了教學(xué)課時的安排上:學(xué)生就業(yè)難,學(xué)校要開設(shè)職業(yè)規(guī)劃教育課程;學(xué)生就業(yè)能力差,需要增加實訓(xùn)實驗和實踐課時;專業(yè)技術(shù)發(fā)展迅猛,需要開設(shè)相應(yīng)的新課以使教育教學(xué)跟上時代的步伐,如此等等。于是,一些被部分人群認(rèn)為“沒用”和“用處不大”的課程或課時數(shù)被減少,或干脆被某個理由主導(dǎo)(例如:學(xué)生學(xué)不好,老師教著也困難)而取消。一些學(xué)校計算機專業(yè)的傳統(tǒng)主課“匯編語言”(或“匯編語言程序設(shè)計”)就受了這樣的遭遇。
1關(guān)于匯編語言的簡單回顧
匯編語言(Assembly Language,作為課程,又常稱作“匯編語言程序設(shè)計”,它是面向機器的程序設(shè)計語言,也是能夠利用計算機所有硬件特性并能直接控制硬件的一種功能很強的計算機語言。在匯編語言中,用助記符代替操作碼,用地址符或標(biāo)號代替地址碼,這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。因此,匯編語言亦稱為符號語言。
作為一門計算機語言,使用匯編語言編寫的程序(原文件),機器不能直接識別。對應(yīng)于高級語言的編譯器,“匯編語言”也需要一個“匯編器”來把匯編語言原文件匯編成機器可執(zhí)行的代碼。這種將匯編語言翻譯成機器語言,起翻譯作用的程序又叫匯編程序。匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編語言編譯器把匯編程序翻譯成機器語言的過程稱為匯編。
高級的匯編器如MASM、TASM等,為編寫匯編程序提供了很多類似于高級語言的特征,比如結(jié)構(gòu)化、抽象等。在這樣的環(huán)境中編寫的匯編程序,有很大一部分是面向匯編器的偽指令,已經(jīng)類同于高級語言。如今,匯編環(huán)境已經(jīng)如此高級,即使全部用匯編語言來編寫Windows應(yīng)用程序也是可行的。但是,匯編語言的長處還在于編寫高效且需要對機器硬件精確控制的程序。
匯編語言比機器語言易于讀寫、調(diào)試和修改,同時具有機器語言的全部優(yōu)點。但在編寫復(fù)雜程序時,相對于高級語言則代碼量較大,而且匯編語言依賴于具體的處理器體系結(jié)構(gòu),不能通用,因此不能直接在不同處理器體系結(jié)構(gòu)之間進行移植。
“匯編語言”的主要特點是:
(1) 面向機器的低級語言,通常是為特定的計算機或系列計算機專門設(shè)計的。
(2) 保持了機器語言的優(yōu)點,具有直接和簡捷的特點。
(3) 可有效地訪問、控制計算機的各種硬件設(shè)備,如磁盤、存儲器、CPU、I/O端口等。
(4) 目標(biāo)代碼簡短,占用內(nèi)存少,執(zhí)行速度快,是一種高效的程序設(shè)計語言。
匯編語言經(jīng)常與高級程序設(shè)計語言配合使用,其主要應(yīng)用包括:
(1) 70%以上的系統(tǒng)軟件是用匯編語言編寫的。
(2) 許多快速處理、位處理、訪問硬件設(shè)備等高效程序是用匯編語言編寫的。
(3) 一些高級繪圖程序、視頻游戲程序是用匯編語言編寫的。
但人們經(jīng)常認(rèn)為匯編語言的應(yīng)用范圍很小而忽視它的重要性。其實,匯編語言是我們理解整個計算機系統(tǒng)的最佳起點和最有效途徑之一,對每一個希望深入學(xué)習(xí)和掌握計算機科學(xué)與技術(shù)的人來說都是非常重要的,甚至是不能不學(xué)習(xí)的語言。
2 學(xué)習(xí)匯編語言的專業(yè)意義
長期以來,“匯編語言”課程一直是培養(yǎng)學(xué)生了解和直接使用計算機硬件資源的語言,一直是學(xué)習(xí)和理解其他高級程序設(shè)計語言的基礎(chǔ),在專業(yè)建設(shè)中也是“計算機組成原理”、“微機原理與接口技術(shù)”、“操作系統(tǒng)”、“接口與通信技術(shù)”和“計算機控制技術(shù)”等許多課程的前導(dǎo)課程,準(zhǔn)備必要的基礎(chǔ)知識?!皡R編語言”在計算機與相關(guān)學(xué)科的課程設(shè)置中起著承上啟下的作用,它對訓(xùn)練學(xué)生掌握程序設(shè)計技術(shù),熟悉上機操作和程序調(diào)試技術(shù)都有重要作用。與其他大多數(shù)的計算機語言一般被用于應(yīng)用軟件程序設(shè)計不同,在實際應(yīng)用中,匯編語言通常被用在底層硬件操作和高要求的程序優(yōu)化的場合。對匯編語言知識的應(yīng)用需求主要體現(xiàn)在:與硬件有關(guān)的嵌入式系統(tǒng)的底層設(shè)計、操作系統(tǒng)的核心部分設(shè)計、實時控制系統(tǒng)的軟件設(shè)計、接口電路的初始化程序、外部設(shè)備的底層驅(qū)動程序以及復(fù)雜算法的優(yōu)化等。
隨著現(xiàn)代軟件系統(tǒng)越來越龐大復(fù)雜,大量經(jīng)過封裝的高級語言如C/C++,Pascal/Object Pascal也應(yīng)運而生。這些新的語言使得程序員在開發(fā)過程中能夠更簡單、更有效率,使軟件人員得以應(yīng)付快速的軟件開發(fā)要求。而匯編語言由于其復(fù)雜性使得適用領(lǐng)域逐步減小,但這并不意味著匯編已無用武之地。由于匯編語言更接近于機器語言,能夠直接對硬件進行操作,生成的程序與其他語言相比具有更高的運行速度,占用更小的內(nèi)存,因此,在一些對時效性要求很高的程序、許多大型程序的內(nèi)核模塊以及工業(yè)控制方面得到大量應(yīng)用。
通過學(xué)習(xí)和使用匯編語言,能夠感知、體會、理解機器的邏輯功能,向上為理解各種軟件系統(tǒng)的原理打下技術(shù)理論基礎(chǔ);向下為掌握硬件系統(tǒng)的原理打下實踐應(yīng)用基礎(chǔ)。即:向上理解軟件,向下感知硬件?,F(xiàn)實生活中雖然有眾多編程語言可供選擇,但學(xué)習(xí)匯編,學(xué)生才能更好地深入了解計算機運行原理,為今后的計算機研究與應(yīng)用打下良好的基礎(chǔ)?!皡R編語言”課程,依然應(yīng)該是高校計算機及其相關(guān)專業(yè)學(xué)生的必修課。
說匯編語言是“低級”語言,并不意味著匯編語言會被更高級語言所淘汰,相反,這里的“低級”應(yīng)該當(dāng)“基礎(chǔ)”講,匯編語言仍然是程序員必須了解的語言,在某些計算機技術(shù)應(yīng)用的行業(yè)與領(lǐng)域,匯編語言是必不可少的。
由熟練的程序員使用匯編語言編寫的程序,其運行效率與性能比其他語言寫的程序會是成倍的優(yōu)秀,但代價是需要更長的時間來優(yōu)化。因此,對比現(xiàn)在已經(jīng)市場化的軟件行業(yè),加上高級語言的優(yōu)秀與跨平臺,軟件企業(yè)不可能讓一個團隊使用匯編語言來編寫所有的東西,多花上幾倍甚至幾十倍的時間,這還不如使用其他語言來完成,只要求最終結(jié)果不比匯編語言編寫的差太多,這是市場經(jīng)濟下的必然結(jié)果。
但是,至今為止,還沒有哪個程序員敢斷定匯編語言是不需要學(xué)的,一個不懂匯編語言的程序員,通常被認(rèn)為只是三流的程序員。同時,技術(shù)精湛的匯編程序員,已經(jīng)脫離軟件開發(fā)而擠身于工業(yè)電子編程中。電子工程師的主要開發(fā)語言就是匯編,使用C語言的只占極少部分。在一些工業(yè)公司,一個核心的電子工程師比其他任何職員待遇都高,一般電子工程師待遇則可能是程序員的十倍以上。這種情況是因為現(xiàn)在學(xué)習(xí)匯編的人雖然也不少,但是真正能學(xué)到精通的卻不多。匯編語言難學(xué)、難用、適用范圍小,雖然簡單,但過于靈活。學(xué)過高級語言后再去學(xué)習(xí)匯編,比一開始學(xué)匯編要難得多,但學(xué)過匯編之后再去學(xué)習(xí)高級語言卻很容易,正所謂簡從繁易,繁從簡難。
3從內(nèi)容到方法的教學(xué)改革
雖然優(yōu)點多多,但匯編語言確實是一種層次非常低的語言,說它簡單方便,都是相對于機器語言而言的。匯編語言的缺點也很明顯:
(1) 編寫的代碼難懂,不好維護。
(2) 很容易產(chǎn)生Bug,難于調(diào)試。
(3) 只能針對特定的體系結(jié)構(gòu)和處理器進行優(yōu)化。
(4) 開發(fā)效率很低,時間長且單調(diào)。
在如今的教學(xué)實踐中,“匯編語言”課程確實存在著學(xué)生缺乏學(xué)習(xí)興趣,老師開展教學(xué)困難的普遍問題,原因是多方面的。其中既有技術(shù)進步使我們有了更多更好的選擇,但也有學(xué)生群體的變化、人們的志向與追求、教育教學(xué)方法的發(fā)展等積極和消極的因素。
盡管如此,專業(yè)建設(shè)、教學(xué)改革中也需要尊重和堅持其中的基本原則。一個學(xué)科的知識的基本組成也是學(xué)科發(fā)展中人類智慧的結(jié)晶,隨意的加減是不負責(zé)任的,也是不符合專業(yè)精神的。
盡管與發(fā)展初期相比,計算機開發(fā)和應(yīng)用技術(shù)已經(jīng)有了根本性的變化,我們有了各種高級語言,有了網(wǎng)絡(luò)應(yīng)用開發(fā)的許多編程工具,很多程序甚至可以自動生成,但機器語言、匯編語言和高級語言的程序設(shè)計語言體系仍然是計算機技術(shù)的基礎(chǔ),也是計算機技術(shù)的重要知識體系之一。對于計算機及其相關(guān)專業(yè)的學(xué)生以及喜歡計算機的一般學(xué)生和讀者來說,匯編語言程序設(shè)計肯定是需要掌握的重要的專業(yè)基礎(chǔ)知識之一。不能了解和熟悉匯編語言知識不僅將導(dǎo)致學(xué)生知識結(jié)構(gòu)的缺憾,也可能導(dǎo)致學(xué)生認(rèn)知水平的降低、開發(fā)手段的缺乏。在一些應(yīng)用中,匯編語言甚至是其開發(fā)工具的唯一選擇。
通過學(xué)習(xí)匯編語言,學(xué)生可以了解到如何有效地設(shè)計數(shù)據(jù)結(jié)構(gòu),讓計算機處理得更快并使用更少的存儲空間;同時,學(xué)習(xí)匯編語言可以讓學(xué)生熟悉計算機內(nèi)部運行機制,并有效地提高調(diào)試能力。經(jīng)驗表明,調(diào)試一個非結(jié)構(gòu)化程序的困難程度,要比調(diào)試一個結(jié)構(gòu)化程序的難度高很多,因為“結(jié)構(gòu)化”是以犧牲運行效率來提高可讀性與可調(diào)試性的,這對于完成一般軟件工程的編碼階段是非常必要的。然而,在一些地方,比如,硬件驅(qū)動程序、操作系統(tǒng)底層,或者程序中經(jīng)常需要執(zhí)行的代碼,結(jié)構(gòu)化程序設(shè)計的這些優(yōu)點有時就會被它的低效率所抹煞。另外,如果想真正地控制自己的程序,只知道源代碼級的調(diào)試是遠遠不夠的。
那么,一方面是確實存在著弱點和困難,另一方面又是不可或缺的知識體系的重要成分,解決問題的方法是什么呢?
首先,不能砍!我認(rèn)為,“匯編語言”作為一門計算機專業(yè)的重要基礎(chǔ)知識和開發(fā)工作,簡單地一砍了之是不能容忍的;但可以根據(jù)專業(yè)的需求,根據(jù)學(xué)校的不同培養(yǎng)目標(biāo),在教學(xué)內(nèi)容的組織上有針對性地進行組合,有針對性的提出考核要求,例如淺的可以是“了解”、“熟悉”,深的可以是“掌握”,甚至,還可以在高年級開設(shè)要求“熟練掌握”的專業(yè)選修課程——畢竟,今天計算機應(yīng)用市場中以硬件或軟硬件兼施為主要特色的崗位也為學(xué)生就業(yè)提供了豐富的機會。
其次,深入開展匯編語言課程的教學(xué)改革,在教學(xué)內(nèi)容和教學(xué)方法上做深入研究與實踐,是解決問題的有效途徑?!皡R編語言”課程本身具有的理論抽象性和鮮明的應(yīng)用性,決定了我們必須充分重視這門課程的實踐環(huán)節(jié)。
4 教學(xué)內(nèi)容的分層次設(shè)計
教育部計算機科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)委員會在其發(fā)布的“中國計算機本科專業(yè)發(fā)展戰(zhàn)略研究報告”中指出:大多數(shù)院校都有比較完善的教學(xué)大綱、教學(xué)計劃和進度表、教學(xué)檔案等,實踐著一套有效的管理規(guī)范,但同時教學(xué)內(nèi)容的研究則需要加強。報告進一步指出:
(1) 有些學(xué)校計算機專業(yè)的教學(xué)內(nèi)容設(shè)計存在明顯的盲目性,還有些學(xué)校在培養(yǎng)人才定位上有明顯偏差。盡管CC1991開創(chuàng)了一種對計算機科學(xué)教育的創(chuàng)造性的、理性的思考,但它并不應(yīng)該成為我國所有大學(xué)計算機專業(yè)教學(xué)實踐的共同追求的目標(biāo)。
(2) 作為一種比較普遍的規(guī)律或者現(xiàn)象,學(xué)生就業(yè)通常會有較強的地域性:一個企業(yè)通常在周邊地區(qū)招收較多員工,一個學(xué)校的畢業(yè)生大都就業(yè)在學(xué)校周邊地區(qū)的單位。因此,學(xué)校周邊地區(qū)社會發(fā)展的情況對計算機專業(yè)的教學(xué)內(nèi)容的設(shè)計應(yīng)該是很有參考意義的。
……
由于大多數(shù)大專院校一般都設(shè)置有計算機科學(xué)技術(shù)及其相關(guān)專業(yè),我們至少可以認(rèn)為:根據(jù)所在院校的辦學(xué)類型不同、培養(yǎng)目標(biāo)不同、所在地及其周邊地區(qū)社會需求的不同,這些計算機專業(yè)的教學(xué)內(nèi)容應(yīng)該有所不同,這些計算機專業(yè)對于“匯編語言”這門課程的教學(xué)內(nèi)容也應(yīng)該是有所不同的。對于那些非研究型院校的相關(guān)專業(yè),對“匯編語言”的教學(xué)可以集中在適度的理論知識和充分的操作實踐上,通過實驗與實踐,了解匯編語言程序設(shè)計的基本概念和知識,激發(fā)對相關(guān)理論知識的學(xué)習(xí)興趣,理解和掌握匯編語言程序設(shè)計的基本方法。
匯編語言涉及的技術(shù)領(lǐng)域?qū)挿?要讓學(xué)生真正理解匯編語言的基礎(chǔ)理論知識,具備將匯編語言技術(shù)應(yīng)用于社會實踐的能力,積極加強匯編語言程序設(shè)計課程的實驗環(huán)節(jié)是至關(guān)重要的。
5把實驗作為課程的主要教學(xué)手段
“匯編語言”課程一向都有上機實驗的教學(xué)要求,但教學(xué)主體是課堂教學(xué),無論是實驗設(shè)計還是實驗強度都遠遠不夠,帶有強烈的“驗證性”色彩。然而,單憑課堂教學(xué)和一般作業(yè),要真正領(lǐng)會匯編語言課程所介紹的概念、原理、方法和技巧等,是很困難的。經(jīng)驗表明,學(xué)習(xí)尤其是真正體會和掌握匯編語言程序設(shè)計的最好方式是對它進行充分的實踐。把實驗作為學(xué)習(xí)匯編語言的主導(dǎo)方法,為學(xué)生提供一個掌握匯編語言全新的學(xué)習(xí)方法,可以由此來體驗匯編語言的知識及其應(yīng)用技巧。當(dāng)然,通過實驗,也一定能夠很好地提高學(xué)生的匯編語言程序設(shè)計能力。
根據(jù)以上思考,我們在實驗內(nèi)容的選擇、實驗步驟的設(shè)計和實驗文檔的組織等諸方面都做了精心的考慮和安排,嘗試為“匯編語言程序設(shè)計”課程編寫了《匯編語言程序設(shè)計實驗教程》教材。該實驗教材依據(jù)課程教學(xué)大綱,充分理解課程的大多數(shù)主教材,遵循課程教學(xué)的規(guī)律和節(jié)奏,體現(xiàn)了實驗的可操作性,幫助學(xué)生切實把握本課程的知識內(nèi)涵和理論與實踐的水平。
顯然,學(xué)生在“匯編語言”等課程中產(chǎn)生的學(xué)習(xí)困難,首先來自于他們對所學(xué)知識缺乏必要的感性認(rèn)識,而我們在教學(xué)中把根據(jù)學(xué)科理論知識精心設(shè)計的實驗實踐環(huán)節(jié)與學(xué)科理論教學(xué)相融合,抓實驗實踐教學(xué)、促進學(xué)科理論知識學(xué)習(xí),較好地解決了學(xué)生的認(rèn)知困難,符合特定的學(xué)生對象,取得了很好的教學(xué)效果。
6后記
其實,“匯編語言”課程所存在的問題在計算機專業(yè)課程中有一定的代表性,例如計算機原理、操作系統(tǒng)原理、計算機網(wǎng)絡(luò)等。但專業(yè)建設(shè)和課程建設(shè)不能單純?yōu)閷W(xué)生興趣和教師水平所左右,應(yīng)該堅持以培養(yǎng)學(xué)生綜合素質(zhì)和提高學(xué)生就業(yè)能力為原則。
本文關(guān)于“匯編語言”課程的建設(shè)思路和教改實踐,對許多其他專業(yè)課程的教學(xué)改革具有積極的借鑒意義。
參考文獻:
[1] 馬力妮,趙剛,夏紅科.“匯編語言程序設(shè)計”課程的教學(xué)內(nèi)容與實踐方法的探討[J]. 計算機教育,2009(10):106-107.
[2] 金海溶,周蘇. 用實驗方法改革匯編語言程序設(shè)計的教學(xué)[J]. 計算機教育,2007(1):34-37.
[3] 周蘇,金海溶. 操作系統(tǒng)原理的教改思路與實驗創(chuàng)新[C]//第二屆大學(xué)計算機課程報告論壇論文集.北京:高等教育出版社, 2006:191-195.
[4] 周蘇,王文. 大學(xué)計算機專業(yè)基礎(chǔ)課程實驗教學(xué)的改革與創(chuàng)新[C]//首屆大學(xué)計算機課程報告論壇(西安,2005)論文集. 北京:高等教育出版社,2005:194-198.
[5] 劉均,周蘇,金海溶,等. 匯編語言程序設(shè)計實驗教程[M]. 北京:科學(xué)出版社,2006.