唐 勇 廖建明
摘要:“匯編語言程序設(shè)計”是一門計算機專業(yè)學(xué)生必修的重要專業(yè)基礎(chǔ)課。由于匯編語言具有與高級語言不同的特點,給學(xué)生的學(xué)習(xí)帶來了一定困難,必須采取多種有效的教學(xué)手段,才能達到理想的效果。本文結(jié)合多年實際教學(xué)經(jīng)驗,系統(tǒng)分析和介紹了本門課程的教學(xué)方法,即從讓學(xué)生了解匯編語言的重要性入手,進而幫助學(xué)生形成系統(tǒng)的知識結(jié)構(gòu),并在教學(xué)中靈活運用多種教學(xué)手段,最終通過實踐教學(xué)使學(xué)生達到熟練掌握的目的。
關(guān)鍵詞:匯編語言;系統(tǒng)的知識結(jié)構(gòu);教學(xué)手段;實踐教學(xué)
中圖分類號:G642 文獻標(biāo)識碼:B
“匯編語言程序設(shè)計”是計算機教學(xué)體系中一門必修的專業(yè)基礎(chǔ)核心課程。匯編語言可以直接控制計算機硬件,常用于設(shè)備驅(qū)動程序、實時控制程序等硬件設(shè)計開發(fā)等方面。在系統(tǒng)軟件的底層、大型軟件的性能優(yōu)化、信息安全與計算機病毒的逆向工程等方面的應(yīng)用上,匯編語言也具有其他高級語言所無法企及的優(yōu)勢。該課程不僅是“計算機組成原理”、“操作系統(tǒng)”、“微機原理與接口”等核心課程的必要先修課,而且對于訓(xùn)練學(xué)生掌握程序設(shè)計技巧、熟悉上機操作和程序調(diào)試技術(shù)有著重要作用。從教學(xué)的角度出發(fā),我們認為只有激發(fā)學(xué)生的學(xué)習(xí)興趣,教師與學(xué)生互動,并采用一些有效的教學(xué)手段,才能夠收到事半功倍的效果。
1了解匯編語言的重要性
匯編語言具有與高級語言不同的特點,正是這些特點使得匯編語言具有高級語言不可替代的作用,使得匯編語言在計算機領(lǐng)域非常重要。在教學(xué)過程中,首先必須向?qū)W生詳細闡述匯編語言在計算機學(xué)科知識體系中的重要作用,充分調(diào)動學(xué)生的學(xué)習(xí)熱情和求知欲望。
匯編語言與處理器密切相關(guān),每種處理器都有自己的指令系統(tǒng),對應(yīng)的匯編語言各不相同。所以,匯編語言程序的通用性、可移植性較差;匯編語言功能有限,又涉及寄存器、主存單元等硬件細節(jié),所以編寫程序比較繁瑣,調(diào)試起來也比較困難。但是匯編語言本質(zhì)上就是機器語言,是計算機提供給用戶的最快最有效的語言,因而容易產(chǎn)生運行速度快、指令序列短小的高效率目標(biāo)程序,并且匯編語言是能夠利用計算機的所有硬件特性并能夠直接控制硬件的唯一語言,它可以直接、有效地控制計算機硬件。在很多場景下,我們必須使用匯編語言,例如,機器自檢、系統(tǒng)初始化、實際的輸入輸出設(shè)備的操作等;I/O接口電路的初始化程序以及外部設(shè)備的低層驅(qū)動程序等;計算機系統(tǒng)頻繁調(diào)用的子程序、動態(tài)連接庫等。匯編語言在現(xiàn)代計算機應(yīng)用中仍然是一門不可替代的、非常重要的程序設(shè)計語言。
因此,在“匯編語言程序設(shè)計”教學(xué)中,我們首先讓學(xué)生充分認識到匯編語言的特點和重要性,學(xué)生通過用匯編語言編制程序,可以更清楚地了解計算機是如何完成各種復(fù)雜的工作。學(xué)生能從根本上認識、理解計算機的工作過程,從而充分地利用機器硬件的全部功能,發(fā)揮機器的長處。
2形成系統(tǒng)的知識結(jié)構(gòu)
匯編語言離不開具體的CPU結(jié)構(gòu)以及必要的硬件支持,由于我們的“匯編語言程序設(shè)計”課程仍然基于英特爾公司的8086/8088CPU,因此將英特爾公司的系列CPU發(fā)展歷史作為首先介紹的內(nèi)容。從英特爾公司的4位機4004,8位機8008、8080與8085,到16位機8086/8088微處理器,詳細介紹了它們的內(nèi)外總線結(jié)構(gòu)。對于16位的80286微處理器,我們重點介紹了80286的實模式與保護模式兩種操作模式。對于32位的80386微處理器以及隨后英特爾公司推出的80486,Pentium,MMX Pentium,Pentium Pro,Pentium II,Pentium III與Pentium 4等微處理器,介紹了這些微處理器在硬件結(jié)構(gòu)上的突破,以及什么原因讓這些CPU新增了若干專用指令。通過對英特爾系列處理器的介紹,學(xué)生對以英特爾系列處理器發(fā)展為代表的計算機硬件發(fā)展脈絡(luò)有總體的了解,初步建立起計算機技術(shù)繼承性、發(fā)展性的認識,對其中涉及到的相關(guān)概念和術(shù)語有了初步的了解。
匯編語言的一個重要特點是它起到了軟件技術(shù)與硬件技術(shù)的接口作用,這決定了匯編語言程序設(shè)計必須結(jié)合其他課程橫向?qū)W習(xí)。從剖析可執(zhí)行程序的結(jié)構(gòu)出發(fā),以可執(zhí)行程序的裝入為例,分析了DOS操作系統(tǒng)下的PSP段前綴,并簡單介紹了Windows操作系統(tǒng)下的PE文件,并在此基礎(chǔ)上講解了計算機從啟動到操作系統(tǒng)裝入的流程;在講解中斷的時候,給學(xué)生介紹了8259A的結(jié)構(gòu)與用法。通過這種方式,讓學(xué)生明白“匯編語言程序設(shè)計”與“操作系統(tǒng)”、“微型計算機接口技術(shù)”、“計算機組成原理”等課程的聯(lián)系,開闊了學(xué)生的思維方式與學(xué)習(xí)方法。
緩沖區(qū)溢出漏洞是目前最主要的安全漏洞之一,而利用該漏洞的緩沖區(qū)溢出攻擊是目前最主要、最具威脅性的網(wǎng)絡(luò)攻擊之一。我們幫助學(xué)生利用DEBUG工具,詳細分析了這些具有威脅性的程序,讓學(xué)生從多個角度研究緩沖區(qū)溢出的一般規(guī)律,引導(dǎo)學(xué)生深入分析植入代碼的結(jié)構(gòu)組成,總結(jié)植入代碼的結(jié)構(gòu)特征。并鼓勵學(xué)生根據(jù)威脅代碼的特點,嘗試提出相對應(yīng)的防御措施。為“網(wǎng)絡(luò)安全”等課程打下了基礎(chǔ),讓學(xué)生融會貫通,學(xué)以致用。
通過我們這種注重歷史發(fā)展與聯(lián)系其他課程的教學(xué)思想,逐步幫助學(xué)生形成了系統(tǒng)的知識結(jié)構(gòu)。這有助于學(xué)生建立多門課程之間的聯(lián)系,開闊學(xué)生的專業(yè)視野,從而調(diào)動學(xué)生的學(xué)習(xí)熱情,增強學(xué)習(xí)的積極性與主動性。
3利用多種教學(xué)手段進行教學(xué)
匯編語言的內(nèi)容多而雜,不便于記憶,要教給學(xué)生正確的學(xué)習(xí)方法,指導(dǎo)學(xué)生如何去學(xué)習(xí)。讓啟發(fā)式、開放型的教學(xué)貫穿教學(xué)全過程,充分調(diào)動學(xué)生學(xué)習(xí)的積極性和主動性,以利于學(xué)生對教學(xué)內(nèi)容的理解和掌握。在教學(xué)內(nèi)容的講解過程中,針對不同的知識點,可采用或結(jié)合不同的教學(xué)方法,加深學(xué)生的理解,增強記憶。
在介紹英特爾系列的CPU歷史時,我們準(zhǔn)備了大量直觀的照片,展示了從4004、8008、8080、8085到16位微處理器8086/8088等微處理器,對于32位機展示了從80386到80486、Pentium、MMX Pentium、Pentium Pro、Pentium II、Pentium III與Pentium 4等微處理器。為了讓學(xué)生對當(dāng)前的計算機有直觀的認識,我們用照片展示了當(dāng)前計算機的主板結(jié)構(gòu),對照圖片逐一介紹了PCI接口、顯卡、網(wǎng)卡等各種插卡。學(xué)生們對直觀的學(xué)習(xí)非常有興趣,課堂氣氛活躍。
在講解指令系統(tǒng)時,我們使用動畫講解了指令在CPU中的執(zhí)行過程。在講解指令前,我們重點介紹了8086 內(nèi)部結(jié)構(gòu),仔細講解了各個部件的功能,并突出介紹了指令流水線方式。對于典型的指令,我們在結(jié)構(gòu)圖上演示了指令執(zhí)行過程,包括指令隊列的變化、指令操作數(shù)的來源、物理地址的形成、EU與BIU是如何配合工作的。通過直觀的動畫,學(xué)生基本理解了CPU中指令的執(zhí)行過程。
在講解MOV指令時,我們采用圖解法講解了MOV指令操作數(shù)的來源,這非常利于學(xué)生理解與記憶MOV指令的操作數(shù)的來源。圖1中矩形框中表示MOV指令的操作數(shù),箭頭的起始點表示MOV指令的源操作數(shù),箭頭的終止點表示它的目的操作數(shù),兩者間如有箭頭連接,表示它們是MOV指令源操作數(shù)與目的操作數(shù)的允許組合方式。通過圖解法,學(xué)生普遍感到MOV指令的操作數(shù)來源好懂易記,并逐步推廣到其他的指令學(xué)習(xí)中。
在講解存儲器操作數(shù)的尋址方式時,我們采用逐步分解的方式介紹存儲器操作數(shù)的四種尋址,并強調(diào)了基址、變址、位移量這三個分量的不同組合就形成了不同的尋址方式。8086/8088 CPU各指令中操作數(shù)的來源有四種,立即數(shù)操作數(shù)、寄存器操作數(shù)、輸入/輸出端口操作數(shù)、存儲器操作數(shù)。而存儲器操作數(shù)又有直接尋址、寄存器間接尋址、基址(變址)尋址、基址變址四種尋址方式,存儲器操作數(shù)的這些尋址方式易導(dǎo)致學(xué)生理解與記憶出錯,造成不佳的學(xué)習(xí)效果。在講述基址由BX或BP提供,變址SI或DI提供,位移量是一個在匯編期間的常數(shù)后,我們在圖2中介紹了基址、變址、位移量這三個分量的不同組合構(gòu)成的不同的尋址方式。通過這種逐步分解的方式,學(xué)生很容易就掌握了存儲器操作數(shù)的四種尋址方式。
從我們采取的多種教學(xué)手段收到的良好效果可見,在教學(xué)過程中,靈活應(yīng)用各種教學(xué)方法,能夠減少學(xué)習(xí)匯編語言的難度,便于學(xué)生學(xué)習(xí)和掌握相關(guān)內(nèi)容,提高教與學(xué)的效率。
4重視實踐教學(xué)
上機實驗是“匯編語言程序設(shè)計”的一個重要教學(xué)環(huán)節(jié)。在“匯編語言程序設(shè)計”實驗中,針對學(xué)生對DOS操作環(huán)境不熟悉,我們在課堂上重點講授了相關(guān)的DOS命令,使得學(xué)生在上機時能夠熟練的在DOS環(huán)境下進行操作;針對匯編語言上機調(diào)試復(fù)雜的問題,我們通過耐心講解,讓學(xué)生充分認識到,這是一個從源程序到可執(zhí)行程序的必經(jīng)過程,通過學(xué)生的反復(fù)實踐,一定能夠掌握匯編語言的開發(fā)過程,加深對匯編語言的認識,提高程序設(shè)計的能力;針對調(diào)試工具DEBUG,重點講解了常用的調(diào)試命令,對一些較復(fù)雜并且較為不常用的命令,暫時不引入,重點讓學(xué)生實踐,學(xué)生通過使用DEBUG工具,深刻體會到了CPU的工作過程,這對于提高學(xué)生的學(xué)習(xí)興趣,鞏固課堂教學(xué)內(nèi)容起到了關(guān)鍵作用。
在合理安排實驗教學(xué)內(nèi)容的基礎(chǔ)上,我們還將課外科技活動融入到實踐教學(xué)活動中,其中最為重要的是組織學(xué)生參加國家級以及校級的各種電子設(shè)計競賽,在實踐中鍛煉學(xué)生使用匯編語言設(shè)計程序的能力。
我們積極指導(dǎo)學(xué)生使用匯編語言參加了全國性的關(guān)于嵌入式系統(tǒng)的“電子設(shè)計競賽”,這些競賽項目不但需要參賽者具有深厚的匯編語言程序編程水平,還要求參賽者擁有過硬的硬件基礎(chǔ)知識,包括電路分析、模擬電路和數(shù)字電路等各方面的專業(yè)知識儲備。通過競賽,學(xué)生加深了對整個計算機學(xué)科知識體系的掌握,并對匯編語言與其它學(xué)科的關(guān)系有了深入的認識。
我們還組織了較大規(guī)模的學(xué)生隊伍參加電子科技大學(xué)“億利達杯”、“NS杯”等大學(xué)生電子設(shè)計競賽,這些競賽是半開放式的競賽,在指導(dǎo)教師的指導(dǎo)下,參賽隊員利用提供的器件設(shè)計并實現(xiàn)了“數(shù)字式Q表設(shè)計”、“多點溫度檢測系統(tǒng)設(shè)計”、“數(shù)字調(diào)諧濾波器設(shè)計”、“工頻標(biāo)準(zhǔn)信號源設(shè)計”、“電機轉(zhuǎn)速控制器設(shè)計”、“太陽能自動跟蹤器設(shè)計”、“數(shù)字溫度表”、“數(shù)控電源”、“遙控小車”、“防嘯叫話筒”、“智能LED照明”等多個項目。在這個實踐過程中,鍛煉了學(xué)生使用匯編語言與硬件結(jié)合的能力,加深理解了匯編語言在控制系統(tǒng)中的作用,培養(yǎng)了學(xué)生的創(chuàng)新能力。
5總結(jié)
“匯編語言程序設(shè)計”是我國高等學(xué)校計算機各專業(yè)必修的一門主干課程,對于訓(xùn)練學(xué)生掌握程序設(shè)計方法與技術(shù),從事自主版權(quán)計算機芯片設(shè)計和系統(tǒng)軟件的開發(fā),以及在信息安全、過程控制等多方面的應(yīng)用,均具有十分重要的作用。由于“匯編語言程序設(shè)計”課程自身的特點,學(xué)生在學(xué)習(xí)的過程中總會遇到這樣或那樣的問題。我們在教學(xué)過程中積極主動總結(jié),認真分析學(xué)生遇到問題的根本原因,及時幫助學(xué)生對問題逐一加以解決。
從我們長期從事“匯編語言程序設(shè)計”的教學(xué)經(jīng)驗來看,教師要善于采用多種方法及手段,發(fā)掘?qū)W生渴望新知識、接受能力強的潛能,讓學(xué)生從了解匯編語言的重要性入手,培養(yǎng)學(xué)生的興趣,進而幫助學(xué)生形成系統(tǒng)的知識結(jié)構(gòu),并在教學(xué)中靈活運用多種教學(xué)手段,最終通過實踐教學(xué),使學(xué)生達到熟練掌握“匯編語言程序設(shè)計”的目的。
參考文獻:
[1] 王正智. 8086/8088宏匯編語言程序設(shè)計教程[M]. 北京:電子工業(yè)出版社,2002.
[2] 沈美明. IBM-PC匯編語言程序設(shè)計[M]. 北京:清華大學(xué)出版社,2001.
[3] 殷肖川. 匯編語言程序設(shè)計[M]. 北京:清華大學(xué)出版社,2005.
[4] Peter Abel. IBM PC匯編語言程序設(shè)計(影印)[M]. 北京:清華大學(xué)出版社,2006.
[5] Mazidi, Muhammad Ali. 80x86 IBM PC及兼容計算機(卷1和2),匯編語言、設(shè)計與接口技術(shù)(影印)[M]. 北京:清華大學(xué)出版社,2004.
[6] 張英彥. 更新知識觀念改革高校教學(xué)[J]. 中國高教研究,2006(2):70-71.
[7] 張海燕.“匯編語言程序設(shè)計”課程教學(xué)方法的探討[J]. 計算機教育,2008(7):66-67.
[8] 李振宇. 重視匯編語言教學(xué)中的實驗環(huán)節(jié)[J]. 實驗室科學(xué),2006(6):21-23.