王志崗 黃瑋 王春東
摘 ?要: 結(jié)合實(shí)際教學(xué)經(jīng)歷探索了匯編語(yǔ)言課程教學(xué)的若干改革方法,目的是使得學(xué)生通過(guò)匯編語(yǔ)言的學(xué)習(xí)提高系統(tǒng)能力和實(shí)踐能力。主要包括:開(kāi)課前詳細(xì)介紹匯編語(yǔ)言課程的意義和價(jià)值,重點(diǎn)講授匯編語(yǔ)言與其他專業(yè)課程的聯(lián)系,對(duì)比其他語(yǔ)言進(jìn)行講授并增強(qiáng)課堂的實(shí)踐環(huán)節(jié)。這些方法和措施明顯地提高了學(xué)生學(xué)習(xí)匯編語(yǔ)言的興趣,證明了教學(xué)改革的有效性。
關(guān)鍵詞: 匯編語(yǔ)言; 系統(tǒng); 實(shí)踐; 教學(xué)改革
中圖分類號(hào):G642.0 ? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A ? ? 文章編號(hào):1006-8228(2020)03-70-03
Discussion on teaching reform on assembly language
Wang Zhigang, Huang Wei, Wang Chundong
(Tianjin University of Technology School of Computer Science and Engineering, Tianjin 300384, China)
Abstract: Combined with the actual teaching experience, this paper explores some reform methods of assembly language teaching, aiming to improve the system ability and practical ability of students through the learning of assembly language. It mainly includes: introducing the significance and value of assembly language course in detail before the beginning of the course, focusing on the connection between assembly language and other professional courses, teaching with the comparison to other languages and enhancing the practice in classroom. These methods and measures obviously improve students' interest in learning assembly language, which proves the effectiveness of the teaching reform.
Key words: assembly language; system; practice; teaching reform
0 引言
匯編語(yǔ)言是大學(xué)計(jì)算機(jī)專業(yè)以及自動(dòng)化和機(jī)電相關(guān)專業(yè)一門重要的專業(yè)基礎(chǔ)課程。匯編語(yǔ)言表面看與C++和Java語(yǔ)言一樣都涉及到程序設(shè)計(jì)方法和技巧,但是從計(jì)算機(jī)系統(tǒng)的整體觀點(diǎn)出發(fā),匯編語(yǔ)言與其他高級(jí)編程語(yǔ)言有很大的不同,能夠讓學(xué)生靈活掌握其中的核心知識(shí)有不小的難度和挑戰(zhàn)。首先,匯編語(yǔ)言與計(jì)算機(jī)的硬件緊密相關(guān),必須掌握足夠的硬件知識(shí)和系統(tǒng)結(jié)構(gòu)才能用匯編語(yǔ)言編寫程序。其次,匯編語(yǔ)言程序的表達(dá)方式也完全與機(jī)器行為對(duì)應(yīng),這不同于高級(jí)程序設(shè)計(jì)語(yǔ)言的程序結(jié)構(gòu)中普遍存在的基于數(shù)學(xué)形式的表達(dá)方式。最后,匯編語(yǔ)言在信息技術(shù)高速發(fā)展的今天應(yīng)用范圍日漸縮小,尤其距離一些高大上的計(jì)算機(jī)技術(shù)看似比較遙遠(yuǎn),由此造成很多學(xué)生對(duì)匯編語(yǔ)言很陌生,甚至有些學(xué)生在學(xué)習(xí)該門課程之前沒(méi)有聽(tīng)說(shuō)過(guò)匯編語(yǔ)言。因此,作為教師在課時(shí)有限且教學(xué)內(nèi)容繁雜的背景下讓學(xué)生理解匯編語(yǔ)言核心思想,掌握匯編語(yǔ)言的基本程序設(shè)計(jì)技巧是比較困難的。
目前在我國(guó)的大部分計(jì)算機(jī)相關(guān)專業(yè)設(shè)置的匯編語(yǔ)言課程中,基本上都是講授以8086系列兼容機(jī)的匯編指令,主要內(nèi)容包括介紹8086系列機(jī)器的基本結(jié)構(gòu)和硬件元素,基本的匯編程序結(jié)構(gòu)和指令使用方法以及實(shí)現(xiàn)一些基本算法的編程技巧。由于8086和80386等系列計(jì)算機(jī)距離我們?nèi)粘I钊遮呥b遠(yuǎn),學(xué)生普遍不能理解學(xué)習(xí)這樣的課程有何實(shí)際應(yīng)用環(huán)境和價(jià)值。因此我們嘗試做一些匯編語(yǔ)言課程的教學(xué)改革,根據(jù)教育部提出的計(jì)算機(jī)專業(yè)教學(xué)要求,重點(diǎn)改善當(dāng)前教學(xué)中普遍存在的1~2個(gè)突出問(wèn)題。教育部計(jì)算機(jī)專業(yè)教學(xué)指導(dǎo)分委員會(huì)對(duì)計(jì)算機(jī)專業(yè)學(xué)生的能力培養(yǎng)和實(shí)踐教學(xué)體系開(kāi)展了研究,提出:①在教學(xué)中必須樹(shù)立學(xué)生的系統(tǒng)觀,培養(yǎng)學(xué)生的系統(tǒng)能力,使學(xué)生學(xué)會(huì)站在不同層面把握不同層次的系統(tǒng),并全面考慮系統(tǒng)各部分及其與外界的邏輯與聯(lián)系,完成一定規(guī)模的系統(tǒng)設(shè)計(jì);②計(jì)算機(jī)專業(yè)基本能力包括計(jì)算思維能力、算法設(shè)計(jì)與分析能力、程序設(shè)計(jì)與實(shí)現(xiàn)能力以及系統(tǒng)能力,其中系統(tǒng)能力占總能力的 75%,包括系統(tǒng)認(rèn)知、系統(tǒng)設(shè)計(jì)、系統(tǒng)開(kāi)發(fā)和系統(tǒng)應(yīng)用能力[1-3]。由此可知,教育部對(duì)計(jì)算機(jī)相關(guān)專業(yè)的教學(xué)要求非常明確地突出培養(yǎng)學(xué)生的系統(tǒng)能力。之前我們的教學(xué)重點(diǎn)主要放在了匯編語(yǔ)言指令的使用和程序設(shè)計(jì)技巧,而忽視了系統(tǒng)能力的培養(yǎng),沒(méi)有將匯編語(yǔ)言放在一個(gè)大計(jì)算機(jī)系統(tǒng)里講授[4]。尤其是匯編語(yǔ)言與計(jì)算機(jī)系統(tǒng)中的底層硬件和包括高級(jí)編程語(yǔ)言的系統(tǒng)和應(yīng)用軟件到底有何種關(guān)系是我們教學(xué)的一大盲區(qū)?;谝陨戏治?,我們?cè)谡n堂上對(duì)教授內(nèi)容重點(diǎn)做了一些調(diào)整和補(bǔ)充。
1 教學(xué)問(wèn)題和改革措施
在實(shí)際的匯編語(yǔ)言教學(xué)中,我們根據(jù)學(xué)生的教學(xué)反映和教育部對(duì)計(jì)算機(jī)專業(yè)的要求,對(duì)教學(xué)方法作了如下調(diào)整和改進(jìn)。
1.1 明確匯編語(yǔ)言課程的意義
我們?cè)谠撜n程的第一節(jié)課就花了一定的時(shí)間向?qū)W生詳細(xì)講述匯編語(yǔ)言的意義和重要性。首先,計(jì)算機(jī)系統(tǒng)主要包括底層的硬件、操作系統(tǒng)為代表的系統(tǒng)軟件和應(yīng)用軟件。匯編語(yǔ)言不同于其他C++等高級(jí)編程語(yǔ)言,它的操作對(duì)象是計(jì)算機(jī)系統(tǒng)的各種硬件完全不同于其他高級(jí)語(yǔ)言對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,因此掌握好匯編語(yǔ)言對(duì)理解計(jì)算機(jī)基于硬件的底層工作原理有很大幫助[5]。匯編語(yǔ)言的幾乎每一條指令都與能夠在裸機(jī)直接運(yùn)行的機(jī)器指令一一對(duì)應(yīng),所以如果讀懂匯編程序就能很好地理解機(jī)器工作的流程和體會(huì)計(jì)算機(jī)不同與人類的思維方式。其次,各種高級(jí)編程語(yǔ)言(包括C以及Java語(yǔ)言)最終都要編譯為與匯編指令一一對(duì)應(yīng)的機(jī)器指令來(lái)執(zhí)行,有些高級(jí)語(yǔ)言程序調(diào)試過(guò)程中難以解決的錯(cuò)誤和問(wèn)題需要將程序代碼反匯編才更容易發(fā)現(xiàn)問(wèn)題,這對(duì)提高學(xué)生調(diào)試高級(jí)語(yǔ)言程序的能力大有裨益。此外,由高級(jí)語(yǔ)言編寫的很多大型程序經(jīng)常會(huì)遇到效率瓶頸,如果將程序中頻繁運(yùn)行的核心部分直接寫為匯編語(yǔ)言并執(zhí)行,就能大大提高運(yùn)行效率。最后,學(xué)好匯編語(yǔ)言有助于理解操作系統(tǒng)的一些設(shè)計(jì)思想和理念??偠灾?,在課程的開(kāi)始我們盡力讓學(xué)生充分理解匯編語(yǔ)言在計(jì)算機(jī)系統(tǒng)中的承上啟下作用,在學(xué)生的心目中為該課程樹(shù)立一個(gè)重要的形象。
1.2 突出體現(xiàn)匯編語(yǔ)言與其他課程的聯(lián)系以及對(duì)比
目前國(guó)內(nèi)大多數(shù)院校的計(jì)算機(jī)專業(yè)都將匯編語(yǔ)言與微機(jī)原理類似課程編排成一門課進(jìn)行講授,這樣做的好處是將匯編語(yǔ)言與硬件緊密結(jié)合在一起,使得學(xué)生明確匯編語(yǔ)言的運(yùn)行平臺(tái),同時(shí)避免單純地學(xué)習(xí)匯編語(yǔ)言編程技巧脫離語(yǔ)言的產(chǎn)生基礎(chǔ)。
作者所在專業(yè)將匯編語(yǔ)言作為單獨(dú)一門課,我們?cè)谥v授匯編語(yǔ)言指令規(guī)則以外,重點(diǎn)講授了匯編語(yǔ)言與高級(jí)程序設(shè)計(jì)語(yǔ)言(以C語(yǔ)言為主要對(duì)比)的聯(lián)系和對(duì)比,以及與系統(tǒng)軟件操作系統(tǒng)的部分聯(lián)系。在講授很多匯編語(yǔ)言指令的時(shí)候,我們都詳細(xì)的講所講授的匯編指令與實(shí)現(xiàn)同樣或類似功能的C語(yǔ)言指令做對(duì)比,比較它們?cè)跁鴮懛绞?、完成功能和使用方法上相同和不同以及?lián)系,如果在時(shí)間允許的情況下在前面的基礎(chǔ)上進(jìn)一步分析它們各自的優(yōu)缺點(diǎn)。比如在講授匯編語(yǔ)言的循環(huán)指令loop時(shí),考慮到學(xué)生已經(jīng)在C語(yǔ)言中系統(tǒng)學(xué)習(xí)過(guò)循環(huán)for語(yǔ)句的原理和運(yùn)行機(jī)制,而匯編語(yǔ)言的循環(huán)語(yǔ)句與C語(yǔ)言相比原理相同,不同之處主要在于如何直接使用寄存器完成循環(huán)和循環(huán)變量使用方式,因此我們講授的重點(diǎn)放在與C語(yǔ)言不同的地方,并將匯編語(yǔ)言循環(huán)語(yǔ)句與C語(yǔ)言的for語(yǔ)句進(jìn)行詳細(xì)對(duì)比,從而避免了不必要的重復(fù)性教學(xué)。①C語(yǔ)言中循環(huán)變量可以是任何變量名不需要關(guān)心它存在哪里,而匯編語(yǔ)言中循環(huán)變量必須存放于CX寄存器中;②C語(yǔ)言循環(huán)變量可以最初設(shè)置為循環(huán)次數(shù)然后遞減或者初始設(shè)為0然后遞加,循環(huán)變量的加法或減法都由程序員編寫,而匯編語(yǔ)言循環(huán)變量CX的初始值必須是循環(huán)次數(shù),機(jī)器規(guī)定loop語(yǔ)句的循環(huán)方式必須為循環(huán)變量CX逐次遞減不需要程序員來(lái)編寫;③C語(yǔ)言的for語(yǔ)句通常需要程序員指定循環(huán)結(jié)束的標(biāo)準(zhǔn),而loop指令是程序自動(dòng)根據(jù)CX值是否為0來(lái)判斷循環(huán)繼續(xù)運(yùn)行或終止完全不需要程序指定。④for語(yǔ)句循環(huán)變量初始值設(shè)置通常位于for語(yǔ)句內(nèi)部,而loop指令的循環(huán)變量CX初始值設(shè)置,必須在循環(huán)體開(kāi)始前完成。
為了讓學(xué)生更清晰地建立起loop指令與C語(yǔ)言循環(huán)語(yǔ)句的關(guān)系,我們?cè)谡n堂上隨機(jī)用一段學(xué)生較為熟悉的C語(yǔ)言循環(huán)代碼,將其改寫為匯編語(yǔ)言代碼,通過(guò)這些示例使得學(xué)生在大腦里清晰地建立了已經(jīng)熟悉的C語(yǔ)言與匯編語(yǔ)言的對(duì)應(yīng)關(guān)系,逐步改變了一些學(xué)生對(duì)匯編語(yǔ)言陌生而認(rèn)為難學(xué)的固有觀念。
我們?cè)谥v授包括尋址方式等其他匯編指令時(shí)也大量采用了重點(diǎn)強(qiáng)調(diào)匯編語(yǔ)言與C語(yǔ)言關(guān)聯(lián)和區(qū)別的教學(xué)方法,通過(guò)將一些C語(yǔ)言教材上簡(jiǎn)單的代碼改寫為匯編代碼讓學(xué)生熟悉匯編語(yǔ)言的編寫技巧和規(guī)范。
1.3 增強(qiáng)課堂的實(shí)踐環(huán)節(jié)
以往的教學(xué)中都會(huì)安排一定學(xué)時(shí)的實(shí)驗(yàn)課,學(xué)生通過(guò)上機(jī)練習(xí)來(lái)鞏固知識(shí)。但因?yàn)閷?shí)驗(yàn)課教師一人面對(duì)很多學(xué)生,沒(méi)有足夠的時(shí)間指導(dǎo)和解答每個(gè)學(xué)生在上機(jī)過(guò)程出現(xiàn)的問(wèn)題和產(chǎn)生的疑惑,尤其針對(duì)一個(gè)上機(jī)作業(yè),通常學(xué)生會(huì)遇到很多共同或類似的問(wèn)題,這會(huì)導(dǎo)致教師要為同樣的一個(gè)問(wèn)題給很多學(xué)生分別解答,效率較低。
我們充分利用每一堂講授課程來(lái)讓學(xué)生有更多機(jī)會(huì)了解實(shí)踐中的共性問(wèn)題。每次在上機(jī)課前,我們都會(huì)在課堂上提前提示學(xué)生需要注意的重點(diǎn)問(wèn)題,并且用書上的類似習(xí)題程序由教師在課堂上使用筆記本編譯運(yùn)行,演示實(shí)驗(yàn)中每一個(gè)步驟,然后請(qǐng)其中一位或多位同學(xué)上臺(tái)面對(duì)所有其他同學(xué)練習(xí)操作,如果出現(xiàn)操作錯(cuò)誤或其他問(wèn)題,教師會(huì)當(dāng)場(chǎng)指導(dǎo)解答,同時(shí)提示注意此問(wèn)題。在課堂上教師和學(xué)生共同參與的實(shí)際操作演示過(guò)程中,我們發(fā)現(xiàn)了很多問(wèn)題,例如匯編語(yǔ)言需要在命令行里輸入命令來(lái)進(jìn)行編譯連接運(yùn)行,這對(duì)于當(dāng)今只熟悉圖形界面操作的學(xué)生需要一定時(shí)間的適應(yīng)。通過(guò)這個(gè)過(guò)程,我們的實(shí)驗(yàn)課的效率明顯提高,教師也有更多的時(shí)間來(lái)幫助每位學(xué)生解答更加個(gè)性化的問(wèn)題。
2 結(jié)束語(yǔ)
通過(guò)上述教學(xué)改革措施,我們發(fā)現(xiàn)學(xué)生對(duì)于匯編語(yǔ)言的基本概念、基本編程技巧有更充分的理解和掌握,并且我們將此課程和其他專業(yè)課程更加清晰地聯(lián)系起來(lái),這有助于讓學(xué)生理解計(jì)算機(jī)硬件的結(jié)構(gòu)和工作原理,也幫助學(xué)生有效復(fù)習(xí)和加深理解已學(xué)過(guò)程序設(shè)計(jì)很多知識(shí)。學(xué)生通過(guò)這門課的學(xué)習(xí),理解了匯編語(yǔ)言與計(jì)算機(jī)系統(tǒng)中硬件和高層軟件的關(guān)系,從而擁有了一個(gè)更加全面完善的計(jì)算機(jī)系統(tǒng)概念,顯著提高了教育部要求培養(yǎng)的系統(tǒng)能力。實(shí)踐證明,我們的教學(xué)改革措施對(duì)提高匯編語(yǔ)言課程的教學(xué)水平有一定的實(shí)際應(yīng)用價(jià)值。我們將在今后的教學(xué)活動(dòng)中嘗試將這些教學(xué)改革方法應(yīng)用到更多的計(jì)算機(jī)專業(yè)課程教學(xué)中。
參考文獻(xiàn)(References):
[1] 教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)委員會(huì).高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)發(fā)展戰(zhàn)略研究報(bào)告及規(guī)范[M].清華大學(xué)出版社,2006.
[2] 教育部高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)指導(dǎo)委員會(huì).高等學(xué)校計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)人才專業(yè)能力構(gòu)成與培養(yǎng)[M].機(jī)械工業(yè)出版社,2010.
[3] 王志英,周興社,袁春風(fēng)等.計(jì)算機(jī)專業(yè)學(xué)生系統(tǒng)能力培養(yǎng)和系統(tǒng)課程體系設(shè)置研究[J].計(jì)算機(jī)教育,2013.9:1-6
[4] 何健,蘇守寶,莫曉暉.計(jì)算機(jī)專業(yè)基于系統(tǒng)觀的匯編語(yǔ)言課程教學(xué)探討[J].計(jì)算機(jī)教育,2017.9:98-101
[5] 張曉亞,唐東成,黎鈺珍等.匯編語(yǔ)言程序設(shè)計(jì)的重要性[J].電子技術(shù),2017.6.