陳松
【摘 要】通過(guò)對(duì)匯編語(yǔ)言的學(xué)習(xí),計(jì)算機(jī)專業(yè)的學(xué)生可以更好地理解計(jì)算機(jī)的工作原理,提高程序設(shè)計(jì)的能力。然而目前計(jì)算機(jī)實(shí)際應(yīng)用編程中,更多采用計(jì)算機(jī)高級(jí)語(yǔ)言,匯編語(yǔ)言應(yīng)用較少,學(xué)生入門(mén)也比較困難,本文根據(jù)長(zhǎng)期教學(xué)實(shí)踐,對(duì)該門(mén)課程的教學(xué)工作進(jìn)行了一些有益的反思與探索。
【關(guān)鍵詞】匯編語(yǔ)言;教學(xué)研究;實(shí)驗(yàn)設(shè)計(jì)
中圖分類號(hào):G434 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)17-0068-002
DOI:10.19694/j.cnki.issn2095-2457.2018.17.033
【Abstract】Through the assembly language learning, computer professional students can better understand the working principle of the computer, improve the ability to program design. However, the practical application of computer programming, using more advanced computer language, assembly language is used less, student entry is difficult, according to the long-term teaching practice, has made some useful exploration and Reflection on the teaching of this course work.
【Key words】Assembly language; Teaching research; Experimental design
0 引言
早期的計(jì)算機(jī)專業(yè)教學(xué)中,匯編語(yǔ)言曾經(jīng)占據(jù)著很重要的地位,一直被認(rèn)為是理解計(jì)算機(jī)工作原理必不可少的一門(mén)工具性語(yǔ)言,在實(shí)際應(yīng)用中也曾經(jīng)非常流行。然而今非昔比,相對(duì)于后來(lái)誕生的一系列計(jì)算機(jī)高級(jí)語(yǔ)言而言,匯編語(yǔ)言的缺點(diǎn)也非常明顯,語(yǔ)法細(xì)節(jié)較多,難以記憶,程序可讀性差,不易調(diào)試與維護(hù),可移植性差,開(kāi)發(fā)時(shí)間長(zhǎng)且效率低,在實(shí)際編程中的應(yīng)用越來(lái)越少,更側(cè)重于計(jì)算機(jī)底層硬件的交互,是編寫(xiě)操作系統(tǒng)核心的工具語(yǔ)言。
然而作為一門(mén)面向計(jì)算機(jī)硬件的語(yǔ)言,匯編語(yǔ)言有其不可替代的作用,仍然應(yīng)該作為計(jì)算機(jī)專業(yè)學(xué)生必修的課程之一。
1 教學(xué)指導(dǎo)思想及教學(xué)內(nèi)容調(diào)整
對(duì)于學(xué)生而言,使用匯編語(yǔ)言來(lái)編程解決純軟件的問(wèn)題,往往效率不高,特別是輸入輸出環(huán)節(jié)較為繁瑣。對(duì)于計(jì)算機(jī)初學(xué)者而言,匯編語(yǔ)言的實(shí)際應(yīng)用也偏少,很多時(shí)候軟件編程是通過(guò)C、C++、VB、JAVA等高級(jí)語(yǔ)言來(lái)實(shí)現(xiàn)的。目前在計(jì)算機(jī)專業(yè)的本科教學(xué)中,匯編語(yǔ)言往往不是作為一門(mén)單獨(dú)課程來(lái)教學(xué),而是嵌入到微機(jī)原理與接口技術(shù)課程中,作為一門(mén)工具語(yǔ)言來(lái)學(xué)習(xí)。因此,學(xué)習(xí)匯編語(yǔ)言的目的不再是熟練運(yùn)用匯編語(yǔ)言,而是可以更好地理解高級(jí)語(yǔ)言的實(shí)現(xiàn),更好地理解計(jì)算機(jī)底層硬件的工作過(guò)程,從而提高對(duì)計(jì)算機(jī)系統(tǒng)的整體認(rèn)識(shí),提高程序設(shè)計(jì)開(kāi)發(fā)的能力。
教學(xué)指導(dǎo)思想的調(diào)整,同時(shí)意味著教學(xué)內(nèi)容及教學(xué)重難點(diǎn)的調(diào)整。目前我校的匯編語(yǔ)言是放在微機(jī)原理與接口技術(shù)課程中介紹。由于課時(shí)有限,匯編語(yǔ)言的課堂教學(xué)內(nèi)容進(jìn)行了刪減,只介紹尋址方式、與后續(xù)程序結(jié)構(gòu)實(shí)現(xiàn)有關(guān)及與接口編程有關(guān)的指令。教學(xué)過(guò)程中淡化了對(duì)復(fù)雜問(wèn)題的編程解決,而側(cè)重于介紹規(guī)律性的知識(shí);側(cè)重于介紹匯編語(yǔ)言順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)及子程序結(jié)構(gòu)的實(shí)現(xiàn)語(yǔ)句,并與高級(jí)語(yǔ)言程序結(jié)構(gòu)進(jìn)行對(duì)比;側(cè)重于匯編語(yǔ)言在接口編程中的使用,以突出匯編語(yǔ)言的優(yōu)勢(shì)。對(duì)匯編語(yǔ)言與高級(jí)語(yǔ)言中輸入輸出環(huán)節(jié)進(jìn)行了對(duì)比,學(xué)生可以理解字符編碼的使用,可以理解高級(jí)語(yǔ)言是通過(guò)語(yǔ)言自帶函數(shù)來(lái)處理字符編碼與不同數(shù)據(jù)類型間的轉(zhuǎn)化。對(duì)于課堂上未介紹到的內(nèi)容,則鼓勵(lì)學(xué)生通過(guò)MOOC、閱讀參考資料、搜集網(wǎng)絡(luò)資源進(jìn)行自學(xué),并在通過(guò)實(shí)驗(yàn)檢驗(yàn)學(xué)生的學(xué)習(xí)效果。
2 實(shí)驗(yàn)教學(xué)設(shè)計(jì)
實(shí)驗(yàn)環(huán)節(jié)設(shè)計(jì)。實(shí)驗(yàn)分為基礎(chǔ)實(shí)驗(yàn)、提高性實(shí)驗(yàn)、硬件實(shí)驗(yàn)?;A(chǔ)實(shí)驗(yàn),例如通過(guò)DEBUG調(diào)試工具認(rèn)識(shí)不同尋址方式的機(jī)器代碼,從而學(xué)生可以理解什么是立即數(shù),什么是內(nèi)存操作數(shù)。在匯編語(yǔ)言程序設(shè)計(jì)實(shí)驗(yàn)中,將源程序與反匯編的結(jié)果進(jìn)行對(duì)比,如圖1。學(xué)生可以認(rèn)識(shí)到指令與偽指令的區(qū)別,可以看到可執(zhí)行文件中沒(méi)有偽指令,段名DATA處理為立即數(shù)07A6H,變量名STR1處理為數(shù)值地址[0000H]。
提高性實(shí)驗(yàn),可以采用課程設(shè)計(jì)的方式,分組完成實(shí)驗(yàn)。給定題目,具體實(shí)現(xiàn)效果由學(xué)生自行決定。課時(shí)有限時(shí),也可通過(guò)一個(gè)綜合實(shí)驗(yàn)考查學(xué)生編程能力,如主程序中設(shè)計(jì)界面,輸入符合要求,調(diào)用子程序?qū)崿F(xiàn)某項(xiàng)功能,輸入不符合要求時(shí),則給出相應(yīng)提示信息。該實(shí)驗(yàn)難度彈性較大,有的學(xué)生自學(xué)能力比較強(qiáng),可以實(shí)現(xiàn)輸入字符串密碼,對(duì)字符串密碼進(jìn)行比較,并考慮利用循環(huán)結(jié)構(gòu)控制密碼輸入的次數(shù),子程序則實(shí)現(xiàn)冒泡排序算法;基礎(chǔ)比較薄弱的學(xué)生,則可以實(shí)現(xiàn)單個(gè)字符的比較,子程序可以實(shí)現(xiàn)數(shù)據(jù)的二進(jìn)制形式輸出等。教師可以根據(jù)學(xué)生的學(xué)習(xí)情況,提出不同要求,有利于學(xué)生學(xué)習(xí)興趣的提升。
硬件實(shí)驗(yàn)的設(shè)計(jì),主要結(jié)合了接口部分的內(nèi)容。例如接口擴(kuò)展實(shí)驗(yàn),8253實(shí)驗(yàn),8255實(shí)驗(yàn)等。這些實(shí)驗(yàn)的完成不僅需要學(xué)生具備匯編語(yǔ)言的編程基礎(chǔ),還需要掌握接口芯片的功能,特別是理解軟硬件之間的關(guān)聯(lián)。
3 教學(xué)中遇到的問(wèn)題及解決方法
DEBUG調(diào)試工具使用繁瑣。目前的解決方法,一是使用仿真軟件的集成環(huán)境,簡(jiǎn)化操作過(guò)程。例如Proteus 8.0及以上版本,就可以支持對(duì)8086系統(tǒng)的仿真,可以完成匯編程序的編程及調(diào)試。二是可以使用Masm for Windows集成實(shí)驗(yàn)環(huán)境,同樣也很方便。不過(guò)這些方法都是對(duì)原有匯編程序編寫(xiě)、調(diào)試、運(yùn)行環(huán)境的仿真和集成,從理解計(jì)算機(jī)工作原理的角度看,學(xué)生仍然應(yīng)該對(duì)DEBUG調(diào)試工具有所了解,注意對(duì)存儲(chǔ)器內(nèi)容和地址的理解,可以把多種實(shí)驗(yàn)方法結(jié)合起來(lái)進(jìn)行教學(xué)。
教材中匯編語(yǔ)言編程存在細(xì)節(jié)缺失的問(wèn)題。由于匯編語(yǔ)言在實(shí)際工作中使用面越來(lái)越小,主要是在操作系統(tǒng)內(nèi)核及外設(shè)的驅(qū)動(dòng)程序中使用,普及率降低,教材中對(duì)匯編語(yǔ)言的介紹也偏向于基礎(chǔ)知識(shí)、常用指令的介紹,有些細(xì)節(jié)就被省略了。而在實(shí)驗(yàn)過(guò)程中,這些缺失的細(xì)節(jié)會(huì)對(duì)結(jié)果產(chǎn)生影響。大部分教材中,對(duì)DOS系統(tǒng)功能調(diào)用介紹的都比較簡(jiǎn)單,因此學(xué)生在實(shí)驗(yàn)中就出現(xiàn)了一些問(wèn)題。如編程完成鍵入一個(gè)大寫(xiě)字母,轉(zhuǎn)化成小寫(xiě)字母輸出,指令如圖2所示,通過(guò)DOS系統(tǒng)功能調(diào)用可實(shí)現(xiàn),1號(hào)功能輸入單個(gè)字符,加上20H完成轉(zhuǎn)換,最后用2號(hào)功能輸出單個(gè)字符,運(yùn)行結(jié)果如圖3。有學(xué)生對(duì)程序進(jìn)行優(yōu)化,增加了9號(hào)功能輸出字符串,做一個(gè)簡(jiǎn)單界面,代碼如圖4,但運(yùn)行結(jié)果與期望不符,無(wú)論輸入什么字符,輸出總是為“D”,如圖5。原因何在?通過(guò)DEBUG調(diào)試發(fā)現(xiàn),執(zhí)行完9號(hào)功能后,系統(tǒng)將AL值改為24H,加上20H后正好是“D”的ASCII碼,如圖6,即9號(hào)功能調(diào)用會(huì)改變AL的值,從而使最終結(jié)果發(fā)生改變。這一點(diǎn)在教材中未有提及。了解原因后,只需要在9號(hào)功能使用的前后注意對(duì)AL的保護(hù)與恢復(fù),就能使程序達(dá)到預(yù)期結(jié)果。對(duì)于出現(xiàn)的類似問(wèn)題,一般會(huì)引導(dǎo)學(xué)生通過(guò)對(duì)程序的調(diào)試,找到原因,思考解決問(wèn)題的方法,授人以魚(yú)不如授人以漁。
教學(xué)課時(shí)緊張。現(xiàn)在原理性的專業(yè)課課時(shí)進(jìn)行了壓縮,同時(shí)更強(qiáng)調(diào)實(shí)驗(yàn),重在培養(yǎng)學(xué)生的動(dòng)手能力。這樣一來(lái)就不可能很深入地介紹匯編語(yǔ)言。學(xué)生在實(shí)驗(yàn)過(guò)程中不可避免地出現(xiàn)了很多問(wèn)題。因此學(xué)生的學(xué)習(xí)目標(biāo)、學(xué)習(xí)要求就要進(jìn)行相應(yīng)的調(diào)整。實(shí)驗(yàn)的設(shè)計(jì)應(yīng)該由淺入深,具體內(nèi)容可以分層次完成。例如在子程序的設(shè)計(jì)與實(shí)現(xiàn)中,布置的題目是求N的階乘,將此功能作為一個(gè)子程序,在主程序中完成數(shù)據(jù)的輸入與輸出。最低要求可以實(shí)現(xiàn)0~9的階乘計(jì)算,中等要求在實(shí)現(xiàn)程序基本功能的基礎(chǔ)上,對(duì)結(jié)果進(jìn)行分析,提出改進(jìn)思路,最高要求可以實(shí)現(xiàn)0~255的階乘計(jì)算。學(xué)生可以根據(jù)自身情況,選擇不同的完成要求。
4 總結(jié)
目前的匯編語(yǔ)言教學(xué)應(yīng)該側(cè)重于基礎(chǔ)知識(shí)的介紹,同時(shí)可以注意與高級(jí)語(yǔ)言的對(duì)應(yīng)關(guān)系,學(xué)生的學(xué)習(xí)目的是通過(guò)對(duì)該門(mén)語(yǔ)言的學(xué)習(xí),了解計(jì)算機(jī)底層解決問(wèn)題的思路和方法,理解計(jì)算機(jī)的工作原理,掌握對(duì)接口的編程方法等。同時(shí),也應(yīng)為感興趣及學(xué)有余力的學(xué)生留有余地,有條件地因材施教。
【參考文獻(xiàn)】
[1]周荷琴,馮煥清.微型計(jì)算機(jī)原理與接口技術(shù)[M].合肥:中國(guó)科學(xué)技術(shù)大學(xué)出版社,2013:48-154.
[2]詹林,劉向舉.匯編語(yǔ)言程序設(shè)計(jì)課程教學(xué)犯法[J].科技經(jīng)濟(jì)導(dǎo)刊,2016(31):189.
[3]刁紅軍,楊季文.匯編語(yǔ)言實(shí)驗(yàn)教學(xué)與實(shí)踐[J].計(jì)算機(jī)教育,2015(15):97-99.