劉向舉,陳輝
(安徽理工大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,安徽 淮南 232001)
工程教育專(zhuān)業(yè)認(rèn)證是國(guó)際通行的工程教育質(zhì)量保障制度,是實(shí)現(xiàn)工程教育國(guó)際互認(rèn)和工程師資格國(guó)際互認(rèn)的重要基礎(chǔ)[1],是針對(duì)高等教育本科工程類(lèi)專(zhuān)業(yè)開(kāi)展的一種合格評(píng)價(jià)機(jī)制.2017 年6 月,中國(guó)成為工程教育學(xué)位互認(rèn)協(xié)議《華盛頓協(xié)議》的第18 個(gè)正式成員,標(biāo)志著我國(guó)的工程教育已經(jīng)實(shí)現(xiàn)了國(guó)際多邊互認(rèn),為促進(jìn)高校教育教學(xué)改革,提高工程教育質(zhì)量,培養(yǎng)高素質(zhì)工程人才提供了新的發(fā)展契機(jī)[2].因此,參與工程教育認(rèn)證工作,已成為高校工程教育改革和質(zhì)量保證體系建設(shè)的重要環(huán)節(jié)[3].
隨著工業(yè)物聯(lián)網(wǎng)及嵌入式控制系統(tǒng)的發(fā)展,匯編語(yǔ)言在行業(yè)中的重要性越來(lái)越高.匯編語(yǔ)言是一種最接近于機(jī)器語(yǔ)言的編程語(yǔ)言,其操作直接面向計(jì)算機(jī)的硬件,所以使用匯編語(yǔ)言編程,能夠直觀地感知、體會(huì)和理解計(jì)算機(jī)的工作原理和邏輯功能,在計(jì)算機(jī)硬件和軟件之間形成了一個(gè)清晰的認(rèn)識(shí).因此,學(xué)好匯編語(yǔ)言,向上為理解計(jì)算機(jī)軟件系統(tǒng)的原理奠定了技術(shù)理論基礎(chǔ);向下為掌握計(jì)算機(jī)硬件系統(tǒng)的原理奠定了實(shí)踐應(yīng)用基礎(chǔ)[4].但從多年的教學(xué)實(shí)際情況來(lái)看,教學(xué)效果卻不盡如意,與預(yù)期還有不小的差距.因此,針對(duì)匯編語(yǔ)言的教學(xué)現(xiàn)狀,以工程教育認(rèn)證的理念為導(dǎo)向,對(duì)匯編語(yǔ)言課程教學(xué)方法進(jìn)行改革,提升學(xué)生工程實(shí)踐能力和解決復(fù)雜環(huán)境工程問(wèn)題的能力.
由于匯編語(yǔ)言的指令集繁多且抽象、程序編寫(xiě)與調(diào)試復(fù)雜、程序可讀性和結(jié)構(gòu)化差及開(kāi)發(fā)效率低等缺點(diǎn),同時(shí)匯編語(yǔ)言經(jīng)常涉及CPU、存儲(chǔ)器和 I/O 端口等多個(gè)硬件處理細(xì)節(jié),這些都增加了學(xué)習(xí)匯編語(yǔ)言的難度,使學(xué)生感覺(jué)枯燥乏味[5-7].而且很多教師在教學(xué)過(guò)程中沒(méi)有及時(shí)更新教學(xué)理念,采用單一的教學(xué)手段、單調(diào)的教學(xué)模式和落后的教學(xué)方法,并且只是圍繞課本知識(shí)進(jìn)行講授,少有結(jié)合實(shí)際應(yīng)用進(jìn)行擴(kuò)展,這也很難調(diào)動(dòng)學(xué)生學(xué)習(xí)的積極性和主動(dòng)性,造成教學(xué)效果不佳.
由于高級(jí)語(yǔ)言占據(jù)了軟件開(kāi)發(fā)市場(chǎng)的絕大部分,現(xiàn)今很少有完全用匯編語(yǔ)言進(jìn)行程序開(kāi)發(fā).早期的很多應(yīng)用匯編語(yǔ)言開(kāi)發(fā)的場(chǎng)合也逐漸被高級(jí)語(yǔ)言取代,造成很多學(xué)生認(rèn)為學(xué)習(xí)匯編語(yǔ)言沒(méi)有用處的認(rèn)識(shí)誤區(qū),沒(méi)有認(rèn)識(shí)到學(xué)習(xí)是一個(gè)系統(tǒng)過(guò)程.結(jié)果主觀上便不重視這門(mén)課程,失去了對(duì)這門(mén)課程的興趣,導(dǎo)致學(xué)習(xí)積極性不高,學(xué)習(xí)的動(dòng)力不足.
很多學(xué)生書(shū)上的程序都能看得懂,基本原理也明白,但是自己編寫(xiě)程序時(shí),卻無(wú)從下手,甚至連第一條語(yǔ)句該怎么寫(xiě)都不知道.即使能把程序編寫(xiě)完成,在程序調(diào)試過(guò)程中感覺(jué)無(wú)所適從.出現(xiàn)了問(wèn)題,既不知道問(wèn)題出在哪里,也不知道怎么調(diào)試,這些問(wèn)題主要是由于學(xué)生的實(shí)踐太少,動(dòng)手能力比較弱造成的.另外,當(dāng)前匯編語(yǔ)言課程選取的實(shí)踐內(nèi)容大部分都不是匯編語(yǔ)言的真正使用場(chǎng)合,如成績(jī)統(tǒng)計(jì)、數(shù)值排序、求階乘等實(shí)驗(yàn)案例,這些內(nèi)容只能起到鍛煉學(xué)生掌握匯編語(yǔ)言的語(yǔ)法功能,無(wú)法體現(xiàn)匯編語(yǔ)言的實(shí)際應(yīng)用場(chǎng)合,很難鍛煉學(xué)生的編程水平和激發(fā)學(xué)生的學(xué)習(xí)興趣[8].
工程教育專(zhuān)業(yè)認(rèn)證的通用標(biāo)準(zhǔn)中指出,課程必須為畢業(yè)要求的能力結(jié)構(gòu)提供支撐,學(xué)生能力的形成要通過(guò)明確的課程內(nèi)容和教學(xué)活動(dòng)來(lái)實(shí)現(xiàn).因此,從3 個(gè)方面改革匯編語(yǔ)言課程的教學(xué)形式,以符合工程教育專(zhuān)業(yè)認(rèn)證標(biāo)準(zhǔn)的要求.
匯編語(yǔ)言的指令數(shù)多達(dá)幾百條,而且有些指令的語(yǔ)法規(guī)則比較復(fù)雜,單純按部就班地一條一條講解指令及每條指令的語(yǔ)法規(guī)則,會(huì)非??菰锖碗y以理解,學(xué)生的學(xué)習(xí)興趣會(huì)大大降低,達(dá)不到理想的教學(xué)效果.因此,改變指令的教學(xué)環(huán)節(jié),不必講解所有指令,本著夠用即可的原則,針對(duì)所講授指令,布置一定量的相關(guān)題目,讓學(xué)生有充足的時(shí)間通過(guò)實(shí)踐達(dá)到學(xué)習(xí)指令的目的,而不是通過(guò)死記硬背的方式學(xué)習(xí)指令.這樣不但提高了學(xué)生的學(xué)習(xí)興趣,也加深了對(duì)指令的理解,同時(shí)使學(xué)習(xí)內(nèi)容有的放矢.基本指令學(xué)通了、會(huì)用了,其它沒(méi)講的指令學(xué)起來(lái)也會(huì)非常順利和“理所當(dāng)然”了.這種教學(xué)方式克服了以往教師講得“面面俱到”,學(xué)生學(xué)得“樣樣不通,索然無(wú)味”的問(wèn)題.
相比接近于人的思維方式的高級(jí)語(yǔ)言,會(huì)感覺(jué)匯編語(yǔ)言晦澀難懂,例如:寄存器、尋址方式、中斷、I/O 端口等概念在剛接觸匯編語(yǔ)言時(shí)會(huì)感覺(jué)難以理解.所以學(xué)習(xí)匯編語(yǔ)言時(shí)聯(lián)系已學(xué)過(guò)的高級(jí)語(yǔ)言,通過(guò)采用高級(jí)語(yǔ)言解決問(wèn)題的一些邏輯思考方式,有助于加快找到使用匯編語(yǔ)言編寫(xiě)程序的思路和方向,達(dá)到觸類(lèi)旁通的效果.例如:列出了匯編語(yǔ)言中的一些知識(shí)點(diǎn),在教學(xué)中與高級(jí)語(yǔ)言相關(guān)知識(shí)點(diǎn)的聯(lián)系情況:(1)匯編語(yǔ)言對(duì)于內(nèi)存的操作是基于地址的,可以聯(lián)想到C 語(yǔ)言指針的概念,將指針和實(shí)際的內(nèi)存單元之間建立思維映射;(2)講授匯編語(yǔ)言的數(shù)據(jù)定義及存儲(chǔ)器分配偽指令時(shí),如DB,DW,DD 等,聯(lián)想到C語(yǔ)言中數(shù)據(jù)類(lèi)型的char,short,long 等[9],對(duì)比它們之間使用的異同;(3)講授串處理指令時(shí),聯(lián)想到C語(yǔ)言的相關(guān)串處理函數(shù),如字符串復(fù)制函數(shù)strcpy()/strncpy()函數(shù)和字符串比較函數(shù)strcmp()函數(shù)等,有助于學(xué)生使用串處理指令解決實(shí)際問(wèn)題;(4)C 語(yǔ)言程序的邏輯結(jié)構(gòu)有順序結(jié)構(gòu)(按語(yǔ)句依次執(zhí)行)、分支結(jié)構(gòu)(IF…THEN…ELSE…語(yǔ)句)和循環(huán)結(jié)構(gòu)(FOR…語(yǔ)句)3 種結(jié)構(gòu),引導(dǎo)學(xué)生按照高級(jí)語(yǔ)言的思想寫(xiě)出匯編語(yǔ)言的分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的模板,并作為日后編寫(xiě)匯編程序的通用模板;(5)講解用基址指針BP(EBP)和堆棧指針SP(ESP)對(duì)堆棧操作時(shí),聯(lián)想到Java 虛擬機(jī)中的棧幀等.講授匯編語(yǔ)言過(guò)程中通過(guò)聯(lián)系高級(jí)語(yǔ)言,既有助于匯編語(yǔ)言的學(xué)習(xí)和理解,又加深了對(duì)高級(jí)語(yǔ)言的理解和運(yùn)用,它們之間是相輔相成,相互促進(jìn)的.
隨著高級(jí)語(yǔ)言的快速發(fā)展,當(dāng)今軟件開(kāi)發(fā)不可能完全用匯編語(yǔ)言開(kāi)發(fā)[10],但這并不是說(shuō)匯編語(yǔ)言要被棄之,也不意味著匯編語(yǔ)言已無(wú)用武之地.所以在教學(xué)中不能完全拿高級(jí)語(yǔ)言的一些案例作為匯編語(yǔ)言的實(shí)踐案例,如排序問(wèn)題、統(tǒng)計(jì)問(wèn)題等,這些案例雖然經(jīng)典但缺乏實(shí)際意義,不能發(fā)揮匯編語(yǔ)言的長(zhǎng)處,還要盡量能使用一些能夠體現(xiàn)出匯編語(yǔ)言的可用之處的案例.如在教學(xué)中引入了教學(xué)案例:(1)由于Linux內(nèi)核的啟動(dòng)部分是采用匯編語(yǔ)言編寫(xiě),可以閱讀分析bootsect.S,Setup.S,Head.S 這3 個(gè)啟動(dòng)文件;(2)引入C 語(yǔ)言與匯編語(yǔ)言混合編程的案例,如C 語(yǔ)言調(diào)用匯編語(yǔ)言的案例、C 語(yǔ)言?xún)?nèi)嵌匯編的案例等;(3)利用反匯編軟件對(duì)PE 文件的分析,實(shí)現(xiàn)簡(jiǎn)單的登陸密碼破解;(4)編寫(xiě)簡(jiǎn)單的軟件加密解密的程序;(5)分析簡(jiǎn)單的病毒程序等.通過(guò)引入?yún)R編語(yǔ)言實(shí)際應(yīng)用情境的案例,既讓學(xué)生真正了解匯編語(yǔ)言的使用場(chǎng)合及理解的匯編語(yǔ)言的優(yōu)勢(shì)和特點(diǎn),又提高了學(xué)生的編程能力和應(yīng)用能力,打消了匯編語(yǔ)言無(wú)用的認(rèn)識(shí),激發(fā)學(xué)生的學(xué)習(xí)欲望.
工程教育專(zhuān)業(yè)認(rèn)證的核心理念之一是以學(xué)生為中心,以學(xué)生學(xué)習(xí)產(chǎn)出為導(dǎo)向.為達(dá)到工程教育認(rèn)證的這一理念,從3 個(gè)方面改革匯編語(yǔ)言課程的課堂教學(xué)模式,使學(xué)生由被動(dòng)的接受知識(shí)變?yōu)橹鲃?dòng)的獲取知識(shí).
課前預(yù)習(xí)是一種非常重要的學(xué)習(xí)方式,要養(yǎng)成課前預(yù)習(xí)的良好學(xué)習(xí)習(xí)慣.而且到了大學(xué)階段課前預(yù)習(xí)更加必要了,因?yàn)榇髮W(xué)課堂每次課的內(nèi)容多,講課速度快,課堂強(qiáng)度比較大,如果不做好充分的預(yù)習(xí),會(huì)影響教學(xué)效果和學(xué)生的學(xué)習(xí)效果.為了提高課堂效果,在匯編語(yǔ)言教學(xué)中采用基于問(wèn)題學(xué)習(xí)(Problem Based Learing,PBL)模式的課前預(yù)習(xí)方式,課前把下次課將要講授的內(nèi)容,凝練出具體問(wèn)題(見(jiàn)表1).表1中列出了部分供學(xué)生課前預(yù)習(xí)的基礎(chǔ)問(wèn)題,讓學(xué)生帶著問(wèn)題去預(yù)習(xí),使學(xué)生學(xué)習(xí)的指向性更加明確,提高了預(yù)習(xí)的效率,加深對(duì)知識(shí)點(diǎn)的理解和掌握,也培養(yǎng)了學(xué)生的自主學(xué)習(xí)能力.
表1 課前預(yù)習(xí)的部分基礎(chǔ)問(wèn)題
傳統(tǒng)的師講生聽(tīng)、填鴨式的課堂教學(xué)模式,會(huì)使教學(xué)枯燥乏味,課堂沉悶且學(xué)生的參與度很低,學(xué)生處于被動(dòng)學(xué)習(xí)狀態(tài),無(wú)法激發(fā)學(xué)生的學(xué)習(xí)熱情.為使學(xué)生能夠由被動(dòng)學(xué)習(xí)變?yōu)橹鲃?dòng)學(xué)習(xí),加強(qiáng)學(xué)生的參與度,課堂教學(xué)采取將傳統(tǒng)教學(xué)與翻轉(zhuǎn)課堂教學(xué)相結(jié)合的方式進(jìn)行.根據(jù)教學(xué)內(nèi)容的難易程度及事先布置的預(yù)習(xí)任務(wù),對(duì)于容易理解的教學(xué)內(nèi)容,如X86 的體系結(jié)構(gòu)、存儲(chǔ)器分段管理、宏匯編等內(nèi)容,主要由學(xué)生來(lái)講解.學(xué)生在講解的過(guò)程中,鼓勵(lì)其他學(xué)生隨時(shí)提問(wèn),并在課堂上進(jìn)行討論,這樣既能活躍課堂氣氛,又能檢驗(yàn)學(xué)生的預(yù)習(xí)情況.對(duì)于學(xué)生容易出錯(cuò)或理論性比較強(qiáng)的教學(xué)內(nèi)容,如數(shù)據(jù)的尋址方式、指令對(duì)標(biāo)志位的影響、分析機(jī)器指令代碼等,由教師先講,然后讓學(xué)生參與討論,發(fā)表自己的見(jiàn)解和想法,同時(shí)提出疑問(wèn)供大家一起討論,對(duì)于不足之處由學(xué)生和教師補(bǔ)充.將傳統(tǒng)教學(xué)與翻轉(zhuǎn)課堂教學(xué)模式相結(jié)合,使課堂氣氛更加活躍,學(xué)生的參與度和學(xué)習(xí)的積極性明顯提高.
教師根據(jù)授課內(nèi)容和學(xué)習(xí)情況定期發(fā)布作業(yè),學(xué)生除了按時(shí)完成作業(yè)外,還要對(duì)其他學(xué)生的作業(yè)進(jìn)行匿名評(píng)價(jià).由于課堂時(shí)間受限,可以每次選幾名學(xué)生進(jìn)行作業(yè)互評(píng).學(xué)生為了能夠準(zhǔn)確評(píng)價(jià)別人的作業(yè),首先自己一定要深入思考,通過(guò)作業(yè)互評(píng)環(huán)節(jié)不但能夠加深對(duì)知識(shí)點(diǎn)的理解和掌握,也能夠了解和學(xué)習(xí)其他學(xué)生解決問(wèn)題的思路和方法.對(duì)于錯(cuò)誤率較高的問(wèn)題,授課教師要及時(shí)分析和講解,并引導(dǎo)學(xué)生積極參與討論.同時(shí)對(duì)于一些動(dòng)手能力比較強(qiáng)的學(xué)生,引導(dǎo)和鼓勵(lì)他們積極展示自己所開(kāi)發(fā)的作品,這樣不但能夠激勵(lì)開(kāi)發(fā)作品的學(xué)生本人,也能夠激勵(lì)其他學(xué)生,提高學(xué)生的學(xué)習(xí)熱情.對(duì)于大家一致好評(píng)的作業(yè)或能夠積極展示自己開(kāi)發(fā)作品的學(xué)生,給予一定的獎(jiǎng)勵(lì).
教學(xué)改革前后2 個(gè)教學(xué)年級(jí)成績(jī)對(duì)比分析見(jiàn)表2,其中2017 級(jí)物聯(lián)網(wǎng)工程專(zhuān)業(yè)采用改革前的教學(xué)方法,2018 級(jí)物聯(lián)網(wǎng)工程專(zhuān)業(yè)采用改革后的教學(xué)方法.由表2 可以看出,2018 級(jí)優(yōu)秀的學(xué)生比例大幅度提高,而70 分以下及不及格的學(xué)生的比例大幅度降低,明顯好于2017 級(jí)學(xué)生的成績(jī),教學(xué)效果取得了較好的改善.
表2 成績(jī)分析比較
匯編語(yǔ)言是計(jì)算機(jī)及相關(guān)專(zhuān)業(yè)的核心課程,與計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)等課程有著緊密的聯(lián)系,是理解計(jì)算機(jī)系統(tǒng)核心知識(shí)的橋梁,也是從事計(jì)算機(jī)領(lǐng)域研究與應(yīng)用的基礎(chǔ),在人才培養(yǎng)中起著重要作用.本文以工程教育專(zhuān)業(yè)認(rèn)證理念為導(dǎo)向,在匯編語(yǔ)言課程教學(xué)中,盡量克服以往教學(xué)過(guò)程中存在的問(wèn)題,培養(yǎng)學(xué)生的機(jī)器思維、系統(tǒng)思維及實(shí)踐能力.教學(xué)實(shí)踐表明,本文提出的匯編語(yǔ)言課程的教改方法,能夠激發(fā)學(xué)生的學(xué)習(xí)興趣,加強(qiáng)學(xué)生對(duì)匯編語(yǔ)言的理解和運(yùn)用,提高解決實(shí)際問(wèn)題的能力,提升匯編語(yǔ)言課程的教學(xué)效果.