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