


摘 要:將匯編語言與C語言、數(shù)據(jù)結(jié)構(gòu)等課程之間的知識點進行對比教學(xué),可以幫助學(xué)生更好地掌握匯編語言,提高學(xué)生學(xué)習(xí)匯編語言的信心。文章給出了一些具體的教學(xué)實例,包括邏輯運算指令、堆棧指令、數(shù)組訪問和程序結(jié)構(gòu)教學(xué)等。教學(xué)實踐驗證了教學(xué)方法的有效性。
關(guān)鍵詞:匯編語言;對比教學(xué);C語言;數(shù)據(jù)結(jié)構(gòu)
1 研究背景
眾所周知,匯編語言是從機器的角度出發(fā)的,與貼近人們思維的高級語言相差較大,學(xué)生剛接觸時一般都覺得比較難。即使專門開設(shè)匯編語言課程,要學(xué)生較好地掌握也非易事。而電氣信息類專業(yè),如自動化、信息工程等專業(yè)都將微機原理作為專業(yè)課,在此之前一般不專門開設(shè)匯編語言課程,作為微機原理課程的一部分,匯編語言只占十幾個課時,無論是老師講授還是學(xué)生學(xué)習(xí)都更有難度。但是這部分內(nèi)容作為基礎(chǔ),是學(xué)生較早接觸的。根據(jù)經(jīng)驗,如果匯編部分掌握得不好,學(xué)生有可能會對整個課程的學(xué)習(xí)失去信心。因此在教學(xué)過程中,應(yīng)該盡可能采取一些方法幫助學(xué)生盡快適應(yīng)匯編語言的思維方式和編程風(fēng)格。
筆者所在的學(xué)校,C語言是所有工科專業(yè)的公共課,學(xué)生一般都比較重視;自動化等專業(yè)還開設(shè)了計算機軟件技術(shù)基礎(chǔ)這門課,內(nèi)容涉及數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)等。在匯編語言的教學(xué)中,我們嘗試與這兩門課程的一些知識點進行關(guān)聯(lián)和比較,對比教學(xué)方法做了一些探討。
2 對比教學(xué)探討
2.1 邏輯運算
C語言中有邏輯運算符和位運算符之分,與匯編
語言邏輯運算對應(yīng)的是C語言的位運算符,對應(yīng)關(guān)系如表1所示。
而C語言中的邏輯運算符為:與(&&),或(||),非(!),用于對包含關(guān)系運算符的表達式進行合并或取非。對于使用邏輯運算符的表達式,返回0表示“假”,返回1表示“真”。在教學(xué)過程中需要提醒學(xué)生注意它們的區(qū)別和對應(yīng)關(guān)系。
2.2 棧運算
在講入棧、出棧指令時,學(xué)生已經(jīng)在計算機軟件技術(shù)基礎(chǔ)或數(shù)據(jù)結(jié)構(gòu)課程中學(xué)習(xí)了棧這種結(jié)構(gòu),對于棧的“先進后出”的特點應(yīng)該已經(jīng)掌握了。但是兩門課程在細節(jié)上還是有區(qū)別的,見表2。匯編語言中討論的棧屬于運行時棧(runtime stack),是由CPU內(nèi)部硬件直接支持的,在系統(tǒng)層上處理子過程調(diào)用[1];而數(shù)據(jù)結(jié)構(gòu)中的棧抽象數(shù)據(jù)類型通常用于實現(xiàn)依賴于后進先出操作的算法,一般用高級語言編寫。數(shù)據(jù)結(jié)構(gòu)教材上的棧一般習(xí)慣于從低地址往高地址生長,但是并不是非要這樣,也可以自己實現(xiàn)符合8086匯編語言中的從高地址往低地址生長的棧結(jié)構(gòu)。
作者簡介:陳逸菲,女,講師,研究方向為模糊信息處理、時空數(shù)據(jù)庫;趙麗玲,女,講師,研究方向為圖像處理與模式識別;張英超,教授,博導(dǎo),研究方向為復(fù)雜系統(tǒng)建模與仿真、網(wǎng)絡(luò)控制技術(shù),主持建設(shè)的微機原理課程于2010被評為“江蘇省精品課程”;葉小嶺,教授,研究方向為優(yōu)化方法與最優(yōu)控制、智能儀器儀表。
2.3 數(shù)組元素的訪問
匯編語言程序中經(jīng)常需要對一個連續(xù)的數(shù)據(jù)塊進行操作,例如,求以array為首址的連續(xù)30個數(shù)的和。這與C語言中對長度為30的數(shù)組求和是類似的。利用數(shù)據(jù)偽指令可以實現(xiàn)C語言中數(shù)組定義的類似功能。C語言中數(shù)組名arrary對應(yīng)著數(shù)組首地址,在匯編中用類似“MOV