時間:2023-06-02 09:59:37
開篇:寫作不僅是一種記錄,更是一種創(chuàng)造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇匯編語言程序設計,希望這些內(nèi)容能成為您創(chuàng)作過程中的良師益友,陪伴您不斷探索和進步。
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)09-2111-02
Teaching Thinking of Assembly Language Programming Course
LUO Xing
(Hanshan Normal University, Hanshan 521041, China)
Abstract: This paper discusses the problem appear in teaching of assembly language programming course, propose some methods to improve student's ability to master the knowledge and learning interest. Discuss the assembly language teaching in Win32 platfrom in the last.
Key words: assembly language programming; teaching improvement
1 匯編語言程序設計課程教學現(xiàn)狀
匯編語言程序設計作為一門計算機專業(yè)的課程,其存在的合理性在近年受到爭議。有些人認為,匯編語言作為一種低級語言,指令繁多,難以掌握。另外,編程效率也不高,一個高級語言用一條語句實現(xiàn)的功能,在匯編語言中需要很多條指令才能實現(xiàn)。此外,匯編語言在時間上和空間上的優(yōu)勢由于高速CPU和大容量存儲器的出現(xiàn),也變得意義不大。
我認為學習匯編語言仍然具有重要意義。可以歸納如下:
1) 可以比較深入了解計算機硬件的底層工作原理,例如:CPU的工作模式,寄存器的概念,內(nèi)存的尋址方式,中斷的工作原理等。
2) 熟悉各種數(shù)據(jù)表示方法。如各種數(shù)制的轉(zhuǎn)化,各種類型的數(shù)據(jù)在內(nèi)存中的存儲方式。學生在系統(tǒng)學習匯編語言程序設計這門課程后,對二進制,十進制以及十六進制相互間的轉(zhuǎn)換應該非常熟練。對數(shù)據(jù)在內(nèi)存中兩種排列方式即大端方式(Big Endian,低地址存放高位字節(jié))與小端方式(Little Endian,低地址存放低位字節(jié))有清晰的理解。而這些相關的概念的牢固掌握對高級語言中的數(shù)據(jù)類型以及計算機網(wǎng)絡編程的學習具有很大的幫助。
3) 通過匯編語言編程學習,可以促進對高級編程語言相關概念的理解。高級語言在編譯的時候,一般都是先生成匯編代碼,然后再生成的二進制代碼。所以,通過對比分析匯編代碼與高級語言代碼的實現(xiàn)方式,對程序的執(zhí)行效率,數(shù)據(jù)在內(nèi)存中存放方式,堆棧的概念,函數(shù)的調(diào)用及參數(shù)傳遞的方式等都會有進一步的了解。
在教學中,我也遇到一些問題。一方面就是學生的積極性不高。主要原因包括:指令很多,難以記憶。對于幾個大類的指令,如果每次課上一類,學生課后如果不進行主動復習,往往到下一次課的時候,就會忘記前面所學的內(nèi)容或者發(fā)生混淆。另外,在學習匯編課程之前,他們已經(jīng)學過一門高級語言,如C/C++等,匯編語言的學習方式與高級語言的學習方式有所不同,高級語言比較容易上機練習,也容易對程序運行結(jié)果驗證,對于開發(fā)實用軟件也相對容易,所以學生的興趣比較大。而匯編語言一方面涉及到底層的硬件概念,比較難以理解,另一方面上機也比較困難,可以這么說,如果按照課本的順序講課,要到差不多講完課,學生才可以上機完成一個功能比較完整的程序。
2 促進學生對知識的掌握
要解決這些問題,我認為要在學生的知識掌握方式以及學習興趣的培養(yǎng)上下功夫。對于知識的掌握,除了每次新課內(nèi)容講完后,精心給學生布置作業(yè)習題之外。還應該注意到由于匯編語言的指令及相關的知識點很多,對于剛接觸這門課程的學生一開始往往不大適應,容易混淆前面學過的內(nèi)容,所以教師及時對所學過知識點進行比較和總結(jié)就很有必要。此外還應該定期對學生的學習效果進行檢測,從過去的教學經(jīng)驗看,匯編語言這門課程是學生比較容易與教師的教學進度脫離的一門課程,不少學生在一開始由于在掌握知識遇到困難,問題越積越多,最終可能放棄聽課。在檢測的方法上,可以借助網(wǎng)上考試系統(tǒng)。教師可以自主出題,也可以讓系統(tǒng)自動出題。通過分析學生的測試結(jié)果,教師可以及時調(diào)整教學進度,學生也會有一定的學習壓力,使他們花更多時間查補缺漏的知識。
程序設計學習的最佳方法就是上機實踐。匯編語言上機練習跟高級語言的上機練習相比,對于學生來說比較困難。一方面是由于一個完整的匯編程序涉及的知識點很多,而教材往往按知識點分類進行編排。所以學生要想在剛開始學習階段,就編出完整的程序有一定的難度。另一方面,匯編程序的運行結(jié)果較難在屏幕上輸出,匯編語言只有字符與字符串的輸入輸出,對于一道簡單的算術(shù)運算題目,其結(jié)果的輸出都要通過一大段的轉(zhuǎn)換程序來實現(xiàn)。對于第一個問題,教師可以對教材內(nèi)容進行選講,把實驗所涉及到的知識點先進行講解。對于第二個問題, 我認為應該重點培養(yǎng)學生熟練使用調(diào)試工具的能力,通過掌握調(diào)試工具如DEBUG,CV等的使用,一方面學生可以直接觀察程序的運行結(jié)果,另一方面,對于程序的邏輯錯誤也可以進行跟蹤、分析以及解決。此外,由于匯編語言作為一種低級語言,編程都由一條條指令進行構(gòu)造,所以相對繁瑣,應盡早讓學生應用模塊化思路,掌握子程序及宏的使用方法。這樣把一些常用功能做成模塊,如輸入輸出功能,以后學生在編程的時候就可以直接調(diào)用這些模塊,從而專注于實驗的其它方面。
3 提高學生的學習積極性
對于如何提高學生的學習興趣,我認為主要讓學生意識到匯編語言的作用。一方面可以引入一些接口技術(shù)相關內(nèi)容,使學生熟練掌握中斷的概念以及I/O指令,然后上機編寫中斷程序,在中斷控制器(8259A)進行驗證,由于這些實驗有按鍵輸入,有屏幕輸出,還能直接看到程序控制設備的效果,所以學生興趣會比較大。此外,教師也可以適當拓展一些知識,如嵌入式編程相關概念,有興趣的同學可以在課后自主進行學習。另外,由于不少學生對硬盤相關的問題感興趣,比如硬盤數(shù)據(jù)的存放方式,數(shù)據(jù)的修復等。可以引導學生對這些問題進行思考,然后通過匯編語言提供的I/O指令和中斷子功能,編程實現(xiàn)對硬盤的MBR,文件分配表等數(shù)據(jù)結(jié)構(gòu)的讀取,備份,修復等功能。教師通過布置一些學生比較感興趣的課外作業(yè),并適當提供協(xié)助,往往能提高學生的學習積極性。
另外,在匯編語言的學習過程中,教師應該有意識引導學生將匯編語言與高級語言的各個對應的部分進行比較。學生在學習匯編語言之前,通常已經(jīng)學過一門高級語言,如C/C++等。高級語言在編譯的時候,一般是先轉(zhuǎn)換成匯編代碼,所以它們具有相通性。大部分學生編寫應用程序的時候是用高級語言,所以通過比較分析高級語言與低級語言在數(shù)據(jù)定義,程序流程控制,函數(shù)的定義及調(diào)用等的對應部分內(nèi)容,對于學生更好的使用高級語言編寫程序是很有幫助的。比如:匯編語言里有分段的概念,一般把變量定義到數(shù)據(jù)段,把代碼定義的代碼段。而C語言是把數(shù)據(jù)與代碼都定義在一起,那么C語言編寫的程序在編譯成可執(zhí)行文件后,它的全局變量,局部變量的空間是如何分配的。另外,對于動態(tài)內(nèi)存分配,堆與棧的區(qū)別在哪里。還有函數(shù)的定義與調(diào)用,參數(shù)的傳遞順序是如何的?這些疑問,都可以讓學生編寫簡單的C語言程序,生成可執(zhí)行文件后,然后通過調(diào)試工具進行反匯編進行分析。此外,在利用VC++,Dephi等IDE開發(fā)工具進行程序編寫時,都會用到里面的調(diào)試功能。基本上調(diào)試功能都會包括反匯編與內(nèi)存查看的功能,教師可以引導學生進行這方面的訓練,使他們在以后編程時能熟練應用這個工具解決一些疑難問題,例如:內(nèi)存非法訪問,指針的非法引用等。
4 Win32平臺下的匯編語言教學思考
目前很多高校在匯編程序設計教學中講解的是8088/8086 CPU實模式環(huán)境,實際上是虛擬8086模式,因為真正的實模式工作DOS下,而現(xiàn)在匯編語言實驗環(huán)境都是在windows 2000以上。由于現(xiàn)在大部分CPU都是32位以上,并且是工作上保護模式之上,此外這些CPU的寄存器類型以及尋址方式都已經(jīng)發(fā)生較大變化。所以教師有必要對實模式與保護模式在邏輯地址轉(zhuǎn)化為物理地址的方式的差異,還有16位與32位的指令在用法的不同點進行重點講解。因為匯編語言現(xiàn)在的實際應用基本上采用工作于保護模式的Win32平臺,在Windows操作系統(tǒng)控制下,匯編語言雖然不能再直接存取硬件,但是能通過調(diào)用系統(tǒng)提供的API函數(shù)完成各種功能。其實這里的API函數(shù)當于DOS下的中斷調(diào)用,但是Window API函數(shù)無論從數(shù)量上、功能上還是易用性上都大大超過了DOS或BIOS的中斷調(diào)用功能。所以現(xiàn)在在Win32平臺下,匯編語言就像高級語言一樣,可以方便的開發(fā)各種Windows應用程序。有些教師認為,既然在實模式講解匯編語言很少涉及實用性,那就應該直接遷移到Win32匯編平臺,講解用匯編語言開發(fā)的Windows應用程序設計實例,從而提高學生積極性。我認為如果采用這種教學方法,可能會存在以下問題:首先由于上課時間有限,學生需要大量的時間才能熟練掌握各類指令,匯編語言的語法,程序結(jié)構(gòu)等方面的知識。如果過多涉及Windows程序設計實例,對于不熟悉Windows編程機制的學生的來說,又多了一個不小的學習負擔,這樣子反而影響了匯編語言基礎知識的掌握。另外,DOS下的實模式與Window下的保護模式下的編程在本質(zhì)上并無很大的區(qū)別,只要學生熟練掌握各類指令用法,理解16位與32位的指令及尋址方式的區(qū)別,邏輯地址與物理地址轉(zhuǎn)換機制等知識,他們就可以通過自主學習,較容易的掌握用匯編語言進行Win32應用程序的開發(fā)。對于教師,除了幫學生打好匯編語言的基礎,可以適當以課外作業(yè)的形式,引入一些匯編語言在不同應用領域的簡單實例,如加密與解密,軟件的逆向工程等,這些課外作業(yè)的完成對學生匯編語言的應用能力的提高將會有不小的幫助。
5 結(jié)束語
匯編語言難教難學是教師與學生的共識,但是作為計算機科學中一門低級程序設計語言,通過對它的良好掌握,確實可以促進對計算機軟硬件底層的了解,而這又能促進編程能力的提高。作為教師,在教學中應該不斷嘗新的教學方法,不斷積累經(jīng)驗,只有這樣,才能把這門課上好。
參考文獻:
關鍵詞: 高職院校《匯編語言程序設計》教學方法
1.前言
匯編語言是我們理解整個計算機系統(tǒng)的最佳起點。人們往往認為匯編語言的應用范圍很小,因而忽視了它的重要性。其實匯編語言對學習計算機科學與技術(shù)的人是非常重要的。所有程序,不論用何種語言進行編制,只有轉(zhuǎn)成機器指令,運用機器的邏輯功能,功能才得以實現(xiàn)。
匯編語言直接a描述機器指令,比機器指令更容易記憶和理解。通過學習和使用匯編語言,我們才能夠感知、體會、理解機器的邏輯功能,這樣不僅可以為理解各種軟件系統(tǒng)的原理打下技術(shù)理論基礎,而且可以為掌握硬件系統(tǒng)的原理打下實踐應用基礎。
2.教學中存在的問題
當前高級語言的發(fā)展非常迅速,各種開發(fā)工具層出不窮,其功能也越來越強大。高級語言進行程序設計的可操作性越來越強,許多非計算機專業(yè)人員在不了解計算機的結(jié)構(gòu)、沒掌握計算機相關的專業(yè)理論和各種計算機語言具體編程等情況下,同樣能很好地使用高級語言。所以,高級語言的發(fā)展弱化了匯編語言的地位,這使部分高職學生覺得匯編語言已不重要了,學不好沒有多大的關系。所以,思想認識上的不重視,導致了部分學生學不好這門課程。
《匯編語言程序設計》的學習需要一定的英語知識。高職學生的英語基礎普遍差,據(jù)有關職業(yè)教育方面的統(tǒng)計資料顯示:在高職高專院校中60%的學生英語基礎差;30%的學生有一定的基礎,但對英語學習不感興趣;10%的學生英語基礎較好。實際上,普通高職高專院校學生英語的基礎情況比統(tǒng)計的更嚴峻。這就為他們學習這一課程帶來了一定的障礙。
針對這一系列的情況,筆者根據(jù)教學經(jīng)驗,總結(jié)了在高職院校教《匯編語言程序設計》的一些心得,希望對大家有所幫助。
3.注重課堂教學
3.1優(yōu)化教學內(nèi)容。
本課程涉及內(nèi)容較多,教師應在講課之前先對課本內(nèi)容進行優(yōu)化。并不是課本上所羅列的內(nèi)容都需要講,教師要有選擇性講解:對學生有用的而課本上講得不全面的要補充講解,而對學生用處不大的可以不講或一帶而過,爭取做到“少而精”。
3.2讓學生充分認識到該課程的重要性,提高學生的學習的興趣。
“興趣是最好的老師”,如何讓學生對本課程感興趣?筆者認為關鍵是把握好開學第一堂課。在學生剛接觸本課程時,教師不要急于介紹理論知識,而是要強調(diào)該課程的實際應用,通過介紹匯編語言的特點和匯編語言在一些典型系統(tǒng)開發(fā)中的具體應用來激發(fā)學生的學習興趣。
目前對單片機的靈活編程已經(jīng)應用到各個領域,無論是尖端科技,如軍事、通信、能源、機器人、交通、IT,還是現(xiàn)代工業(yè)、農(nóng)業(yè),如儀器儀表、汽車電子系統(tǒng)、家用電器、玩具、個人信息終端等諸多領域,都離不開單片機。而單片機的編程里大部分都使用了匯編語言,匯編語言的易用和靈活的特性,使得匯編語言將繼續(xù)占有獨特的地位,其適用的領域要求執(zhí)行效率高、反應快,如操作系統(tǒng)內(nèi)核、工業(yè)控制、實時系統(tǒng)、家用電器的計算機控制功能等。在講述其重要性和應用領域時,教師應結(jié)合一些身邊的、具體的實例,如電梯升降的控制程序和廣場的大型噴泉的控制程序均是由匯編語言編寫的,學生的興趣會被這些實例極大地調(diào)動起來。
3.3注重實踐環(huán)節(jié)。
在計算機相關專業(yè)的教學領域,實驗教學是培養(yǎng)學生學習能力、實踐能力、思考能力、創(chuàng)新能力的重要環(huán)節(jié)和有效途徑。學生在學習匯編語言這門課程中產(chǎn)生的困難,來自于他們對所學知識缺乏必要的感性認識,沒有得到充分的實踐。
計算機在很多方面不同于其他學科,尤其是與硬件有密切關系的課程。由于匯編語言課程與硬件操作有著密切關系,因此實驗環(huán)節(jié)在整個教學活動中占據(jù)了舉足輕重的地位。匯編語言的實驗對培養(yǎng)學生的動手能力和學習興趣,提高學生閱讀、編輯和調(diào)試程序的能力,有著不可替代的重要作用。學生通過實驗能深入了解CPU、存儲器、接口及外部設備的工作特性,對數(shù)據(jù)在計算機中的表達和傳送產(chǎn)生感性認識,在實驗中學生能對匯編語言有更好的理解、掌握,從感性認識上升到理論認識。
4.改進教學方法
4.1對照教學法。
在講匯編語言時,教師可以和其它語言對照講解,比如C語言。C語言作為一門基礎和先驅(qū)課程,在此時起到了很好的借鑒作用,由于大部分學生對C語言掌握得較好,基于語言的相通性,在匯編語言的相關教學中教師若以C語言作為對照展開講解,將會收到很好的教學效果,也能增進各科之間的知識和方法上的聯(lián)系。下面筆者結(jié)合教學實踐,列舉一些應用對照教學法的實例。
MOV指令是8088指令系統(tǒng)中首要講解的一個指令,也是匯編程序設計中使用最頻繁的指令,教師應強調(diào)對操作數(shù)的要求。有幾點我們可以用C語言來對比解釋:
傳送過程。其傳送過程類似于C語言中的賦值,只是在這里是給寄存器或存儲單元賦值,其實C語言中的變量名本身就是一個符號地址,匯編程度的賦值最終應對應到存儲器的某些存儲單元。
兩操作數(shù)的類型匹配問題。該內(nèi)容在C語言中已作了強調(diào),匯編中類型匹配問題也是一個重點。與C語言類似,匯編語言操作數(shù)的位數(shù)要保持一致,只是在8088中常用的類型為字節(jié)和字。
強制類型轉(zhuǎn)換。C語言中用到了該知識,學生也已掌握,那么匯編語言中又如何實現(xiàn)呢?很自然地我們就可以引出“BYTE PTR”和“WORD PTR”這兩個操作符。
4.2互動式和啟發(fā)式教學。
高職學生的課堂氣氛一般比較活躍,他們非常喜歡教師引導、提問,喜歡回答問題。所以教師應利用這一特點在上課過程中設計一些有意義的提問,利用提問將要講的知識點引出來,避免平鋪直敘地講解知識點,這樣讓學生帶著問題來學習知識點,會起到事半功倍的作用。例如,在講解編程部分的循環(huán)結(jié)構(gòu)時,筆者先舉了這樣一個例子:求1+2+3+……+100的和。學生立刻就說出結(jié)果為5050。筆者接著問:加到1000呢?這樣很多學生饒有興趣地聽講。可見,教師所選的題目要由淺入深,要能激發(fā)學生的學習興趣,要想辦法讓學生變被動學習為主動學習。
課堂練習也是互動式教學一個非常重要的方法。在講解完某一個例題后,教師可以出一道類似的習題讓學生在課上完成,請學生上講臺在黑板上寫出解題步驟并進行講解。例如剛學習了用循環(huán)的方法求1+2+3+……+100的和,教師可以讓學生練習一道2+4+6+……+100的和。這樣可以檢驗學生的掌握情況,找到學生理解錯誤的地方,從而對癥下藥。就學生理解錯誤的知識點再進行講解,這樣除了可以讓學生當堂能夠掌握所學的知識點,還能讓其做到舉一反三。
4.3實例教學法。
由于本課程是一門比較抽象的課程,因此教師在課堂講授中應該盡量用一些通俗易懂的例子進行教學。
例如在講解匯編中存儲器地址分段的概念時,為了便于學生理解,教師可以借助平時生活的居民樓,進行舉例。一個小區(qū)有多個居民樓,如一號樓、二號樓等,每個樓里有多個室,如101室、102室等。我們可將樓號比作段基值,每個樓里的房間比作偏移地址,很顯然一號樓的101和二號樓的101是不一樣的。這個例子可以使學生易于理解分段的概念。
再如在講解中斷的概念時有很多例子可舉。把教師上課比作CPU正在處理的事,門外有學生打報告,教師就暫停正在處理的事情讓學生進來,等學生進來后接著講課。這樣學生很容易就能掌握中斷的概念。
教師可以將難理解的知識點與日常生活中的小事相聯(lián)系,這樣既可以使學生學到扎實的理論知識,又不會使學生學得吃力。
5.充分發(fā)揮多媒體教學的作用
匯編語言指令多、變化多,相對其他可編程語言來說源程序長而復雜,一個簡單的問題解決至少要幾十行,多則上百行,教師講解例題時如果板書,就要花去大部分時間。如何解決這個問題呢?多媒體能夠提高教學效果,擴大教學范圍,延伸教師的教育功能。教師應在課前準備講解的程序,上課時直接操作計算機,一邊講解指令的格式及算法,一邊將指令使用前后的情況、程序的效果等通過投影儀展示給學生。計算機教學還可借助網(wǎng)上豐富的資源、圖文并茂的生動界面、多姿多彩的影像資料,這些可使教學具有感受性、新穎性、可組合性、可擴充性,使學生的思維更加具有發(fā)散性,更容易培養(yǎng)學生的創(chuàng)新思維。
6.結(jié)語
筆者對匯編語言課程的教學內(nèi)容和教學方法進行了探討,這些教學方法促進了課程的建設與發(fā)展,為學生學好后續(xù)課程打下了一個良好的基礎。摸索一條適合高職學生需要的、有效的教學方法,使高職學生能更好地、更快地掌握匯編語言程序設計,培養(yǎng)學生的分析問題、解決問題和實際操作能力,我們在匯編語言課程教學中需要繼續(xù)探索研究的目標。
參考文獻:
關鍵詞:匯編語言;教學改革;多媒體教學方法;案例教學方法
中圖分類號:G434 文獻標識碼:A 文章編號:1672-7800(2012)005-0214-02
0 引言
匯編語言程序設計是計算機專業(yè)及相關專業(yè)重要的專業(yè)必修課。匯編語言面向計算機硬件,與計算機機器指令一一對應,功能強大,使用靈活。目標程序效率高,長期以來一直適用于系統(tǒng)軟件及驅(qū)動程序的編寫。匯編語言程序設計課程不僅需要培養(yǎng)學生的程序設計技能,而且還要培養(yǎng)學生對計算機硬件運行機制的理解能力,為學習后續(xù)與硬件密切相關的課程(如計算機組成原理,微機原理與接口,單片機等)打下扎實的基礎知識,同時,它也是NCRE三級的一個可選科目,因此其對計算機專業(yè)及相關專業(yè)的重要性不言而喻。
該門課程的特點是軟件知識與硬件知識相互融合,理論與實踐并重,同時對英語水平的要求也比一般計算機高級語言高,而獨立學院是一種新型高等教育辦學形式,其高考招生錄取分數(shù)線主要介于普通本科和高等專科之間。獨立學院學生在基礎知識、自身素質(zhì)、自制力、認知能力等方面與一本和二本的學生存在一定的差異。所以在匯編語言程序設計課程教學中,許多學生都反映課程內(nèi)容抽象,難理解、難掌握,從而產(chǎn)生了不同程度的畏難心理,對教學效果產(chǎn)生消極影響。為了能較好地提高該課程的教學質(zhì)量,本文從該門課程和學生特點入手,通過長期的教學實踐,總結(jié)了一些思路和建議,并將其運用到實際教學中,有效地提高了學生的學習積極性,取得了較好的教學效果。
1 獨立學院匯編語言程序設計課程教學中存在的問題
1.1 從課程內(nèi)容來說,客觀上確實比較抽象
學習匯編語言程序設計的學生,通常只學習過計算機導論和一門高級計算機語言,對于計算機硬件運行的機制很陌生,無法將馮•諾依曼工作原理與80x86計算機組織相互聯(lián)系,導致一開始學習面向硬件編程的匯編語言,就有很強烈的挫折感,喪失了學習的自信和興趣。由于學生80x86計算機組織的知識沒有很好掌握,使得其指令系統(tǒng)和尋址方式的學習根本難以有效進行,其后果是這門課程難以學下去。
1.2 學生未養(yǎng)成良好的學習習慣,沒有掌握正確的學習方法
匯編語言程序設計課程一般開設在大一第二學期,許多學生還沒有完全適應大學的學習方式,遇到困難容易退縮,不能發(fā)揮學習的潛能,且對自己學習時間安排不夠科學充分,達不到消化吸收課堂和課本知識的效果。部分學生還有“等靠要”的依賴思想,等教師來總結(jié),靠教師來消化,要教師來灌輸,沒有發(fā)揮學習主體應用的主觀能動性。
1.3 教學過程沒有以學生為中心
傳統(tǒng)教學方式以教師和教材為中心,課堂上教師與學生溝通較少,這樣顯然教學進度有了保證,但學生是否能跟上教學的進度卻成了未知數(shù)。不充分的溝通還導致了教師對學生的學習指導缺乏針對性。教師不了解學生學習困難的具體細節(jié),不可能正確引導學生克服困難,也無法加強教師與學生的相互聯(lián)系。
1.4 學生理論與實踐脫節(jié)
在匯編語言程序設計教學過程中,理論與實踐是并重的關系,偏袒任何一方都不可能有好的教學效果。偏向理論,實踐不到位,應用能力低下;偏向?qū)嵺`,學習到的知識無法系統(tǒng)化、條理化,不利于知識水平的提高和升華,導致知識水平有一定的局限性。在該門課程教學實踐過程中,這兩種情況的學生都有,急需教師給予科學引導。
2 獨立學院匯編語言程序設計課程教學改革
為了解決好上述教學問題,筆者針對獨立學院的辦學特點和學生特點,總結(jié)了一些有益的思路和想法,具體思路如下:
2.1 課程開始時,要和學生就如何學習好匯編語言程序設計這門課程作充分的溝通
課程一開始,就需要將這課程的特點、難點,及其所需要的合理學習時間和正確的方法告訴學生,幫助學生科學合理安排好自己的學習時間,使學習達到應有的效果,同時也有利于學生做好積極戰(zhàn)勝學習困難的心理準備。通過筆者自身的學習經(jīng)歷和與眾多學習效果比較好的同學溝通,一致認為匯編語言程序設計在學習的開始階段,上課時間與自己理解消化的時間的比例以1∶6為佳。
2.2 使用多媒體教學方法,變抽象為具體
主要是通過制作多媒體課件,使用文字、圖形/圖像、動畫等素材,向?qū)W生動態(tài)展現(xiàn)學習內(nèi)容里比較難想象和難理解的部分,幫助學生深刻理解80x86計算機組織和運行機制以及計算機工作原理的動態(tài)過程,從而為學生學習指令系統(tǒng)和尋址方式清除障礙,打下堅實的知識基礎,并為今后的硬件知識學習建立一個初步的知識框架。同時,幫助學生克服學習上的困難和挫折感,保持學習的自信和興趣。
2.3 引入“案例”式教學方法,加強理論聯(lián)系實際,理論指導實際工作
“案例”式教學方法的引入,可以使學生將學習的理論進行實踐,學生在學習理論的過程中始終在思考如何完成對應的案例,較好地激發(fā)了學生的學習熱情和學習興趣,同時也兼顧了學習的連貫性和整體性。如讓學生完成一個“從鍵盤輸入2個十連制數(shù),然后比較它們的大小,最后在屏幕上輸出比較結(jié)果”的案例,可以讓學生完成對輸出/入、字符比較等理論知識的實踐,又可以使學生提高如何將有關的理論知識聯(lián)系在一起,解決實際問題的能力。
在每次實踐前,都要求學生做好實踐計劃,將有關理論知識進行復習。實踐完畢,都要求學生對結(jié)果進行原因分析,成功的,總結(jié)經(jīng)驗;失敗的,吸取教訓。從而提高學生的理論水平,防止理論與實際脫節(jié)。
2.4 教學以學生為中心,課堂教學提倡精講多練
根據(jù)學生特點,對教材內(nèi)容進行漏選,對涉及知識總體框架的重要知識點及其相互關系詳講,而對于偏、難的內(nèi)容,則略講或不講。同時,在課堂教學中實時地,有針對性地進行課堂練習,學生通過練習產(chǎn)生的問題,可以得到及時的反饋,教師也可以及時準確地知道學生的不足,以便針對這些不足進行教學進度計劃的調(diào)整、加強和補充。這一方式不但提高了學生的學習興趣,鞏固了所學知識,也加強了教師和學生之間的互動和溝通,有利于建立學生對該門課程的學習自信心。
3 結(jié)束語
本文總結(jié)了獨立學院在匯編語言程序設計教學過程中存在的一些問題,并針對性的提出了一些思路和建議,并將其運用于實際的教學實踐中。實踐表明這些解決問題的教學思路方法具有一定的實際意義,取得了較好的教學效果,有利于培養(yǎng)高素質(zhì)的應用型人才。
參考文獻:
[1] 玉婷.獨立學院Visual FoxPro 課程教學與考試改革初探[J].中國教育信息化,2012(2).
[2] 于麗波.三本院校學生特點分析[J].科技信息,2011(8).
關鍵詞: 比較教學法;匯編語言; C語言;實踐;教學效果
中圖分類號:G642 文獻標識碼:A 文章編號:1009-3044(2013)10-2402-02
匯編語言程序設計是計算機專業(yè)學生的專業(yè)基礎課、必修課,屬于低級語言的程序設計,是硬件類課程和操作系統(tǒng)的先行課和基礎課,是高級語言程序設計的擴展。匯編語言是架起軟件、硬件知識的一座橋梁,它不但有利于學生理解計算機的工作原理,而且對學生程序設計能力的培養(yǎng)起著十分重要的作用。
在匯編語言課程教學中發(fā)現(xiàn),匯編語言相對于其他高級語言來說缺乏直觀性與生動性,是一門比較抽象和理論化的課程,學生養(yǎng)成了“重軟件、輕硬件”的學習態(tài)度,往往會選擇一些容易學習的高級語言而忽視了對匯編語言的學習,因此在教學中普遍存在“教師難教,學生難學”的問題。
如何改善匯編語言課程的教學效果和教學質(zhì)量,提高學生學習的興趣和主動性是當前急需解決的問題。將比較教學法引入到“匯編語言”的教學中,該教學方法注重將匯編語言和
高級語言進行比較教學,能夠極大提高學生的學習興趣,取得良好的教學效果。
1 比較教學法在匯編語言課程教學中的應用
1.1 比較教學法
比較教學法( 或叫類比教學法)是指在教學活動中將兩個或兩個以上的認識對象放在一定的條件下,按照同一標準進行對照比較,從而確定認識對象屬性的同異、地位的主次、作用的大小、性能的優(yōu)劣、問題的難易或認識的正誤深淺,以達到辨識、了解和把握認識對象之目的的一種方法[1]。比較教學法是最常用的教學方法之一,也是使用范圍最廣的教學方法之一。
由于學生在學習匯編語言之前已經(jīng)至少學習過如C這類高級語言,所以采用比較教學法不僅能更好地理解匯編語言,同時加深對高級語言的理解也有很大的好處。在實際教學過程中,可以將新的陌生的東西(匯編語言)和舊的熟悉的東西(C語言)做比較,找出它們之間相同的地方和不同的地方,然后進行差異化的學習,重在存同求異,這樣就會事半功倍,達到理想的教學效果。
1.2 比較教學法在匯編語言課程與C語言課程教學中的實踐
高級語言(如C語言)和匯編語言兩者都是程序設計的工具,在程序的基本功能和程序設計的基本問題上均有相應的實現(xiàn)機制,同時在某些方面是相通的,換句話說許多用匯編語言能作的工作也可以用C語言來完成。
2)兩操作數(shù)的類型匹配問題。
2 結(jié)論
限于篇幅,以上僅舉2個例子來說明教學過程中如何將匯編語言和C語言進行比較教學,已經(jīng)取得了很好的教學效果。由于語言的相通性,實際上在整個匯編語言教學中還有很多知識點可以把C語言知識貫穿其中。通過比較教學,一方面學生可以更好地學習匯編語言的相關知識,極大地提高學習效率;另一方面,更提高了學生對C語言的更高層次上的認識,間接地對其他學科的學習也起到了很大的幫助作用。
參考文獻:
[1] 李運模.比較教學法論略[J].中南民族學院學報:人文社會科學版,2000(3).
[2] 沈美明,沈冬嬋. IBM-PC 匯編語言程序設計[M].2版.北京:清華大學出版社,2001.
[3] 譚浩強.C程序設計[M].3 版.北京:清華大學出版社,2005.
“匯編語言”課程是計算機科學、自動化及電子信息類專業(yè)的一門核心專業(yè)課程。[1-2]對于計算機及其相關專業(yè)的學生來說,匯編語言程序設計是需要掌握的重要專業(yè)基礎知識之一。了解和熟悉匯編語言可以優(yōu)化學生的知識結(jié)構(gòu),提高學生的認知水平,增加學生的程序開發(fā)手段。相較于快速發(fā)展的可視化高級語言,作為低級語言的匯編語言,可讀性較差,比較繁瑣,不符合自然語言表述,學生普遍感到難學。因此,“匯編語言”課程如何優(yōu)化教學質(zhì)量、提高教學效果,是任課教師面臨的一個重要問題。[3]本文結(jié)合實際教學體會,就如何提高“匯編語言”課程教學效果進行了分析與探討。
一、匯編語言程序的特點
計算機是一個編碼的世界,只能識別和處理由“0”和“1”組成的二進制代碼的機器語言,這種指令代碼編寫易出錯且不易修改。于是,人們發(fā)明了“指令的助記符”,用助記符(mnemonic)代替操作碼,用標號(label)和地址符號(symbol)代替地址碼,用這種符號系統(tǒng)形成匯編語言。[4]因此,匯編語言本質(zhì)上就是機器語言,只不過更容易被人讀懂且更容易記憶。使用匯編語言編程,可以對計算機內(nèi)部硬件進行直接控制,合理地安排機器內(nèi)部的各種資源。歸納起來,匯編語言程序有以下幾個主要特點:
一是與硬件的相關性。匯編語言與機器指令一一對應,不同類型的cpu內(nèi)部硬件結(jié)構(gòu)不同,因而有不同的指令系統(tǒng),相應的匯編語言程序也就不同,其通用性、可移植性比較差。二是執(zhí)行效率高。由于匯編語言與硬件相關,它可以有效、直接地控制機器,程序的執(zhí)行代碼短、速度快,是其他高級語言難以企及的。三是編程、調(diào)試相對困難。為了有效地控制機器,匯編語言指令涉及到硬件資源的各種細節(jié),如標志、堆棧、寄存器、存儲單元等。相對高級語言,其編程及調(diào)試比較繁瑣、復雜。[5-6]
二、明確教學目的,優(yōu)化教學內(nèi)容
1.激發(fā)學生的學習熱情
“匯編語言”與許多課程聯(lián)系緊密,如圖1所示,它是“操作系統(tǒng)”、“計算機接口技術(shù)”、“計算機組成原理”、“嵌入式系統(tǒng)”等課程的基礎,在開發(fā)嵌入式系統(tǒng)時更是必不可少的語言。“匯編語言”課程學習起來比較枯燥、學習周期較長,不像高級語言那樣上手比較容易且能很快見到效果。因此,應教育學生少一些急功近利的思想,應著眼于長遠的、全面的技術(shù)成長。有條件的教師可以將自己相關的科研成果帶入課堂,說明匯編語言有著廣泛的應用領域。在授課過程中,注意拓寬學生的知識面,結(jié)合具體的應用,激發(fā)學生的學習熱情。
2.優(yōu)化教學內(nèi)容
不同于高級語言的教學模式,匯編語言是一種硬件編程語言,是連接軟硬件的橋梁。一方面,匯編語言與芯片密切相關,學習匯編語言時應具備一定的硬件基礎知識,需要時穿插相關知識點,回顧前導課程的相關內(nèi)容,如計算機結(jié)構(gòu)等;另一方面,又不需要緊跟著產(chǎn)品來講授,只要選擇一種典型的匯編語言指令集講清楚、講透徹,使學生掌握學習與思考的方法,今后遇到其他的芯片,也就可以舉一反三,觸類旁通。
具體到一種匯編語言指令集,應突出其重點、難點,如分段管理技術(shù)、尋址方式、堆棧管理、中斷技術(shù)等。為了便于后續(xù)程序結(jié)構(gòu)的學習,在學習尋址方式和指令集時就教會學生使用debug,講解了常用的調(diào)試命令,使學生能盡快上機實踐,驗證指令,編寫短小程序,看到運行結(jié)果,從而加深影響,鞏固所學的內(nèi)容。由于匯編語言的指令很多,涉及的知識點抽象,剛開始接觸這門課程時,學生往往不太適應,前后的知識點容易混淆,教師應及時對講授過的內(nèi)容進行比較與小結(jié)。課堂上,應適當增加講授例題的數(shù)量,不同的教學階段,例題的側(cè)重點不一樣。開始階段,例題主要涉及匯編語言格式與匯編語言指令;中間階段,例題講授的是如何用匯編語言指令實現(xiàn)匯編語言流程;后續(xù)階段,例題重點講解匯編語言程序設計算法的確定,分析、解決問題的思路與方法。而在學生掌握了基本內(nèi)容及重點內(nèi)容的基礎后,教師應提綱挈領,從系統(tǒng)的整體角度分析“匯編語言”課程在整個硬件知識體系中的作用,讓學生從更高層次理解、使用匯編語言。
3.多種教育手段相結(jié)合
隨著現(xiàn)代教育技術(shù)快速發(fā)展,多媒體技術(shù)在教學中有著廣泛的應用。在“匯編語言”課程中,可以利用多媒體課件圖文并茂的特點吸引學生的注意力,活躍課堂氣氛。例如,可以通過動畫形式將尋址過程、堆棧變化、循環(huán)移位、子程序調(diào)用、中斷調(diào)用過程等表示出來,將復雜的、抽象的問題簡單化、形象化,提高教學效率。而在確定匯編語言程序設計的算法,用匯編語言實現(xiàn)編程,培養(yǎng)學生的推理、思維能力時,采用傳統(tǒng)教學方法。對不同的知識點,結(jié)合不同的教學方法,有利于學生對不同教學內(nèi)容的理解與掌握。
三、注重實驗環(huán)節(jié),提高教學效果
1.實驗平臺及實驗內(nèi)容
匯編語言程序設計要經(jīng)過編輯、匯編、連接和調(diào)試等過程,如圖2所示,傳統(tǒng)的上機實驗一般是在dos操作系統(tǒng)環(huán)境下進行的。目前流行的是windows操作系統(tǒng)平臺,學生對dos操作環(huán)境相對陌生。為了提高上機的效率,應摒棄dos環(huán)境,采用基于windows操作系統(tǒng)的匯編語言集成實驗環(huán)境。在該環(huán)境下,可以方便編輯匯編語言程序,使用下拉式菜單或快捷按鈕進行匯編、連接及調(diào)試等工作,并可以預先設定段定義、過程定義等。
在實驗內(nèi)容安排上,應根據(jù)授課的進度及學生的掌握程度,并與教學目標相匹配,精心選擇一些有代表性的、有實用價值的內(nèi)容,盡量避免實驗內(nèi)容過長、過雜等問題。實驗的內(nèi)容應包括:指令系統(tǒng)及調(diào)試工具debug使用;匯編語言程序設計上機環(huán)境及過程;順序、分支、循環(huán)基本結(jié)構(gòu)程序設計;子程序設計和宏匯編程序設計;中斷調(diào)用程序設計;綜合性實驗。
轉(zhuǎn)貼于
2.發(fā)揮學生在實驗中的主體作用
在整個實驗過程中,以學生為主體,教師只是起到組織、引導的作用。
實驗前,教師講解難點、重點及有關注意事項,點到為止,也可以先給出相關的問題,讓學生去思考、去觀察。要求學生對實驗內(nèi)容進行預習,并在下次上實驗課時用提問、抽查等形式檢查。學生通過預習帶著問題進行實驗,可以提高學習的主動性,且能對知識點的領悟更深刻。
實驗中,鼓勵學生按照自己的思路去編寫、調(diào)試程序。對于學生在實驗過程中提出的問題,一般不直接給出答案,而是引導學生通過學過的理論知識自己尋找解決的方法。只要能達到預定的實驗目標,對實驗步驟及過程不做過多要求。對學有余力的學生,鼓勵他們在完成規(guī)定的實驗內(nèi)容后,對補充題或?qū)ψ约涸O計的問題進行實驗;而對基礎較差的學生,則鼓勵他們獨立地解決問題。
實驗后,要求學生及時對實驗進行歸納、總結(jié),并撰寫實驗報告。
3.實驗實踐貫穿整個教學
“匯編語言”課程有其特殊性,只有通過不斷的上機實踐,學生才能加深對理論知識的理解,提高編寫程序的能力。因此,要轉(zhuǎn)變觀念,重視實驗教學,避免實驗教學流于形式。程序設計是一個調(diào)試修改語法及邏輯錯誤,最終得到正確程序的過程。教師應充分利用多媒體等手段,引導學生動手編程,通過實際例題觀察數(shù)據(jù)流變化,培養(yǎng)學生調(diào)試、修改程序的能力和意識。教師演示與學生實踐可以穿插交替進行。如果學生對自己編的程序沒有把握,則鼓勵他們上機進行驗證,反復地調(diào)試、修改、運行。對有些驗證性實驗,可以用作業(yè)的形式要求學生在課外完成。如用debug調(diào)試工具驗證各類指令的功能和格式,對標志位的影響,查看數(shù)及字符在存儲器中的存放形式,堆棧的變化等。既加深了學生對所學內(nèi)容的理解,又為匯編語言程序設計打下了基礎。
本課程的目的是使學生掌握程序設計的方法,學會用匯編語言編寫程序。結(jié)合各章節(jié)所學的知識點,每次實驗要求學生編寫相關的程序,檢驗學生具體知識點的掌握程度。注意加強前后實驗之間的相互聯(lián)系,融會貫通各個知識點。隨著課程進展的加快,實驗內(nèi)容應從比較簡單到相對復雜,再到課程結(jié)束階段,經(jīng)過知識及多個實驗經(jīng)驗的積累,使學生具備一定的程序設計能力。
關 鍵 詞:C語言;計算機;軟件編程;實驗研究
一、C語言的概述
在1967年BCPL語言被英國MartinRichards 推出,到1970 年B 語言以BCPL 語言為基礎被美國Ken Thompson推出[1]。但是B 語言過于簡單,而且功能有限,經(jīng)過研究者的多次試驗研究,在1972—1973 年,C 語言在B 語言的基礎上經(jīng)過完善,被美國貝爾實驗室D.M推出[2]。在各種計算機編程語言中,C語言屬于一門高級語言,它是一切計算機語言的基礎,擁有高級語言和低級語言的特點,靈活方便,簡潔緊湊;而且它的語法限制不嚴格,程序員在設計時程序書寫自由。不僅能夠編寫系統(tǒng)軟件,同時還可以編寫應用軟件,能夠適應于多種操作系統(tǒng),應用廣泛,可移植性強。總之,C語言對于信息技術(shù)的發(fā)展具有十分重要的作用和價值。
二、基于C語言的計算機軟件編程實驗研究
(一) C語言的編程技巧
1.靈活運用指針
在C語言編程的時候,指針是一種特殊類型的變量,它能夠幫助程序員有效的表達和解決程序設計過程中遇到的復雜問題,熟練掌握指針是必要的。指針具有三要素:指針名以及指針類型和值[3]。在編程時,指針和一般變量名相同,但是在類型以及值上具有區(qū)別,另外,指針不僅能夠被用于表示數(shù)組,還可以被作為函數(shù)的參數(shù)返回值。
2.C 語言的特有函數(shù)
在C語言編程的時候,有時需要用到一些特有函數(shù)。函數(shù)都具有一定的功能,同時函數(shù)名也反映了該函數(shù)的功能。在進行函數(shù)定義時,程序員需要把函數(shù)的名字、返回值類型以及參數(shù)名等各項都進行定義。另外,因為庫函數(shù)是由C 編譯系統(tǒng)提供的,這些函數(shù)均是系統(tǒng)首先定義好的,在程序調(diào)用的時候,程序員只需利用“#include 指令”把與之相關的頭文件包含到所用文件中即可[4]。例如,在程序運行的過程中,如果用到了sqrt函數(shù),則為了保證程序運行下去,頭文件必須含有#include“string .h”。
3.算法技巧
在程序設計的過程中,算法是程序的靈魂,因此,掌握一定的算法技巧是必不可少的。通常情況下,算法不僅可以用自然語言表示,有的時候也利用流程圖表示。需要注意的是,利用流程圖表示算法時,程序設計員必須熟練掌握常用的流程圖符號[5]。且“數(shù)學乃是計算機之母”,牢固的數(shù)學知識同樣能夠提升編程效率。
4.位運算以及文件知識
相比其他計算機高級語言的運算方法,位運算作為C 語言的重要特色,具有獨特性和唯一性。位運算是以二進制位為對象,然后結(jié)合相關程序要求進行各種運算。文件包含有數(shù)據(jù)文件以及程序文件,是計算機不可缺少的,程序設計員在進行編程時,需要把所寫的程序存儲的文件之中,這樣可以便于程序員查找數(shù)據(jù),提升查找效率。
(二) C語言和匯編語言混合的程序設計案例分析
在本次的實驗之中,在進行程序嵌入時,有其固定的格式,需要在嵌入的各行代碼之前加“asm”關鍵字,也可以直接在asm代碼塊中放入?yún)R編語句。但是程序設計者在進行嵌入時,一定要注意滿足以下條件:匯編語言指令代碼中關鍵字asm必不可少,且要放在指令代碼之前;嵌入?yún)R編語言指令代碼能夠和正常C語言程序混合,但是C語言的分隔符“;”必不可少;嵌入?yún)R編語言時C語言的注釋分界符必不可少,分別是“/*”和“*/” [6]。
(2)首先編寫C語言程序以及匯編程序,然后獨立編譯目標代碼模塊,最終進行鏈接。
首先,在進行混合編程時,C語言程序能夠調(diào)用匯編語言的各種子程序以及其定義的變量,同時,C語言編寫的函數(shù)以及定義的變量等也可以被匯編語言調(diào)用。而且混合編程的過程中,一個任務往往是由若干個功能模塊組成,且不同的功能模塊均是利用合適的語言進行獨立編程,且以函數(shù)的形式存在。因此,程序設計者要根據(jù)每一模塊的特點選擇相應的語言和語言編程系統(tǒng)進行獨立編程,并形成目標文件,繼而連接目標文件,形成完整的可執(zhí)行文件。
在混合編程的過程中,設計者需要注意五個問題:參數(shù)傳遞問題;寄存器的使用問題;存儲模式;變量以及函數(shù)的調(diào)用問題;子程序的返回值問題。
其中,關于參數(shù)傳遞問題,在進行C語言程序調(diào)用匯編程序時,必須遵從參數(shù)傳遞原則,利用堆棧把參數(shù)傳遞給匯編程序。例如,在C語言程序中含有函數(shù):voidaa(char*p,int i),這個函數(shù)是利用匯編語言進行編寫的,如果編譯是在小內(nèi)存模式下實施的,系統(tǒng)在進行調(diào)用時,則寫成aa(&q , n);運行時程序首先把n壓入堆棧,然后再把&q壓入堆棧,當參數(shù)傳遞過來并被匯編語言的子程序取得時,BP寄存器便被用作基地址寄存器,實現(xiàn)對棧中所存數(shù)據(jù)進行存取操作。通常情況下,由于調(diào)用的子程序和C語言程序往往使用同一個堆棧,所以在程序執(zhí)行時,匯編語言子程序需要執(zhí)行兩條指令:push bp pop bp、sp[7]。
2.混合的軟件編程實例分析
三、小結(jié)
綜上所述,隨著信息技術(shù)的不斷發(fā)展,人們對于計算機軟件編程的功能要求也將越來越高,而利用C語言能夠?qū)崿F(xiàn)計算機軟件的多種功能,因此研究者應當強化對于C語言的計算機軟件編程實驗研究,開發(fā)功能更加強大的軟件。
參考文獻
[1] 侯宏霞.提高“匯編語言”課程實驗教學質(zhì)量的幾點思考[J].內(nèi)蒙古農(nóng)業(yè)大學學報(社會科學版),2011(01):25-26.
[2] 劉海峰.以培養(yǎng)實踐能力為導向的“C語言”教學方法探討[J].科技經(jīng)濟市場,2008(12):33-34.
[3] 阿娜古麗·阿布拉.C語言與匯編語言相互調(diào)用實現(xiàn)混合編程[J].電腦編程技巧與維護,2009(10):71-74.
[4] 劉丹,劉德山.C語言程序設計課程綜合性和設計性實驗研究[J].計算機教育,2012(09):31-32.
[5] 王應軍,曲培新,趙晨萍.ARM匯編語言與C語言混合編程的實現(xiàn)方法[J].科技信息,2010(03):69-71.
[6] 方艷紅,趙海龍.計算機高級語言程序設計類課程實踐教學改革研究[J].中國科技信息,2008(19):12-14.
關鍵詞:計算機組成原理;匯編語言;教學改革
中圖分類號:G642.3 文獻標識碼:A 文章編號:1002-4107(2016)07-0014-02
一、“計算機組成原理”課程的特點
“計算機組成原理”是研究生入學考試的必考科目。該課程以馮?諾依曼型計算機為基礎,圍繞計算機的運算器、控制器、存儲器和輸入輸出設備等五大部件詳細介紹它們的工作原理與算法以及具體實現(xiàn)的電路結(jié)構(gòu)。通過學習本課程,要求學生熟練掌握單總線結(jié)構(gòu)CPU的工作原理和設計實現(xiàn)的方法,同時要求學生初步掌握精簡指令系統(tǒng)、流水線結(jié)構(gòu)、多體并行存儲器、中斷的工作原理等知識,為后續(xù)課程“微機原理與接口技術(shù)”、“計算機系統(tǒng)結(jié)構(gòu)”做好準備。該課程首先講授了8086CPU的編程結(jié)構(gòu),然后引申出8086匯編語言的尋址方式和指令系統(tǒng),學生在掌握上述知識的基礎上,進行匯編語言程序設計。匯編語言程序設計可以讓學生加深對程序設計方法的理解,同時程序的編寫和調(diào)試使學生對計算機硬件有一個感性的認識, 為以后他們學習“微機原理與接口技術(shù)”、“操作系統(tǒng)”等課程做準備。
根據(jù)國家教育部高教教執(zhí)委的新的教學改革精神,結(jié)合我院的具體情況,我院將“計算機組成原理”與“匯編語言”兩門課程合并成一門全新的“計算機組成原理”課程。在新的教學體系中,我們將兩門課程有效地結(jié)合起來去糟取精刪繁就簡,舍去了兩門課程中的重疊部分而突出重點,形成了一套新的教學體系。
二、“計算機組成原理”與“匯編語言”教學內(nèi)
容的融合
在傳統(tǒng)的“計算機組成原理”課程中,教師始終圍繞著計算機的五大部件按照運算器、存儲器、控制器、輸入輸出系統(tǒng)這個順序進行講解,在講授過程中經(jīng)常會用到一些實例進行說明,而很多時候是以匯編語言做例子講解的,兩門課程融合在一起的最大好處就是教師在講授“匯編語言”的部分時,可以更好地兼顧“計算機組成原理”,讓這兩門課程做到無縫對接。
在基礎知識部分,我們首先要介紹馮?諾依曼型計算機的特點。馮?諾依曼型計算機是串行計算機的始祖,所有的串行計算機都要符合馮?諾依曼型計算機的特點,這是“計算機組成原理”基礎知識部分的重點。在課程講授過程中,教師都會畫一幅五大部件的關系圖,通過圖形示意來表示一條指令是如何在五大部件之間流動的,從而使用戶從外部觀察到計算機處于運行狀態(tài)。我們考慮從這里引入8086CPU的編程結(jié)構(gòu),從計算機組成原理過渡到匯編語言,讓指令舉例更加具體化,再結(jié)合指令的尋址方式,借機說明8086的匯編語言指令是如何在CPU中執(zhí)行的。
在接下來的講授過程中,我們將介紹8086匯編語言的尋址方式和指令系統(tǒng)。由于在計算機組成原理課程中也有一章介紹指令系統(tǒng),我們可以把這個部分與匯編語言的內(nèi)容合并,以計算機組成原理的部分強調(diào)基本概念,以匯編語言的內(nèi)容來強調(diào)具體應用,把內(nèi)容更加具體化,舉例更具有針對性,可以使學生更好地理解尋址方式和指令系統(tǒng)。在這里我們在教學上做了一點改變,我們考慮到匯編語言指令數(shù)目較多的特點將指令分類,每類指令選出一到兩個具有代表性的指令進行詳細說明,其他略講,然后采用寫出指令執(zhí)行結(jié)果的方式進行大量練習,從而鞏固這部分知識。
在講授了匯編語言的程序設計方法之后,再講授計算機組成原理部分的運算器與運算方法部分。在這部分我們可以利用學過的匯編語言知識,結(jié)合布斯算法和加減交替法編寫定點數(shù)乘除法的匯編語言程序,還可以編寫浮點數(shù)運算的模擬程序。在講授控制器的部分時,我們可以設計一個類8086的CPU,把它作為課堂上的CPU設計舉例,這樣把一條8086匯編語言指令放在這個CPU中運行,可以更直觀地反映指令的工作細節(jié),促進學生對控制器的工作原理和匯編語言的理解。
三、“計算機組成原理”與“匯編語言”實驗內(nèi)
容的融合
“計算機組成原理”與“匯編語言”都有實驗課,由于在講授上先講“匯編語言”的內(nèi)容,因此相關實驗先進行,然后進行“計算機組成原理”的實驗。我院的“計算機組成原理”實驗課程使用的是由清華大學計算機學院研制開發(fā)的TH-union+教學實驗系統(tǒng),該系統(tǒng)主要用于“計算機組成原理”課程的硬件教學實驗,還支持監(jiān)控程序、匯編語言程序設計。在硬件上同時實現(xiàn)了硬布線方式和微程序方式兩種控制器結(jié)構(gòu),既支持用中小集成度的芯片實現(xiàn)CPU的方案,又支持用高集成度的FPGA門陣列實現(xiàn)CPU的方案。在軟件上可實現(xiàn)指令級模擬,也可以軟件模擬硬布線和微程序的操作,為學生學習硬件理論知識起到了重要的輔助作用。但是該實驗系統(tǒng)的匯編語言指令與8086匯編語言是不兼容的,這使學生在短期內(nèi)很難快速掌握實驗系統(tǒng)的匯編語言指令,因此經(jīng)課程組全體教師研究決定,另外開發(fā)一款新的匯編語言轉(zhuǎn)換軟件,用來實現(xiàn)兩種不同種類的匯編語言互相轉(zhuǎn)換。
該軟件是利用linux模擬環(huán)境Cygwin開發(fā)實現(xiàn)的。Cygwin是cygnus solutions公司開發(fā)的一個在windows平臺上運行的類UNIX模擬環(huán)境。在這里我們主要使用了Cygwin開發(fā)環(huán)境里的flex和gcc兩個工具軟件。利用flex工具軟件編寫的源代碼必須轉(zhuǎn)換成c語言代碼格式,然后由linux下的c語言編譯器gcc編譯成可執(zhí)行文件,完成最后的開發(fā)。
由于TH-union+教學實驗系統(tǒng)的匯編語言指令共48條,采用精簡指令系統(tǒng),每條指令的尋址方式是固定的,因此不單獨設置關于尋址方式的標志位,當指令進行譯碼操作的時候,實驗系統(tǒng)電路通過分析指令的操作碼既了解了指令的操作功能也了解了指令操作數(shù)的尋址方式。而8086匯編語言指令是一個復雜的指令系統(tǒng),每條指令對應著多種不同的尋址方式,因此我們把教學實驗系統(tǒng)的匯編語言看成是8086匯編指令系統(tǒng)的子集。通過對轉(zhuǎn)換程序my的使用,幫助學生對比兩種匯編語言之間的相同點和不同點,通過對比學習,學生可以更快速地熟悉實驗系統(tǒng)匯編語言。
在這里對于不可轉(zhuǎn)換的匯編語言指令可采取兩種處理方式:方式一,發(fā)出警告提示并忽略此條指令;方式二,發(fā)出錯誤提示并強行結(jié)束程序轉(zhuǎn)換。轉(zhuǎn)換程序your分析了操作碼之后開始分析操作數(shù)的尋址方式。在這里,我們假設所有指令都采用雙操作數(shù),因此在結(jié)構(gòu)體中設置了兩個對應尋址方式的變量。具體操作時,如果分析出該操作數(shù)的尋址方式可以被實驗平臺支持,那么就將對應數(shù)值保存在結(jié)構(gòu)體的對應變量中以便轉(zhuǎn)換,如果不是實驗平臺支持的尋址方式,系統(tǒng)將提示用戶:“你的程序中使用了不可轉(zhuǎn)換的尋址方式”,并強行結(jié)束轉(zhuǎn)換。在尋址方式轉(zhuǎn)換過程中,有一些特殊情況需要系統(tǒng)自動追加指令。
最后,要對輸入輸出指令單獨處理。輸入輸出操作是后續(xù)課程“微機原理與接口技術(shù)”的重要知識點。在編寫匯編語言程序過程中,當遇到輸入和輸出操作都是直接調(diào)用DOS中斷或BIOS中斷來實現(xiàn)的。但是教學實驗系統(tǒng)沒有任何中斷程序輔助操作,遇到輸入和輸出操作只能由學生自己編寫。在編寫8086匯編語言程序過程中,凡是遇到輸入和輸出操作都通過調(diào)用這兩個宏來實現(xiàn)。每次進行輸入輸出操作時必須先對指定的狀態(tài)寄存器的標志位進行判斷,以確定硬件是否準備好,是否可以進行輸入輸出操作。具體做法是使標號由英文字母和數(shù)字構(gòu)成,每次產(chǎn)生新的標號,后面的數(shù)字部分就加1,保證新標號與舊標號不同。
“計算機組成原理”和“匯編語言”是計算機科學與技術(shù)、軟件工程專業(yè)的專業(yè)課程,這兩門課程存在著很多聯(lián)系同時也有一些區(qū)別,把這兩門課程合并成一門全新的“計算機組成原理”課是我院一項新的教學改革方案。如何把兩門課程很好地融合在一起就成了課程組面臨的一個新的挑戰(zhàn),本文結(jié)合課程組全體教師的多年教學經(jīng)驗,拋磚引玉,初步提出了一些在教學和實驗上的改革方案,希望各界同人多提寶貴意見。
參考文獻:
[1]唐朔飛.計算機組成原理:第二版[M].北京:高等教育
出版社,2008.
[2]王誠,劉衛(wèi)東,宋佳興.計算機組成與設計:第三版
[M].北京:清華大學出版社,2008.
[3]沈美明,溫冬嬋.IBM PC匯編語言程序設計:第二版
[M].北京:清華大學出版社,2001.
關鍵詞:匯編語言 I/O 子程序 庫
中圖分類號:TP313 文獻標識碼:B 文章編號:1002-2422(2008)03-0086-02
設計的I/O子程序庫包括16位版本和32位版本,可分別應用于16位和32位匯編語言應用程序,提供的子程序功能包括不同數(shù)制和字符串的輸入與顯示,狀態(tài)標志的顯示,滿足匯編語言程序設計的通常要求。
1 設計方案
1.1子程序功能需求
根據(jù)在匯編語言程序設計中的通常要求,子程序所提供的功能主要包括鍵盤輸入和顯示器顯示,輸入和顯示的內(nèi)容可以是不同的數(shù)制與字符串格式。如表1所示。
1.2子程序庫結(jié)構(gòu)
為了方便整個子程序庫的設計,設計了一些通用予程序。在實現(xiàn)提供給用戶使用的子程序時,充分利用這些通用子程序,簡化了子程序的代碼編寫,減少了子程序庫的長度。主要子程序之間的關系如圖1所示。
字符輸入和顯示子程序READC、DISPC是整個子程序庫輸入輸出的基礎。利用這兩個子程序?qū)崿F(xiàn)了字符串輸入和顯示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同數(shù)制數(shù)據(jù)輸入和顯示的基礎:通過調(diào)用READMSG讀入字符串,然后調(diào)用字符串轉(zhuǎn)換子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分別將字符串轉(zhuǎn)換為不同數(shù)制的數(shù)據(jù),從而實現(xiàn)了不同數(shù)制輸入的子程序READBIN、READHEX、READUI、READSI等;通過調(diào)用DISPMSG顯示字符串,然后調(diào)用數(shù)據(jù)轉(zhuǎn)換字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分別將字符串轉(zhuǎn)換為不同數(shù)制的數(shù)據(jù),從而實現(xiàn)了顯示不同數(shù)制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
設計的16位和32位的子程序庫提供的子程序功能都是相同的,區(qū)別在于16位的字符輸入子程序是利用DOS系統(tǒng)調(diào)用實現(xiàn)的,而32位的字符輸入子程序是利用WIN-DOWS API函數(shù)實現(xiàn)的。其他子程序則可以通用。
各個子程序匯編后,由庫管理工具LIB.EXE生成16位子程序庫I/O16.LIB和32位子程序庫I/O32.LIB。
1.3參數(shù)傳遞
匯編語言子程序的參數(shù)傳遞可以采用寄存器傳遞,共享內(nèi)存變量和堆棧傳遞三種方法。堆棧傳遞參數(shù)時,可以用MASM提供的偽指令PROTO來聲明子程序,用INVOKE來調(diào)用子程序。這兩個偽指令在聲明和調(diào)用子程序時相對于CALL指令和PROC偽指令要簡潔得多。使用堆棧傳遞參數(shù)也是高級語言通常使用的子程序傳遞參數(shù)的方法,用堆棧傳遞參數(shù)的子程序可以被高級語言調(diào)用。子程序的返回參數(shù)也遵循高級語言子程序的規(guī)范,采用寄存器EAX返回子程序的出口參數(shù)。
1.4宏命令
調(diào)用子程序需要用專門的調(diào)用指令并遵循一定的格式要求,這對于初學者來說有一定的難度。當子程序的參數(shù)比較多時,調(diào)用子程序的編碼量較多,設計了調(diào)用子程序的宏指令,利用宏指令來實現(xiàn)對應的子程序調(diào)用,格式簡單,使用方便,尤其適合初學者應用。為提高代碼的復用性,被調(diào)用子程序的聲明和宏定義都放在包含文件IO.INC中,在匯編語言應用程序中用INCLUDE語句包含該文件即可。
關鍵詞微機原理 匯編語言 整合 教學方法
中圖分類號:G642文獻標識碼:A
隨著計算機技術(shù)和通信技術(shù)的發(fā)展,微型計算機的應用越來越廣泛,“微機原理與接口技術(shù)”課程也成為除計算機專業(yè)外,機械、電子、通信、自動化等相關專業(yè)必設的專業(yè)基礎課。“微機原理與接口技術(shù)”課程在一些高校已經(jīng)逐步和“匯編語言程序設計”課程整合到了一起。這是由于微機原理中要使用匯編語言的知識,匯編編程中又牽涉到微機原理的一些概念。兩者相輔相成,且這兩門課程都有一定的教學難度,要將它們整合到一起,實現(xiàn)相互印證,相互促進,更是一件難事。通過近幾年的教學實踐,筆者總結(jié)了一些經(jīng)驗,介紹如下。
1 教學過程中注意體現(xiàn)匯編語言本身的優(yōu)缺點,引導學生學習的方向
學生在學習本課程之前,一般都有過計算機高級語言的學習基礎。與高級語言相比,匯編語言存在一些固有的缺點,如對硬件的依賴性較強,可移植性較差,解決問題的步驟較為繁瑣,有很多細節(jié)問題需要考慮等。①這就好比用戶首先學習了如何在飯店點菜,已經(jīng)習慣了一套簡易的流程,現(xiàn)在要學習自己做菜,要考慮的細節(jié)更多,也就覺得更麻煩。但學會自己做菜,有利于我們了解菜系的搭配原理,火候問題等,從而制作出更可口的菜肴,如同匯編語言的學習有利于用戶了解計算機的工作原理,從而更好地理解微機原理的相關問題。同時,匯編語言的一些細節(jié),也能幫助用戶簡化一些操作。例如對于求解1+2+3+……+100②這個問題,可以利用LOOP語句中CX每次自減1的特點實現(xiàn),程序③如下:
MOVAX, 0;用來放累加和
MOVCX, 100;循環(huán)次數(shù)為100
NEXT:ADDAX, CX ;AX+CX的和傳送給AX
LOOPNEXT ;CX減1,判斷CX不等于0時,循環(huán),從NEXT標號處執(zhí)行
這比用高級語言實現(xiàn)更簡潔。匯編語言的優(yōu)勢更多的體現(xiàn)在對硬件芯片的編程,例如對8253、8255芯片的初始化編程,程序段比較簡潔、直觀。教學過程中,要注意引導學生的學習方向,避免學生在學習過程中產(chǎn)生厭學情緒,要讓學生看到匯編語言的優(yōu)點。
2 找到知識的結(jié)合點,加強知識的聯(lián)系
匯編語言是微機原理課程的一門工具性語言,兩門課程中有很多交叉結(jié)合的知識點。如果在微機原理部分沒有理解CPU的內(nèi)部結(jié)構(gòu)和工作原理,大量的指令就無法正確運用,也就更難靈活運用匯編語言進行編程。④例如匯編語言中大量采用寄存器結(jié)構(gòu),很多指令中都有指定的寄存器用法,而寄存器是CPU內(nèi)部結(jié)構(gòu)的重要組成部分,是微機原理的一個重要的知識點,各種寄存器的用法又可以通過尋址方式體現(xiàn)出來。比如基址指針寄存器BP在尋址做基址中使用時,默認數(shù)據(jù)在堆棧段中,在匯編語言講解子程序的參數(shù)傳遞一例時,主程序用PUSH語句將參數(shù)放入堆棧,子程序中引用參數(shù)時,并不采用數(shù)據(jù)出棧,而是以BP為基址采用寄存器間接尋址方式訪問堆棧。再如,微機原理中講解外設與計算機的數(shù)據(jù)傳送時,可注重介紹IN,OUT輸入輸出指令在執(zhí)行時,對接口電路的影響,即匯編語言指令具體執(zhí)行對硬件的影響,如M/,,信號以及地址譯碼的變化。⑤
3 重視實驗教學,體現(xiàn)指令與硬件的結(jié)合,鼓勵進行設計型實驗
微機原理很多知識需要通過實驗來加以驗證和運用,上好實驗課是教學的重要環(huán)節(jié)。但該課程的實驗課大部分都是驗證性實驗,都在演示課本上的例子,這對于學生充分理解微機原理,熟練掌握匯編程序設計和鍛煉實踐能力來說是一種限制。我校實驗采用DJ系列8086/8088微機系統(tǒng),其中實驗十五:簡單I/O口控制,實現(xiàn)的功能是利用開關K1~K8控制LED燈L1~L8,一個開關控制一個燈的亮滅,⑥所用接口芯片為74LS244,74LS273。該實驗為驗證性試驗,即學生可按實驗指導書完成硬件連線,運行現(xiàn)有程序,即可實現(xiàn)功能。如此則學生較難留下深刻印象,也不能很好地理解硬件和軟件的配套關系,因此我要求學生在完成實驗的基礎上,對實驗進行修改,例如當?shù)刂肪€重新連接后,端口地址如何變化;如何修改程序,實現(xiàn)一個開關控制8個燈的亮滅。學生通過自己思考,動手實踐,實現(xiàn)功能,從而留下深刻印象,加深了對知識的理解,教學效果也圓滿實現(xiàn)。對于實驗教學,我們應在做好驗證性實驗的基礎上,多挖掘?qū)嶒瀮x器的潛力,多讓學生思考,多做一些有設計環(huán)節(jié)的實驗,從而提高學生的實踐能力。
4 合理安排課時,考核時注意知識點的傾向性
適當調(diào)整教學內(nèi)容講授的次序和學時分布,講授內(nèi)容有所側(cè)重,建立一個合理的教學體系。由于匯編語言在微機原理這門課程中主要是起到一門工具性語言的作用,即很多微機原理的知識需要通過匯編編程加以體現(xiàn),因此在匯編語言的教學過程中,不要過于強調(diào)如何解決那些計算機高級語言擅長解決的軟件問題,這本來就不是匯編擅長的領域。匯編的教學中只要求學生熟悉匯編語言指令的基本功能及使用要求,熟悉匯編語言解決問題的思路即可,不要花費過多的時間,應將教學的側(cè)重點放在匯編語言與微機原理的結(jié)合處,主要是對芯片控制的編程。在考核的內(nèi)容上,也應側(cè)重于匯編語言在解決硬件相關問題的作用,從而引導學生的學習方向。
通過對匯編語言和微機原理整合課程的教學改革,使學生對該課程產(chǎn)生了更濃厚的學習興趣,取得了較顯著的教學成果,同時也還存在一些不完善的地方,需要在以后的教學實踐中不斷改善。
注釋
①許穎梅.對匯編語言和微機原理課程整合的探討[J].福建電腦,2007.1.
②楊季文.80X86匯編語言程序設計教程[M].北京:清華大學出版社,2004.
③趙樹升,趙雪梅.現(xiàn)代微機原理及接口技術(shù)[M].北京:清華大學出版社,2008.
④馬浩.淺談微機原理與匯編語言教學改革[J].科技創(chuàng)新導報,2009.17.
匯編語言與C語言均屬于編程語言,但是二者之間存在著根本上的不同。在開發(fā)軟件的過程當中使用這兩種語言混合程序設計的技術(shù)是一種有效的程序設計方法,不僅能夠有效提升工作的效率,還可以提升程序的性能。本文主要介紹了匯編語言與C語言混合程序設計的方法,希望給二者之間更好的銜接提供一定技術(shù)方面的支持。
【關鍵詞】匯編語言 C語言 設計技術(shù) 混合程序
匯編語言是一種面向機器的編程語言,運算速度快,在使用匯編語言的過程可以通過提高存儲器運行速度來提升其存儲空間,另外,匯編語言其控制作用力應用在硬件上也有著無法取代的優(yōu)點。同時匯編語言也有著程度較高卻復雜和移植性差等缺點,但是在實際的操作中,硬件還有精確定的過程中必須要用到匯編語言。C語言作為一種高級語言,其表達性以及靈活性還有開發(fā)性均較高的優(yōu)勢,因此為了更好的發(fā)揮匯編語言和C語言在開發(fā)軟件中各自的優(yōu)點,將兩者有機的結(jié)合起來,取長補短混合編程更好的達到設計的要求,高質(zhì)量的完成設計任務。
1 C語言程序設計技術(shù)方法
(1)可以在C語言程序之中確定匯編程序的常、變量。
(2)可以在C語言編程當中適當?shù)脑黾诱Z句編輯,保證實現(xiàn)C語言無法控制硬件的缺陷。
(3)然而使用C語言程序時可以通過內(nèi)部函數(shù)的使用加入?yún)R編語言中的相應語句。
2 匯編程序設計技術(shù)及方法
在C語言編程當中,可以將匯編語言的代碼直接的編寫進去,并且融入?yún)R編語言的過程當中可以不使用分號,詳細的語法是:
asm
若想要將一組匯編語句融入到C語言中,必須要將語句括到括號{}當中。
asm {
mov ax,dataA
xchg ax,dataB
mov dataA,ax
}
一般想要在C語言程序當中編入?yún)R編語言,有四種類型,分別是一般指令、跳轉(zhuǎn)指令、串聯(lián)指令和局部定義指令。
匯編語言子程序應用在C語言中,一般情況下匯編語言的子程序其基本格式是:
MYCODE SEGMENT PARA PUBLIC‘CODE
PUBLIC_函數(shù)名;
公共符號說明DGROUP GROUP MYDATA,MYBBS
MYDATA SEGMENT WORD PUBLIC‘CODE’
...定義變量,初始化數(shù)據(jù)
MYDATA ENDS
MYBBS SEGMENT WORD PUBLIC‘CODE’
...非初始化數(shù)據(jù),開辟內(nèi)存區(qū)
MY BBS END
ASSUME
CS:MYCODE,DS:DGROUP,SS:DGROUP
...
_函數(shù)名 PROC NEAR/FAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
...程序主體語句
POP DI
POP SI
POP BP
RET
_函數(shù)名 END UP
...
MYCODE ENDS
END
3 C語言匯編語言需要調(diào)用其它子程序的語言格式
把被調(diào)用程序其格式和普通匯編語言程序分布情況加以比較能夠發(fā)現(xiàn):
因為C語言程序和進行匯編的子程序需要共用同一個程序運行區(qū)間,所以在剛剛開始進行子程序的C語言匯編時就需要運行PUSH BP和MOVE BO,SP這兩個命令。
必須要把將會被修改和匯編到C語言程序中的子程序進行局部調(diào)用的PUBLTC操作,通過進行PUBLTC的操作來表示該段C語言子程序已經(jīng)參與到其他的操作中,被其他程序所調(diào)用了。
雖然已經(jīng)被調(diào)用的子程序會接受程序的控制,但也需要對該段子程序利用SI和DI進行局部變量的保存,但是僅在變量高于120分鐘時,才能將其在堆棧當中加以存放。因此,這一模式進行過程中,我們可以清楚的看到PUSH DI還有PUSH SI的語句。
在經(jīng)過匯編的程序C語言中,要把MYCODE的代碼段、初始數(shù)據(jù)段、修改數(shù)據(jù)段進行分別的定義,并且把這幾個分段的匯編程序組合成為一個有效段組,保證該段段組基址的共用性。
在匯編之后的程序語句之前必須要增加一段函數(shù)值語句,保證語句可以有效的返回,進行下一段的程序循環(huán),并且設置的返回值要在RET語句的前方。
值得注意的是,不同意調(diào)用過的子程序必須要用RET的命令增加返回功能,并且在結(jié)束語句后編輯結(jié)束END。這個END語句代表的是最終的終止,沒有相應的啟動功能。
通過C語言子程序的匯編,可以有效的保證其調(diào)用功能,同時也節(jié)省了相應的程序編輯空間。例如在程序輸入時,不用修改程序的進位制就能準確的進行數(shù)據(jù)的讀取,也就是說參與匯編的C語言子程序在格式上不會有太大的改變,只需要在原本子程序的起始部位增加相應的語句就可以了。
EXTERN 函數(shù)名,主要作用是為了反應出這個函數(shù)是C語言的子程序,且是外部調(diào)用的、。原本的主程序語句,可以利用外部程序來實現(xiàn)原本語句的調(diào)用功能,具體的調(diào)用格式如下:CALL NEAR PTR 函數(shù)名,而在將C語言程序當做是子程序的過程中,只包含有C函數(shù),并不需要EXTERN來進行進一步的說明。
4 連接兩種語言
由于匯編語言和C語言二者均存在著一定的問題,通過將兩種語言混合編程,能夠彌補兩種語言各自存在的不足,因此,下面闡述如何連接這兩種語言。
4.1 傳遞參數(shù)
在調(diào)用C語言及匯編語言時,可能會存在匯編語言的參數(shù)傳遞問題,通常都是利用堆棧來進行傳遞,通常在匯編C語言的過程中,要把BP基址當作原數(shù)據(jù)的儲存器,C語言的匯編參數(shù)全部儲存在堆棧儲存器當中,如果在需要使用儲存參數(shù)時,可以把存儲在堆棧當中的數(shù)據(jù)進行清除處理。
4.2 調(diào)用關系的確定
對于即將要調(diào)用的函數(shù)或者是過程,要在調(diào)用開始之前明確的說明,建立完整的調(diào)用關系,詳細的說明被調(diào)用的子程序是屬于那個外部過程當中的,并且被調(diào)用的子程序應用在什么模塊當中。另外要根據(jù)調(diào)用模塊和儲存方式的不同,對被調(diào)用的C語言匯編子程序進行格式的確定,一般情況下被調(diào)用的在大模式下與原本程序類型基本相似,小模式下存在微小的變化
4.3 模塊連接
原有的C語言模塊想要和匯編C語言的模塊進行準確的連接,就需要做到以下兩點:
(1)原有C語言模塊必須與匯編C語言模塊的儲存方式相同。
(2)要求匯編模塊要遵守和C語言模塊兼容的相同命名。
因為編譯系統(tǒng)在編譯C源程序的過程當中,將會在函數(shù)名以及變量名稱的前面畫有下劃線,想要保證連接前后相同,全部被C語言調(diào)用的匯編子程序其標識符前面都要標記下劃線。并且,想要使匯編語言的標識符在C語言當中能夠看見,需要用PUBLIC來定義。要求匯編語言當中其C語言的變量以及函數(shù),必須要在二者前面加上下劃線,同時,要求匯編程序開頭的所調(diào)用C函數(shù)以及變量必須要用EXTERN對其進行說明。
為了有效保證C語言及匯編語言二者混合情況下設計的程序標準,能夠有效的實施,必須要保證主要參數(shù)在變成函數(shù)被調(diào)用的過程中具有有效的傳遞作用,并且要求針對程序設計具體的情況來確定兩個語言之間相互調(diào)用的關系。
在C語言的程序當中包括六種儲存形式,分別是微型和小型以及中型和金丑行,還有大型和巨型這六種儲存的模式。通過這點我們可以知道,主要由空間的大小來區(qū)別儲存模式。在這當中微型的儲存模式其程序和蹲站都在同一段中,而小型的儲存模式擁有數(shù)據(jù)以及代碼段,詳細的數(shù)量為同一個。如果想要混合編程,首先必須要保證這兩個程序所使用的是一個儲存模式,對于匯編語言來講,Model表示程序當中用到的偽指令,之后需要連接的內(nèi)容便是儲存的模式,通常是上面所講的儲存模式當中的一種模式。若C語言程序所使用的儲存模式是小型的,那么匯編語言當中就會表示成Model Small,并且在這個時候這兩種程序使用的儲存模式一定是相同的類型。因為小型儲存模式將Near當做是基礎指針,因此,這種儲存模式其運行效率極高,所以說在實際混合編程的情況下,如果符合條件這種情況下最好選擇小型儲存模式。
在編譯C語言的過程當中,在變量以及函數(shù)名稱的下面將會添加下劃線,為了保證連接的質(zhì)量,調(diào)用子程序的過程當中,任何標識符其下方都應該添加下劃線。站在C語言程序的角度去看,將會把所調(diào)用的對象其中實際的變量和函數(shù)作為偽命令,進而起到說明的作用。一般把命令放在函數(shù)和變量的外部。除此之外,由于想要保存匯編語言程序標示符的完整性,應該使用PUBLIC定義相應的標示符。
5 結(jié)束語
通過本文對匯編語言與C語言的混合程序設計技術(shù)的進一步闡述,使我們了解到在開發(fā)軟件的過程當中使用這兩種語言混合的程序設計的技術(shù),能充分發(fā)揮兩種語言各自的特點,揚長避短,大大提高了軟件開發(fā)的效率,縮短開發(fā)的周期,達到事半功倍的效果。通過本文對二者之間混合程序設計技術(shù)的具體闡述,希望能夠給使用匯編語言及C語言混合程序設計方面提供一定的幫助,對于我國軟件開發(fā)方面起到促進的作用。
參考文獻
[1]陳久婭.C語言與匯編語言的混合程序設計技術(shù)研究[J].電子制作,2013(04):61.
[2]康晶晶.匯編語言與C語言的混合程序設計技術(shù)[J].計算機時代,2013(06):1-2.
[3]印德彬.匯編語言與C語言的混合程序設計技術(shù)[J].電子技術(shù)與軟件程,2015(02):254.
作者簡介
楊波(1979-),女,侗族,貴州省凱里市人。理學學士學位。現(xiàn)為黔東南民族職業(yè)技術(shù)學院汽車與機電工程系講師。主要研究方向為軟件開發(fā)。
1現(xiàn)狀及發(fā)展趨勢
大多數(shù)高等院校計算機本科專業(yè)涉及的硬件教學課程主要有“數(shù)字邏輯”、“匯編語言程序設計”、“計算機組成原理”、“計算機系統(tǒng)結(jié)構(gòu)”、“微機原理與接口技術(shù)”、“單片機”、“嵌入式系統(tǒng)”等,在新形勢下部分課程內(nèi)容設置顯得不夠合理,部分教學內(nèi)容與實際應用脫節(jié),影響了教學效果,無法完全滿足教學大綱中要求的動手能力培養(yǎng),更無法有效培養(yǎng)同學們的創(chuàng)新意識。目前,作為計算機教學重要專業(yè)基礎課程的“數(shù)字邏輯”,要求學生掌握組合邏輯、時序邏輯電路的分析和設計方法,研究對象主要是分立元件、通用中小規(guī)模集成電路及基本的可編程器件等,介紹的方法也以傳統(tǒng)方法為主,已無法適應目前應用的需要;作為專業(yè)主干課程的“計算機組成原理”、“計算機系統(tǒng)結(jié)構(gòu)”,主要內(nèi)容是討論計算機的結(jié)構(gòu)、各功能部件原理及設計方法,同時介紹當前的新技術(shù)、新方法,目的是讓同學們熟悉計算機的結(jié)構(gòu),為以后應用和設計計算機系統(tǒng)打下基礎。目前大家普遍采用的教材在部件設計中討論的方法主要是硬布線邏輯或微程序設計方法:硬布線邏輯運行速度高,但缺乏靈活性;微程序設計方法有一定的靈活性,但資源占用多,運行速度慢。盡管這兩種方法對于理解計算機組成原理不失為一種較好的選擇,但由于缺乏實際應用背景,學生學習興趣受到影響,教學效果也大打折扣,提高學生的動手能力、培養(yǎng)創(chuàng)新意識更是無從談起。
“匯編語言程序設計”課程也存在類似尷尬,討論以16位個人計算機為背景的匯編語言程序設計知識,適合入門和了解基本原理,但與“計算機組成原理”、“計算機系統(tǒng)結(jié)構(gòu)”課程一樣,由于缺乏實際應用背景,教學目標無法完全實現(xiàn)。隨著電子設計自動化(EDA)、系統(tǒng)編程(ISP)、片上系統(tǒng)(SOC)等技術(shù)的發(fā)展,32位個人計算機的應用已很成熟,多核64位計算機應用也將逐步成為主流。嵌入式系統(tǒng)設計需要較強的軟硬件知識綜合應用能力,因此在計算機硬件課程的教學中應加大相關新技術(shù)的比例,并根據(jù)實際及時調(diào)整教學內(nèi)容。國外許多知名高校本科專業(yè)的教學內(nèi)容已經(jīng)作了適時調(diào)整,如麻省理工學院非常注重學生的設計能力的培養(yǎng),為此專門開設了“計算機系統(tǒng)設計”課程,要求學生在實踐環(huán)節(jié)中自主設計ALU、單指令周期CPU、多指令周期CPU乃至流水線32位MipsCPU和Cache;斯坦福大學也有相似的課程和實驗環(huán)節(jié);加州大學伯克利分校和楊百翰大學在基于可編程邏輯的超級計算機研制方面也有大量成果。當前在國內(nèi),案例教學已被越來越多的人所接受,尤其是在一些法學、工商管理類高校已經(jīng)開始廣泛運用。案例教學法是一種動態(tài)的、開放的教學方法,目標是解決學生如何用更有效的方式獲得知識以提高應用能力的問題。案例教學法具有綜合性、交互性、啟發(fā)性、針對性和可操作性等多種特征,它的使用大大縮短了教學理論與實際應用之間的差距,同時對教師的教學觀念產(chǎn)生了重大的影響。鑒于計算機專業(yè)知識與實際應用結(jié)合緊密的特點,教學中尤其適合案例式教學。目前在國內(nèi)計算機課程的教學中,案例教學還處于一個起步階段,主要表現(xiàn)在:案例教學比例不夠,沒有形成完整的體系;案例數(shù)量不足,質(zhì)量欠缺;許多高校盡管重視案例教學的應用,但是在案例的搜集、整理與分析等方面相對滯后;案例陳舊,缺乏代表性等。
2以ISP技術(shù)為主線改革計算機專業(yè)硬件課程教學體系和教學內(nèi)容
計算機本科專業(yè)涉及的硬件教學課程按合理教學順序一般為“數(shù)字邏輯”、“匯編語言程序設計”、“計算機組成原理”、“計算機系統(tǒng)結(jié)構(gòu)”、“微機原理與接口技術(shù)”、“單片機”、“嵌入式系統(tǒng)”等,一些課程可以在時間上重疊,如“數(shù)字邏輯”、“匯編語言程序設計”等。由于ISP、EDA技術(shù)可以靈活地開發(fā)出具有自主知識產(chǎn)權(quán)的硬件產(chǎn)品,是目前工程實踐領域和芯片設計領域運用最廣泛也是最有應用前景的技術(shù),因此在計算機硬件課程的教學中應該把相關技術(shù)列為重要內(nèi)容,即以ISP、SOC技術(shù)為主線,使相關課程形成一個完整的體系,達到培養(yǎng)創(chuàng)新性人才的目的。為了實現(xiàn)這一目標,在“數(shù)字邏輯”課程中,應大幅增加可編程邏輯技術(shù)的比重,重點討論用EDA方法,利用ISP技術(shù)、SOC技術(shù)設計IP核的方法,使學生對相關技術(shù)的應用及發(fā)展趨勢有一個全面的理解,并具備基本的實踐能力;在“計算機組成原理”課程中增加計算機設計原理和實踐的內(nèi)容,也可考慮再單獨增加一門計算機設計課程以替代目前“計算機組成原理”課程設計,在該課程中重點討論如何采用EDA方法,利用ISP技術(shù)、SOC技術(shù)設計計算機各部件如CPU、Cache等,通過實際應用和實踐進一步加深對相關技術(shù)的理解和掌握。在“微機原理與接口技術(shù)”課程可以考慮以16位計算機應用知識入門,以討論32位計算機的應用為重點。相應的,作為“微機原理與接口技術(shù)”課程的先行課程,“匯編語言程序設計”課程也應把相應的內(nèi)容整體提升到32位,考慮到學習過程的先易后難,可以先介紹16位匯編語言程序設計知識作為入門,再對32位匯編語言程序設計相關內(nèi)容展開。
單片機系統(tǒng)本質(zhì)上也是嵌入式系統(tǒng),嵌入式系統(tǒng)是針對應用或用戶定制的完整、高效的計算機系統(tǒng),嵌入式系統(tǒng)設計需要較強的操作系統(tǒng)原理、應用程序設計和硬件設計方面知識的綜合應用能力,其別是硬件系統(tǒng)設計能力可以通過以上幾門硬件課程的系統(tǒng)學習逐步培養(yǎng),因此相關課程的教學內(nèi)容應注意銜接,同時遵循先易后難的原則,面向?qū)嶋H應用,以提高動手能力、增強創(chuàng)新意識為目的。針對實踐教學,目前相關課程的實驗教學的實驗項目及內(nèi)容固定,大多為驗證性實驗,實驗步驟程式化,許多同學按教學實驗計劃做完實驗,仍然無法充分理解課程的主要內(nèi)容,無法真正擁有教學大綱所要求的動手能力。更重要的是計算機技術(shù)一直處于高速發(fā)展中,高等院校的計算機教學理應不斷地適應這種要求,相關的實驗教學應適時地調(diào)整教學內(nèi)容。解決問題的一個好思路是利用ISP、SOC技術(shù)開發(fā)出一種內(nèi)容可定制的硬件課程教學實驗平臺,由于作為控制對象的電路是相同或相近的,可以設計為通用模塊,而實驗平臺控制部分則可以利用可編程邏輯改變,以適應不同的課程。如控制部分設計為基本CPU即可做“計算機組成原理”課程的相關實驗;控制部分設計為單片機即可做“單片機”課程的相關實驗;甚至控制部分可以設計為個人計算機CPU,配合有關的接口電路,即可做“微機原理與接口技術(shù)”課程的相關實驗等。在我院的計算機本科專業(yè)相關硬件課程教學實踐中,我們已作出了一些有益的探索,如我院“數(shù)字邏輯”教學大綱已在近年作過相應調(diào)整,EDA技術(shù)、可編程技術(shù)的理論和實踐教學內(nèi)容的比例從原來的20%增加到60%以上,經(jīng)過多年的建設,“數(shù)字邏輯”課程在今年被評定為“湖北省精品課程”;在“計算機組成原理”課程中引入利用ISP技術(shù)設計CPU軟核等教學和實踐內(nèi)容;“匯編語言程序設計”、“微機原理與接口技術(shù)”課程中也增加了32位計算機相關內(nèi)容的學習和討論,新的實驗設備可以進行32位的相關實驗等,這些安排增強了學生的學習興趣,學生學習的主動性也明顯提高了。
3采用案例教學法作為計算機專業(yè)硬件課程教學的主要方法
案例教學法是一種事半功倍的教學方法,在教學過程中圍繞事先精選的典型的、具有工程背景的實際案例進行討論,可以為同學們模擬實際應用的場景,獲得近似于實戰(zhàn)的經(jīng)驗。為完成設計目標,同學們自然會自己主動學習,在這一過程中掌握知識,并學會應用知識,提高解決問題的能力;也能通過用不同的途徑解決問題,培養(yǎng)創(chuàng)新意識。這樣教師在授課中可以把精力集中于教學內(nèi)容的總體把握上,而不需要過分在知識細節(jié)上消耗時間,提高了教學效率。案例教學法關鍵在于選擇合適的案例,案例首先必須有代表性和實時性,必須是實踐中的典型應用實例。在實踐中應用的幾率高,具有普遍意義,這樣的實例在教學過程中值得花費精力討論和設計,才是有意義的。同樣重要的是案例需具有實際工程背景,學生可以面對具體的實際問題和特定的環(huán)境,有針對性地通過自主學習和思考進行設計,培養(yǎng)實際解決問題的能力。案例還應該形成相對固定的案例集,并具備一定的開放性,應定期對案例集進行評估,剔除一些過時的案例,增加一些新的典型應用實例。這樣就保證了案例的典型性、實時性及工程背景。在教學實踐中,我們把案例教學法作為主要方法,并把案例分為4類:一是問題評論型,給出問題和解決問題的方案,讓學生去評價;二是分析實現(xiàn)型,不給出解決方案,要求學生討論分析以提出方案;三是實際模擬型,是指在教學過程中依據(jù)教學內(nèi)容,讓學生分別充當不同的角色,進行模擬性的實踐活動;四是發(fā)展開放型,通過案例發(fā)現(xiàn)新的理論生長點,討論相關理論的發(fā)展趨勢。我院在相關課堂教學中采用的部分案例如表1所示。在“數(shù)字邏輯”、“計算機組成原理”等課程的重點章節(jié)教學中,我們通過采用上述案例法,調(diào)動學生成為積極參與者,而不是消極被動的聽眾,在案例學習和討論中,鼓勵學生提出更多解決問題的辦法,在課堂上營造出積極發(fā)表意見和爭論的氣氛。這樣提高了學生的學習興趣,教學效果有明顯改善,學生的動手能力有了顯著增強。
4總結(jié)
為實現(xiàn)面向?qū)嶋H應用提高學生動手能力、增強創(chuàng)新意識、培養(yǎng)創(chuàng)新型人才、確定完整合理的計算機本科專業(yè)硬件理論教學和實踐教學體系的目的,我們提出了以ISP技術(shù)為主線的計算機專業(yè)硬件課程教學改革方案。它的主要內(nèi)容為兩方面:一是調(diào)整現(xiàn)有教學體系和教學內(nèi)容,如在“數(shù)字邏輯”、“計算機組成原理和系統(tǒng)結(jié)構(gòu)”、“嵌入式系統(tǒng)設計”等課程中以“數(shù)字邏輯”課程為先導,以ISP、SOC技術(shù)為主線貫穿于各相關課程教學過程中;在“匯編語言程序設計”、“微機原理與接口技術(shù)”等課程中把主要內(nèi)容全面提升到32位等。二是在教學中運用案例法,使學生成為教學活動的主體,形成學生自主學習、合作學習、研究性學習和探索性學習的開放型學習氛圍。充分發(fā)揮案例教學有利于提高學生分析問題和解決實際問題的能力、有利于促使學生學會學習、有利于促使學生學會溝通與合作的優(yōu)勢。實踐表明以ISP技術(shù)為主線的計算機專業(yè)硬件課程教學改革,符合國家高等質(zhì)量工程建設中培養(yǎng)創(chuàng)新性人才的規(guī)劃,有效地增強了學生的動手能力和創(chuàng)新意識。我們也意識到計算機工程教學是一個復雜的過程,牽涉到許多方面,我們將在實踐中探索教學規(guī)律,不斷提高教學水平,進一步改善教學效果。
關鍵詞:高效;空間;位;嵌入
中圖分類號:G623.58
C語言程序設計方法多種多樣,一般以根據(jù)實際情況選擇程序設計方法。現(xiàn)根據(jù)不同情況說明幾種不同的高效編程方法。
1.以空間換時間
計算機程序中最大的矛盾是空間和時間的矛盾,那么,從這個角度出發(fā)逆向思維來考慮程序的效率問題,我們就有了解決問題的第1招--以空間換時間。比如說字符串的賦值:
方法A:通常的辦法
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,"This is a example!!");
方法B:
const char string2[LEN] ="This is a example!";
char * cp;
cp = string2 ;
使用的時候可以直接用指針來操作。
從上面的例子可以看出,A和B的效率是不能比的。在同樣的存儲空間下,B直接使用指針就可以操作了,而A需要調(diào)用兩個字符函數(shù)才能完成。B的缺點在于靈活性沒有A好。在需要頻繁更改一個字符串內(nèi)容的時候,A具有更好的靈活性;如果采用方法B,則需要預存許多字符串,雖然占用了大量的內(nèi)存,但是獲得了程序執(zhí)行的高效率。
如果系統(tǒng)的實時性要求很高,內(nèi)存還有一些,那我推薦你使用該招數(shù)。該招數(shù)的變招--使用宏函數(shù)而不是函數(shù)。舉例如下:
方法C:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
int BIT_MASK(int __bf)
{
return ((1U
}
void SET_BITS(int __dst,
int __bf, int __val)
{
__dst = ((__dst) & ~(BIT_MASK(__bf))) |
/
(((__val)
& (BIT_MASK(__bf))))
}
SET_BITS(MCDR2, MCDR2_ADDRESS,RegisterNumber);
方法D:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(__bf)
(((1U
#define SET_BITS(__dst, __bf, __val)
/
((__dst) = ((__dst) & ~(BIT_MASK(__bf)))
| /
(((__val)
& (BIT_MASK(__bf))))
SET_BITS(MCDR2, MCDR2_ADDRESS,
RegisterNumber);
函數(shù)和宏函數(shù)的區(qū)別就在于,宏函數(shù)占用了大量的空間,而函數(shù)占用了時間。大家要知道的是,函數(shù)調(diào)用是要使用系統(tǒng)的棧來保存數(shù)據(jù)的,如果編譯器里有棧檢查選項,一般在函數(shù)的頭會嵌入一些匯編語句對當前棧進行檢查;同時,CPU也要在函數(shù)調(diào)用時保存和恢復當前的現(xiàn)場,進行壓棧和彈棧操作,所以,函數(shù)調(diào)用需要一些CPU時間。
而宏函數(shù)不存在這個問題。宏函數(shù)僅僅作為預先寫好的代碼嵌入到當前程序,不會產(chǎn)生函數(shù)調(diào)用,所以僅僅是占用了空間,在頻繁調(diào)用同一個宏函數(shù)的時候,該現(xiàn)象尤其突出。
D方法是我看到的最好的置位操作函數(shù),是ARM公司源碼的一部分,在短短的三行內(nèi)實現(xiàn)了很多功能,幾乎涵蓋了所有的位操作功能。C方法是其變體,其中滋味還需大家仔細體會。
2.數(shù)學方法解決問題
現(xiàn)在我們演繹高效C語言編寫的第二招--采用數(shù)學方法來解決問題。數(shù)學是計算機之母,沒有數(shù)學的依據(jù)和基礎,就沒有計算機的發(fā)展,所以在編寫程序的時候,采用一些數(shù)學方法會對程序的執(zhí)行效率有數(shù)量級的提高。
3.使用位操作
實現(xiàn)高效的C語言編寫的第三招--使用位操作。減少除法和取模的運算。在計算機程序中數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用"位運算"來完成所有的運算和操作。一般的位操作是用來控制硬件的,或者做數(shù)據(jù)變換使用,但是,靈活的位操作可以有效地提高程序運行的效率。
運用這招需要注意的是,因為CPU的不同而產(chǎn)生的問題。比如說,在PC上用這招編寫的程序,并在PC上調(diào)試通過,在移植到一個16位機平臺上的時候,可能會產(chǎn)生代碼隱患。所以只有在一定技術(shù)進階的基礎下才可以使用這招。
4.匯編嵌入
高效C語言編程的必殺技,第四招--嵌入?yún)R編。"在熟悉匯編語言的人眼里,C語言編寫的程序都是垃圾"。這種說法雖然偏激了一些,但是卻有它的道理。匯編語言是效率最高的計算機語言,但是,不可能靠著它來寫一個操作系統(tǒng)吧?所以,為了獲得程序的高效率,我們只好采用變通的方法--嵌入?yún)R編,混合編程。
建議不輕易使用此種方法,因為使用了嵌入?yún)R編,便限制了程序的可移植性,使程序在不同平臺移植的過程中,存在安全隱患!同時此種方法也與現(xiàn)代軟件工程的思想相違背,只有在迫不得已的情況下才可以采用。
參考文獻:
[1].《C語言趣味程序百例精解》,陳朔鷹 陳英主編,北京理工大學出版社,1996年。
[2].《Turbo C 2.0實用大全》,常玉龍等編寫,北京航空航天大學出版社,1994年9月。