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