李娜
摘要:本文結(jié)合教學(xué)中的實(shí)際情況,重點(diǎn)圍繞《匯編語言》課程教學(xué)的現(xiàn)狀、內(nèi)容和課程實(shí)驗(yàn)環(huán)節(jié)的情況,對(duì)該課程教學(xué)中存在的教學(xué)內(nèi)容、實(shí)驗(yàn)考核等問題進(jìn)行分析,深入探討推進(jìn)課程教學(xué)、教學(xué)方式、實(shí)驗(yàn)指導(dǎo)以及考核等改革的有效措施,并就如何培養(yǎng)學(xué)生的學(xué)習(xí)興趣和提高學(xué)生能力等提出具體意見與建議。
關(guān)鍵詞:匯編語言;實(shí)驗(yàn)教學(xué);教學(xué)改革
中圖分類號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)02-0128-02
匯編語言是一門計(jì)算機(jī)低級(jí)語言課程,它與硬件息息相關(guān),是組成原理、系統(tǒng)結(jié)構(gòu)等硬件課程的先修課。用匯編語言編寫的程序,占用內(nèi)存空間小,運(yùn)行速度快,不需要操作系統(tǒng)的參與,可以直接運(yùn)行在硬件上,在物聯(lián)網(wǎng)設(shè)計(jì)、智能家居等應(yīng)用技術(shù)占有重要地位。學(xué)生在學(xué)習(xí)匯編語言的過程中,可以了解計(jì)算機(jī)程序語言與硬件設(shè)計(jì)的關(guān)聯(lián),深入了解計(jì)算機(jī)硬件的工作機(jī)制,以及與之相對(duì)應(yīng)的計(jì)算機(jī)語言的禁忌,對(duì)于高級(jí)語言的理解也是大有裨益。
與高級(jí)語言相比,指令特點(diǎn)短小簡(jiǎn)單,但也煩瑣,實(shí)現(xiàn)復(fù)雜程序要涉及很多個(gè)方面的指令,學(xué)生普遍反映編程效率太低,編程過程太麻煩。另外,各高校的教學(xué)中普遍存在“重視軟件,輕視硬件”的思想,導(dǎo)致硬件類的課程和匯編語言課程受到越來越多的忽視,學(xué)生對(duì)硬件的了解相當(dāng)匱乏。在當(dāng)今,面對(duì)中國要研制自己的芯片的重要時(shí)機(jī),我們高校的教學(xué)應(yīng)扭轉(zhuǎn)只注重“軟件”形勢(shì),加強(qiáng)對(duì)“硬件”課程的投入,而與硬件相關(guān)的匯編語言也是應(yīng)當(dāng)受到重視。
1 匯編語言及其教學(xué)現(xiàn)狀
匯編語言作為一門獨(dú)立的課程在誕生之初,一直是各高校計(jì)算機(jī)相關(guān)專業(yè)的一門專業(yè)必修課[1]。但近年來,很多高校在制定新的培養(yǎng)方案時(shí),都對(duì)它進(jìn)行了調(diào)整。有些院校將它由原來的專業(yè)必修課調(diào)整為專業(yè)選修課,課時(shí)也進(jìn)行了相應(yīng)的調(diào)整,大多都是將該課程的學(xué)時(shí)進(jìn)行了縮減。有些院校緊跟當(dāng)前軟件的發(fā)展趨勢(shì),什么軟件流行就開設(shè)什么課程,這些院校干脆取消了匯編語言課程。以我們學(xué)校中南民族大學(xué)為例,在新一輪的培養(yǎng)方案制定時(shí),計(jì)算機(jī)相關(guān)的大部分專業(yè)將匯編語言課程由原來的專業(yè)必修課改為專業(yè)選修,并將學(xué)時(shí)調(diào)整為32(理論課時(shí))+12(實(shí)驗(yàn)教學(xué)課時(shí))學(xué)時(shí)。
匯編語言本身存在一些缺點(diǎn),例如指令多樣瑣碎、指令尋址方式復(fù)雜、指令實(shí)現(xiàn)功能簡(jiǎn)單、程序設(shè)計(jì)效率低、應(yīng)用場(chǎng)合狹窄等,這些缺點(diǎn)直接導(dǎo)致學(xué)生認(rèn)為匯編語言死板,難于實(shí)現(xiàn)復(fù)的程序設(shè)計(jì),很難從匯編語言的學(xué)習(xí)過程獲得成就感,學(xué)生的學(xué)習(xí)主動(dòng)性不高。
但大學(xué)計(jì)算機(jī)教育應(yīng)該注重學(xué)生的全面發(fā)展,學(xué)生只知道軟件,對(duì)硬件知識(shí)缺乏,對(duì)計(jì)算機(jī)的認(rèn)識(shí)只流于表面,不利于學(xué)生的日后發(fā)展。匯編語言在計(jì)算機(jī)硬件和軟件之間搭建起一座相互連接的橋梁,可以讓學(xué)生了解軟件和硬件的對(duì)應(yīng)關(guān)系,對(duì)于硬件的工作機(jī)制不再是死板的記憶,立足于硬件理解軟件程序的編譯過程和程序的解釋執(zhí)行過程,對(duì)于軟件的理解也更深入骨髓[1,2]。
2 提高課程教學(xué)質(zhì)量的措施
在學(xué)習(xí)一門計(jì)算機(jī)語言的時(shí)候,無論是低級(jí)語言還是高級(jí)語言,包含的內(nèi)容都是兩大塊,即該門語言的本身規(guī)范和基于該語言的程序設(shè)計(jì)的思想。語言是思想方法的載體,是程序設(shè)計(jì)的實(shí)現(xiàn)手段,而程序設(shè)計(jì)的思想方法是不論是哪種語言它們都是想通的[3]。大學(xué)階段的匯編語言的開設(shè)一般都會(huì)放在C語言課程的后面,學(xué)生已經(jīng)學(xué)習(xí)過C語言,對(duì)程序設(shè)計(jì)的思想方法已經(jīng)有所了解,所以匯編語言的教學(xué)應(yīng)該以匯編語言本身規(guī)范為重點(diǎn)。
針對(duì)不同的教材和編譯環(huán)境,匯編語言的教學(xué)內(nèi)容有很大的不同。我校采用的教材為機(jī)械工業(yè)出版社出版的《8086匯編語言與計(jì)算機(jī)體系結(jié)構(gòu)》,這門教材內(nèi)容充分考慮了硬件和軟件相結(jié)合的問題。為了適應(yīng)32個(gè)理論學(xué)時(shí)完成教學(xué)計(jì)劃,教學(xué)重點(diǎn)也是放在了匯編語言本身的規(guī)范問題上,對(duì)教學(xué)內(nèi)容進(jìn)行了調(diào)整,數(shù)的表示、尋址方式、指令系統(tǒng)、程序結(jié)構(gòu)、過程、串指令、位運(yùn)算、宏指令為這門課的重點(diǎn)要講解的內(nèi)容。
2.1 計(jì)算機(jī)中數(shù)的表示
計(jì)算機(jī)的主要功能就是數(shù)據(jù)的加工處理,所需的數(shù)據(jù)需要存儲(chǔ)到計(jì)算機(jī)系統(tǒng)中?,F(xiàn)實(shí)生活中的數(shù)據(jù)各種各樣,而這些數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)系統(tǒng)的中表示形式卻只有一種,那就是二進(jìn)制數(shù)據(jù)。此部分內(nèi)容一定要讓學(xué)生建立一個(gè)清晰的概念,即數(shù)據(jù)在計(jì)算機(jī)中的表示是二進(jìn)制數(shù)據(jù)。如何將學(xué)生們熟悉的數(shù)據(jù)轉(zhuǎn)換成計(jì)算機(jī)系統(tǒng)可以識(shí)別的二進(jìn)制數(shù)據(jù),是程序設(shè)計(jì)要考慮的第一個(gè)問題。
學(xué)生要熟練掌握各種數(shù)據(jù)的表示方法,并且要善于應(yīng)用,根據(jù)程序設(shè)計(jì)的需要選擇適當(dāng)?shù)谋硎痉椒?。?duì)于各種數(shù)據(jù)各種進(jìn)制之間的轉(zhuǎn)換要求學(xué)生要達(dá)到熟練的地步,其中二進(jìn)制補(bǔ)碼、十進(jìn)制和十六進(jìn)制的轉(zhuǎn)換為重點(diǎn)內(nèi)容。
字符的表示部分,要給學(xué)生灌輸ASCII碼是用來輸入輸出的,二進(jìn)制數(shù)據(jù)是用來計(jì)算的觀點(diǎn),為后面的匯編語言程序設(shè)計(jì)設(shè)立一個(gè)基本的規(guī)范。從鍵盤輸入的數(shù)據(jù)是ASCII碼數(shù)據(jù),如果這些數(shù)據(jù)需要進(jìn)行運(yùn)算要將其轉(zhuǎn)換成相應(yīng)的二進(jìn)制數(shù)值。輸出時(shí),如果是二進(jìn)制的數(shù)值需要將其轉(zhuǎn)換成ASCII碼數(shù)據(jù),轉(zhuǎn)換后的數(shù)據(jù)每個(gè)字節(jié)傳送到輸出設(shè)備就可以進(jìn)行輸出顯示,不需要再進(jìn)行數(shù)據(jù)的轉(zhuǎn)換[3]。
2.2 指令尋址方式與匯編指令系統(tǒng)
計(jì)算機(jī)程序在執(zhí)行過程中,需要將程序中的指令以及數(shù)據(jù)從存儲(chǔ)器中讀取出來,找到這些指令和數(shù)據(jù)的方式即尋址方式。以8086為例,立即數(shù)尋址操作數(shù)緊跟在操作碼后面,常常用來處理常量數(shù)據(jù),對(duì)于變量數(shù)據(jù)則用其他尋址方式來進(jìn)行設(shè)計(jì),包括寄存器尋址、直接尋址、寄存器間接尋址、寄存器尋址、基址尋址、變址尋址、隱含尋址等多種尋址方式。由于尋址方式較多,為了讓學(xué)生了解最基本的匯編語言規(guī)范,對(duì)尋址方式的內(nèi)容進(jìn)行了調(diào)整,講解幾種常用的尋址方式,立即數(shù)尋址、寄存器尋址、直接尋址和寄存器間接尋址,以案例的方式讓學(xué)生掌握什么是尋址方式,以及上述四種尋址方式的表達(dá)方式。
匯編語言的要素就是指令,一條完整的匯編指令一般包含三個(gè)方面:指令助記符、源操作數(shù)和目的操作數(shù)。指令助記符是指令要進(jìn)行什么樣的操作的表示,源操作數(shù)是參與運(yùn)算的數(shù)據(jù),目的操作數(shù)是運(yùn)算結(jié)果的存儲(chǔ)地方。指令系統(tǒng)繁雜,這一部分的教學(xué)內(nèi)容放在常用的指令上面,如加、減、乘、除指令,重點(diǎn)講解這些指令能夠完成什么樣的運(yùn)算、指令的格式和指令應(yīng)用是要注意的事項(xiàng),以簡(jiǎn)單的案例讓學(xué)生掌握匯編語言的指令使用方法[5]。
2.3 程序設(shè)計(jì)的結(jié)構(gòu)與過程調(diào)用
計(jì)算機(jī)程序的結(jié)構(gòu)主要包括順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。每一種語言的計(jì)算機(jī)程序都是從順序執(zhí)行開始,從上而下逐條執(zhí)行,因此順序結(jié)構(gòu)的流程控制最簡(jiǎn)單也容易理解。分支結(jié)構(gòu)設(shè)計(jì)相應(yīng)跳轉(zhuǎn)指令,讓原本順序執(zhí)行的程序有選擇性地執(zhí)行,使得程序的主線可以分幾條支路進(jìn)行執(zhí)行。循環(huán)結(jié)構(gòu)也需要設(shè)計(jì)跳轉(zhuǎn)指令,大多數(shù)的設(shè)計(jì)都是滿足條件指令執(zhí)行循環(huán)體內(nèi)的語言,不滿足則跳轉(zhuǎn)至循環(huán)體外執(zhí)行其他語句[6]。分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是這部分的難點(diǎn),需要通過多個(gè)的案例講解,讓學(xué)生明白分支和循環(huán)跳轉(zhuǎn)指令的設(shè)計(jì)。這部分的內(nèi)容可以將高級(jí)語言選擇和循環(huán)結(jié)構(gòu)的架構(gòu),與匯編語言的一一對(duì)應(yīng),讓學(xué)生對(duì)高級(jí)語言有更深入的理解。
模塊化程序設(shè)計(jì)的思想鼓勵(lì)設(shè)計(jì)子程序,使得程序有一個(gè)主程序多個(gè)子程序組成,達(dá)到代碼共享和程序模塊化管理的目的。子程序的設(shè)計(jì)一般是將需要多次使用的程序片段作為一個(gè)模塊,供主程序多次調(diào)用。子程序的設(shè)計(jì)通常比較簡(jiǎn)單與高級(jí)語言中的函數(shù)的設(shè)計(jì)原理相同,學(xué)生容易理解。這一部分內(nèi)容的難點(diǎn)在于主程序調(diào)用子程序的過程。在過程的調(diào)用時(shí),主程序需要提供一些數(shù)據(jù)給子程序,即參數(shù)的傳遞。參數(shù)傳遞給子程序后,子程序執(zhí)行完成后,會(huì)將結(jié)果傳遞給主程序。匯編語言中有兩種參數(shù)傳遞的方式:一是寄存器傳遞,另一種是堆棧傳遞。子程序?qū)⒔Y(jié)果的傳遞給主程序也有上述兩種方式。寄存器傳遞相對(duì)簡(jiǎn)單些,在講解過程的時(shí)候,以這種方式入手,講解堆棧的過程調(diào)用中作用,然后深入到堆棧在參數(shù)和結(jié)果傳遞的中作用。過程的講解主要是通過案例來進(jìn)行,以求平方根、求面積、求最大值等比較容易理解的案例來闡述這部分的內(nèi)容。
2.4 串指令和位運(yùn)算
80*86中的串是指存儲(chǔ)器中連續(xù)的字節(jié)、字或雙字的一個(gè)集合。與串指令配套使用的有兩個(gè)寄存器ESI和EDI,ESI給出源串地址,EDI給出目的串地址。串指令每次處理一個(gè)串元素,而串中常常包含的不止一個(gè)元素,所以串指令的操作經(jīng)常采用循環(huán)結(jié)構(gòu)[5]。
位運(yùn)算就是直接對(duì)內(nèi)存中的二進(jìn)制位進(jìn)行操作,參與運(yùn)算的數(shù)據(jù)每一個(gè)二進(jìn)制位進(jìn)行一次運(yùn)算。這部分的包含的內(nèi)容有邏輯運(yùn)算和移位運(yùn)算。
上述兩部分的內(nèi)容重點(diǎn)放在匯編指令本身的講解和應(yīng)用,難點(diǎn)在于應(yīng)用,指令本身相對(duì)簡(jiǎn)單,比較好掌握,難點(diǎn)在于應(yīng)用部分需要通過案例的方式,讓學(xué)生掌握這兩部分的內(nèi)容。
2.5 宏指令
宏定義是一個(gè)語句行,它是一段語句的簡(jiǎn)寫。一個(gè)宏指令在匯編器編譯階段可以解讀為其代表的多行語句。之所以需要設(shè)計(jì)宏指令,為了程序共享或模塊化設(shè)計(jì)的需要。子程序的設(shè)計(jì)也是為了程序共享或模塊化設(shè)計(jì),二者的區(qū)別在于:子程序調(diào)用是在程序運(yùn)行過程中執(zhí)行的,只生成一個(gè)代碼段,調(diào)用需要額外的時(shí)間開銷;宏調(diào)用是在匯編過程中完成,N次宏調(diào)用就要生成N個(gè)代碼段,不需要額外的執(zhí)行時(shí)間但是需要較大的內(nèi)存空間。宏的定義格式比較簡(jiǎn)單,調(diào)用過程只需要參數(shù)的匹配即可,但是要注意宏指令的設(shè)計(jì)時(shí)如果有名字域,要對(duì)名字域進(jìn)行本地聲明,否則會(huì)引起程序的歧義,教學(xué)的重點(diǎn)也放在宏指令的內(nèi)部設(shè)計(jì),以及名字域的聲明。
3 實(shí)驗(yàn)指導(dǎo)和考核問題措施
任何一門計(jì)算機(jī)語言課程的學(xué)習(xí)都設(shè)置了上機(jī)實(shí)驗(yàn)課,上機(jī)實(shí)驗(yàn)課程能夠讓學(xué)生獨(dú)自進(jìn)行程序的設(shè)計(jì),是他們程序設(shè)計(jì)的思想得以實(shí)現(xiàn)的重要場(chǎng)所[7,8]。我校匯編語言的也有12個(gè)學(xué)時(shí)的6次上機(jī),從教學(xué)周的第6周開始,每隔一周上一次實(shí)驗(yàn)課。這6次是上機(jī)對(duì)于學(xué)生編程能力的重要鍛煉機(jī)會(huì),實(shí)驗(yàn)的設(shè)計(jì)和管理就相當(dāng)重要。實(shí)驗(yàn)的內(nèi)容圍繞著教學(xué)內(nèi)容展開,設(shè)計(jì)的6個(gè)實(shí)驗(yàn)分別是:順序結(jié)構(gòu)實(shí)驗(yàn)、分支結(jié)構(gòu)實(shí)驗(yàn)、循環(huán)結(jié)構(gòu)實(shí)驗(yàn)、過程編程、串指令實(shí)驗(yàn)和宏指令實(shí)驗(yàn)。每次實(shí)驗(yàn)設(shè)計(jì)5個(gè)題目,讓學(xué)生必選3個(gè),其余兩個(gè)可以作為加分選修題目。很多教師注重實(shí)踐教學(xué)的內(nèi)容,但忽略了實(shí)驗(yàn)課程的考核問題。如果沒有相應(yīng)的考核制度,學(xué)生會(huì)輕視實(shí)踐教學(xué),出現(xiàn)上機(jī)課時(shí)玩手機(jī),課下抄襲程序的現(xiàn)象。實(shí)驗(yàn)課程的學(xué)習(xí)通常要持續(xù)12個(gè)教學(xué)周,周期時(shí)間長(zhǎng),只有很少的學(xué)生可以對(duì)它一直有熱情,主動(dòng)去學(xué)習(xí),大多數(shù)情況下需要以成績(jī)作為驅(qū)動(dòng)器,激勵(lì)學(xué)生完成實(shí)驗(yàn)。所以需要建立一套實(shí)驗(yàn)課程考核體系。實(shí)驗(yàn)課的考核分為考勤、實(shí)驗(yàn)結(jié)果驗(yàn)收和實(shí)驗(yàn)報(bào)告3個(gè)部分,每個(gè)上機(jī)實(shí)驗(yàn)分?jǐn)?shù)以百分制計(jì)算,各部分的占比為20%、50%和30%。實(shí)驗(yàn)結(jié)果驗(yàn)收時(shí),每個(gè)學(xué)生需要到老師這里對(duì)實(shí)驗(yàn)步驟、程序設(shè)計(jì)的方法等問題進(jìn)行答辯,根據(jù)答辯情況老師給出相應(yīng)的分?jǐn)?shù)。
實(shí)驗(yàn)報(bào)告是抄襲的重災(zāi)區(qū),對(duì)于這個(gè)問題我們做了一個(gè)小的應(yīng)用程序?qū)τ趯?shí)驗(yàn)報(bào)告的相似性進(jìn)行一個(gè)判斷,判讀相似性為80%的學(xué)生,因?yàn)槌绦蛟O(shè)計(jì)實(shí)驗(yàn)的流程大致相同,對(duì)于比例的設(shè)定經(jīng)過多次驗(yàn)證,設(shè)置為80%,超過這個(gè)閾值的學(xué)生需要重做實(shí)驗(yàn)報(bào)告或者分?jǐn)?shù)給為0。完善的考核體系可以督促學(xué)生按時(shí)到機(jī)房,獨(dú)立完成實(shí)驗(yàn)和對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,端正學(xué)生對(duì)實(shí)驗(yàn)課程的學(xué)習(xí)態(tài)度,認(rèn)真對(duì)待實(shí)驗(yàn)課程,鍛煉動(dòng)手能力。
4 結(jié)束語
本文根據(jù)多年教學(xué)經(jīng)驗(yàn),分析了《匯編語言》課程的教學(xué)現(xiàn)狀,對(duì)匯編語言的教學(xué)過程中遇到的問題,進(jìn)行了深入的分析和思考。根據(jù)實(shí)際情況提出了幾點(diǎn)可行的措施,即合理安排教學(xué)內(nèi)容,把教學(xué)重點(diǎn)放在匯編語言本身的特點(diǎn)之上,適當(dāng)忽略程序設(shè)計(jì)的思想內(nèi)容,并且需要注重教學(xué)實(shí)驗(yàn)環(huán)節(jié),建立實(shí)驗(yàn)教學(xué)考核體系,鼓勵(lì)學(xué)生積極動(dòng)手,培養(yǎng)學(xué)生興趣?!秴R編語言》課程的教學(xué)還需要廣大教師積極探索,引入多種符合實(shí)際的教學(xué)方法,使匯編語言對(duì)計(jì)算機(jī)專業(yè)課程后續(xù)的學(xué)習(xí)發(fā)揮應(yīng)有的作用。
參考文獻(xiàn):
[1] 熊小兵,劉丹.匯編語言程序設(shè)計(jì)課程改革的幾個(gè)問題[J].計(jì)算機(jī)教育,2015(4):11-15.
[2] 劉正紅.對(duì)匯編語言實(shí)驗(yàn)教學(xué)的幾點(diǎn)看法[J].信息與電腦,2012(6):198-199.
[3] 張佳佳,張廣智,宗兆云,等.基于計(jì)算思維的匯編語言教學(xué)實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2016,33(12):200-203.
[4] 陳璨,李林,任旭虎.匯編語言在大學(xué)生能力培養(yǎng)中的研究與探索[J].實(shí)驗(yàn)科學(xué)與技術(shù),2017,15(6):172-174+177.
[5] Richard C.Detmer著,鄭紅,龐毅林,蔣翠玲譯.80*86匯編語言與計(jì)算機(jī)體系結(jié)構(gòu)[M]北京:機(jī)械工業(yè)出版社,2016:
[6] 王爽. 匯編語言[M].3版.北京: 清華大學(xué)出版社, 2013: 150-155.
[7] 姜玥,談文蓉.民族院校的“匯編語言”課程教學(xué)改革探究[J].大連民族大學(xué)學(xué)報(bào),2017,19(03):274-277.
[8] 張佳佳,張廣智,宗兆云,等.基于計(jì)算思維的匯編語言教學(xué)實(shí)驗(yàn)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2016,33(12):200-203.
【通聯(lián)編輯:王力】