真人一对一直播,chinese极品人妻videos,青草社区,亚洲影院丰满少妇中文字幕无码

0
首頁 精品范文 匯編程序

匯編程序

時間:2023-05-30 09:27:09

開篇:寫作不僅是一種記錄,更是一種創造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇匯編程序,希望這些內容能成為您創作過程中的良師益友,陪伴您不斷探索和進步。

第1篇

一、序言

近年來,隨著C語言的進一步推廣使用,絕大多數的工程師都傾向于使用C語言進行單片機系統開發,匯編語言由于可讀性、通用性、可移植性差的原因,很難滿足產品開發的需求。但是匯編語言具有執行效率高、占用內存空間小等特點,在某些應用領域還是具有無可替代的作用。

本文結合Keil μVision2程序開發流程,描述了51單片機匯編程序多文件編譯的實現方法。通過多文件編譯的使用,大大提高了匯編程序代碼的可讀性、可擴展性,同時也很大程度地提高程序代碼的執行效率以及內存空間的使用率,避免內存空間的浪費。

二、Keil μVision2程序開發流程簡介

Keil μVision2是美國Keil Software公司出品的51系列兼容單片機軟件集成開發環境,該軟件提供宏匯編器、鏈接/定位器、庫管理器、調試器以及目標文件轉換器等工具,是51單片機系統開發的首選工具。

Keil μVision2集成開發環境的編譯流程如下:首先宏匯編器對匯編源程序文件進行編譯,生成擴展名為.OBJ的目標文件和擴展名為.LST的列表文件,緊接著鏈接/定位器將所有的.OBJ文件進行絕對地址分配,鏈接生成包含絕對地址的目標文件和擴展名為.M51的地址文件,最后由目標文件轉換器生成可用于編程器燒寫、擴展名為.HEX的可執行文件。

三、匯編程序多文件編譯實現

在Keil μVision2集成開發環境下,我們可以根據不同的硬件模塊、功能模塊分開編寫應用子程序,進行模塊化管理,實現多文件編譯,這樣就可以大大提高匯編程序代碼的可讀性、可擴展性。以下首先對段和模塊的概念進行描述。

一個段可以是一塊程序代碼或者是一個數據塊。根據其地址空間是否可以被鏈接/定位器更改,段可以分為可定位段和絕對地址段。在定義可重定位段的時候需要對其段名、類型及其屬性進行定義。一個段可以分在不同的程序模塊中,只要具有相同的段名,在編譯過程中鏈接/定位器會把它們合并到一起。在定義絕對地址段的時候直接人為分配絕對地址,鏈接/定位器不能對改地址進行更改。絕對地址段沒有段名,也不能給其他段結合。

模塊是一個可以被單獨編譯的代碼單元,可以包含一個或多個段或者部分段,一個模塊既可以是單個文本文件,也可以通過INCLUDE指令把幾個文本文件合并在一起。在程序編譯過程中,匯編器會把一個模塊編譯為一個目標文件,也就是一個模塊對應一個.OBJ文件。

根據以上對段和模塊的描述,匯編程序的多文件編譯可以通過以下三個方法來實現:

1、通過INCLUDE指令合并源文件

在代碼編寫時,通過INCLUDE指令可以將一個源文件插入到當前源文件中,這樣匯編器在編譯的時候就會將INCLUDE指令之后的文件合并到當前文件進行編譯,生成一個擴展名為.OBJ的目標文件。INCLUDE指令的格式如下:

$ INCLUDE (文件名)

通過該方式實現多文件編譯時,插入的源文件既可以是擴展名為.ASM的匯編源程序文件,也可以是擴展名為.INC的包含文件。注意在被包含的源文件結尾不能有END指令,否則編譯會停止運行。

2、通過絕對地址段實現多文件編譯

Keil μVision2中提供以下定義絕對地址段的指令,通過這些指令可以定義代碼段和各種數據段,并指定其絕對地址。

由于絕對地址段在定義的時候對地址進行了分配,鏈接/定位器不能夠對其地址進行更改,因此很容易造成地址重疊或者內存空間浪費,而且在后續對程序進行維護、升級的時候很有可能需要重新對地址進行分配,非常不利于程序的擴展和維護。因此絕對地址段通常是用在某些特定的場合,例如確定中斷向量的入口地址、數據存儲空間等。

3、通過可重定位段實現多文件編譯

在Keil μVision2中,通過SEGMENT指令即可定義可重定位段。定義可重定位段時必須指定段的名稱和存儲類型,其格式如下:

四、總結

通過以上三種方式,均可以實現多文件編譯,但是在實際使用過程中,INCLUDE指令通常用于包含特殊功能寄存器的定義等;絕對地址段則通常用于確定中斷向量的入口地址、數據存儲空間;而可重定位段的方式則廣泛地用于各種代碼段或數據段的定義。

通過多文件編譯的方式,解決了單文件編譯會導致程序文件過于臃腫、可讀性差、不便于維護等缺點,大大提高匯編程序代碼的可讀性以及可維護性。

參考文獻

[1] Keil Software. A51/AX51/A251 Macro Assembler and Utilities.2001.

第2篇

一、C語言與匯編語言的混合編程方法分析

混合編程方法包括C語言調用匯編語言子程序、匯編語言調用C語言子程序和C語言程序嵌入匯編語言三種。第一,C語言調用匯編語言子程序需要遵循以下規則。一是根據參數順序,依據反序順序將參數壓入堆棧中。二是依據參數的值進行傳遞;三是使用“EXTERN”對函數顯示進行說明,函數名使用下劃線格式的8個字符以內的名字命名;四是對代碼段加以說明,并使用“—TEXT”作為代碼段命名原則。五是匯編程序的參數取C程序的參數;六是匯編程序需要兼顧保護寄存器。基于以上6個原則,C語言與匯編語言混合編程時,匯編過程需要遵守規定的開頭及結尾格式。第二,匯編語言調用C語言子程序則不需要改變匯編語言主程序和子程序的格式,只需主程序和子程序的格式保持一致,再開始前使用“EXTREN函數名”用于表明身份,表示該函屬于調用C語言子程序的外部函數。第三,C語言程序嵌入匯編語言包括兩種:一是C程序調用匯編子程序模塊和C程序嵌入匯編指令兩種。C程序調用會匯編子程序模塊需根據主程序和模塊編寫語言確定,如果主程序為C語言、模塊為匯編語言,則需要使用C程序調用匯編子模塊。C程序嵌入匯編指令主要用于處理C語言無法控制硬件的情況。例如修改中斷標志寄存器、重復使用某種功能可采用C語言嵌入匯編指令的方式實現。

二、C語言與匯編語言連接的關鍵問題要實現

C語言與匯編語言之間的連接還需要解決參數關系、確定調用關系和模塊連接三個問題。參數關系是混合編程過程中必須解決的問題,多數程序員均采用堆棧方式解決參數傳遞問題,具體操作為:以匯編語言中的BP作為機制寄存器,以反序多為調用順序,將C語言中的參數壓入堆棧中,且BP根據參數加入相應的偏移量即可實現參數使用。而確定調用關系則需要說明要調用的函數或過程,并確定調用及其調用關系。外部模型可調用被調用的函數或被調用過程,調用程序需說明被引用的外部模塊的名稱。實現匯編程序與C程序模塊連接需要保證不同語言模塊的存儲模式相同以及遵守C兼容的函數及變量命名約定。

三、結語

隨著計算機技術的提高及計算及應用范圍擴大,許多領域的控制工作都得到極大的簡化,而且C語言這一高級程序設計語言的應用也愈加廣泛,豐富了計算機軟件的功能及內容。然而,信息技術始終處于不斷發展狀態,人們對計算機軟件編程的要求也在逐漸提高,程序員仍需要深入了解C語言的特性,強化C語言運用,利用C語言實現計算機軟件的多功能,不斷創新和開發信的軟件。最后,程序員還需要合理運用C語言和匯編語言進行綜合編程,簡化軟件編寫過程,提高軟件使用效率。

作者:芮素文單位:安徽國防科技職業學院

第3篇

關鍵詞:匯編語言源程序;匯編;Debug 調試

匯編語言作為一種介于機器語言和高級語言之間的程序設計語言,有其獨有的特點和應用場合。用匯編語言編寫的解決應用問題的程序稱作匯編語言源程序;將匯編語言源程序翻譯成機器語言程序的軟件稱作匯編程序;將匯編語言源程序翻譯成機器語言程序的過程稱作匯編。匯編語言源程序上機運行需要MS-DOS操作系統的支持,也可運行在Windows 98以上的MS-DOS環境中。

二、匯編源程序

用編輯軟件建立的源程序.asm文件,必須經過匯編才能產生.obj文件。

本步驟最需要注意的問題就是所用的masm匯編程序和編輯好的匯編語言源程序的路徑,只要不在默認目錄下的都要輸入他們的實際路徑,為此需鍵入:”e:\masm\masm 123”,因為匯編語言源程序123.asm已經保存在默認目錄C:\Documents and Settings\Administrator下,就不用輸入詳細路徑,而匯編程序masm不在默認目錄下,故需要輸入該程序所在的詳細路徑e:\masm\masm,如下圖所示。

以上信息中方括中為該項提示的缺省回答值,冒號后面等待用戶輸入信息,若不改變缺省值則直接按回車鍵。

匯編后生成以下幾個文件:

(1).OBJ文件是匯編產生的目標代碼文件,當源程序中無語法錯誤時,則在默認目錄下自動存入一個.OBJ文件,供下一步連接用。若源程序有語法錯誤時,會出現錯誤信息提示,如上圖所示。

(2).LST文件是列表文件,它將源程序中各語句及其對應的目標代碼和符號表以清單方式列出,對調試程序有幫助。

(3).CRF文件(交叉引用文件),交叉引用.CRF文件給出了源程序中定義的符號引用情況,按字母順序排列。

三、 連接目標程序

匯編產生的.OBJ文件,組成該文件所有目標代碼的地址都是浮動的,機器不能執行。必須用連接程序LINK對其進行連接定位,產生.EXE可執行文件,方可運行。該步驟和上一步有同樣需要注意的路徑問題,輸入連接程序LINK的實際路徑,需要連接的.OBJ文件在默認目錄下,可不用輸入路徑。

連接后生成兩種文件:.EXE和.MAP

(1).EXE文件是可執行文件,若采用方括號中默認的名字,直接按回車鍵,否則需重新輸入一文件名。若連接過程中無錯誤,則自動在當前默認目錄下生成.EXE文件。若有錯誤,則會給出錯誤信息提示,這時必須重新修改源程序,再匯編、連接。

(2).MAP是連接映像文件,.LIB庫文件,連接程序詢問是否使用某種庫文件,不需使用庫文件直接按回車鍵。

四、運行程序

連接后生成的.EXE文件存放在當前的默認目錄下,在DOS環境下直接鍵入文件名即可運行。

結論

總體上說,要掌握匯編語言源程序上機運行的操作過程,還是應該理解每一步驟的作用及原理,理解后就知道為什么要這樣操作,該注意哪些問題,發生錯誤該怎樣改正。因此匯編語言的學習不只是理解它全部的指令含義,還要理解它上機運行的原理。通過學習匯編語言,能夠加深對計算機原理和操作系統等課程的理解;能夠感知、體會和理解機器的邏輯功能,也為理解各種軟件系統的原理,打下技術理論基礎。

參考文獻

第4篇

關鍵詞:匯編語言程序設計; 教學方法; 內聯編程

1課程的現狀

匯編語言不同于其它高級語言,必須要求編程人員有一定的硬件基礎,如對CPU的結構、CPU與存儲器等部件的數據傳送過程必須要有基本的了解,這樣才能學好這門課程。在教學過程中,我們發現學生對高級語言編程學習積極性高,對匯編語言課程缺乏興趣,因為課程本身指令復雜,規定繁多,再加上學習匯編指令前對CPU的相關工作過程理解不透,導致學生厭學,又由于本課程面對的低年級學生只有高級語言的基礎,習慣于高級語言的自然表達,初次接觸計算機硬件知識心理上有恐懼感,更難以適應繁雜的低級語言。

針對本課程的特點,對教學內容、環節、過程等進行了精心設計,下面就教學方法的設計、實踐教學方法、課程考核形式等方面進行的一系列改革進行詳細探討。

2教學方法設計改革

為了避免學生因指令復雜,規定繁多、難度大而對該課程產生畏懼的學習心理,教師有必要對教學內容進行合理組織,對教學過程進行精心的設計。

2.1利用FLASH技術,使教學難點容易理解

在多年的教學過程中,我發現學生在學習CPU結構這章節中,對介紹的CPU由哪些寄存器(名稱、大小)構成,各個寄存器的含義,用途,CPU與存儲器等部件的數據傳送過程,會覺得很抽象,多數同學都是采用死記硬背的方式,這章節是第二章節的內容,也是能否學好該課程關鍵的一章,如果理解不深,這無疑為后續的學習,特別是尋址方式的學習埋下了隱患。

針對這個問題,教師有必要對教學過程進行精心的設計。

在這章節中我們利用FLASH技術,把各種尋址方式下傳送指令的CPU與存儲器等部件的數據傳送過程以動畫形式展現給學生,使得復雜,抽象的過程變得直觀,學生理解比較容易,也加深了對尋址方式的記憶。

2.2對比法教學

目前計算機專業的課程設置中,《匯編程序語言的程序設計》課程通常是學習完C語言課程之后開始學習的。所以在教學中可以采用對比法來講解課程,對某些語法知識點和程序設計過程我們可以以C語言和匯編語言對應分析。

例如在介紹寄存器時,由于在一般的c語言程序中并沒有直接使用到寄存器。因此,我們使用vC++6.0環境下的調試工具顯示一個c語言程序及其對應的機器碼,讓學生看到編寫匯編程序寄存器的用途,加深了學生對匯編語言程序的理解。

int m=5,n=6,c;

004010E8 mov dword ptr [ebp-4],5

004010EF mov dword ptr [ebp-8],6

c=m+n;

004010F6 mov eax,dword ptr [ebp-4]

004010F9 add eax,dword ptr [ebp-8]

004010FC mov dword ptr [ebp-0Ch],eax

在介紹語法知識時,比如變量的定義:

C語言中的變量定義形式如下:

int c1,c2=0;

匯編語言的變量定義形式如下:

cl DW ?

c2 DW 0 轉貼于

2.3抽象概念的比喻教學法

在對段地址和偏移地址的講解過程中,可以采用比喻法,把操作數比喻成學生,把教室的房間號比喻成段地址,教室內每個座位編個號,編號就是偏移地址,要想到教室把某個學生找到,就要找到相應的教室號,再到對應的座位號找到這個學生,同理,要想把主存中的操作數找到就要找到段地址和相應的偏移地址,另外要讓學生知道每個教室里的座位號都是從0號開始編號的,也就是每個段里的偏移地址如果不特別指定,也是從0號開始編號的。

3實踐教學改革

3.1增強實驗環節,做一些實際項目

程序設計對于大多數的初學者來說有一定的難度。對于給定的一個實驗題目,許多學生往往感到無從下手。目前的上機實驗時間往往很短,常常是學生才剛剛有點入門,實驗環節就結束了;且課外實踐環節幾乎沒有,導致學生即使課內學的再好也不會應用。

在實驗設計方面可以先把一些經典的程序提供給學生,例如分支結構的設計、循環結構的設計等,讓學生在寫出C語言程序之后再設計匯編程序,找出兩者編程思維的區別。這樣通過一段時間的經驗積累,就能夠編寫比較復雜的的程序,由于上機時間有限,可以每次實驗課之后布置一些題目供學生選擇思考,讓學生課外分組來設計這些程序,題目的類型可以是研討型的讓學生從更多的角度去思考上機實驗過的題目,編寫出不同的程序;另一種為編程型,

例如可以設置這2道題目,音樂小鍵盤、貪吃蛇游戲等,以加強同學們的編程能力的訓練。

3.2采用與高級語言混合編程

目前越來越多的場合要使用匯編語言和高級語言進行混合編程,因此在教學時應強調匯編語言和C/C++的混合編程,并且這樣也可以為今后嵌入式系統軟件開發的學習打下堅實的軟硬件基礎。

在實驗課中可以借助 Visual C++開發工具,采用內聯匯編的方式,在 C/C++源程序中嵌入匯編指令序列完成一定的功能,并讓學生設置斷點然后跟蹤執行,同時注意觀察寄存器的內容和變量的值。這樣可以一方面讓同學們熟練掌握兩種語言的切換使用,另一方面讓他們感受到兩種語言各有特點。例如可以利用匯編語言處理高級語言中不方便處理的一些問題。

4課程考核形式改革

因為“匯編語言程序設計”是實踐性很強的一門課程,所以實驗課成績應該在總成績中占有相當大的比重。目前大多數高校的匯編語言課程的實驗課成績只占很小的比重,即理論知識往往占課程期末考核總成績的70%~80%,這樣往往會導致學生不得不將大量的精力放在理論知識的學習中,結果只會造就大批的應試高手。在教學中,我們遇到過有的學生考試試卷能考90分以上,卻連最基本的計算機操作都不能動手。今后這門課程的考核,實驗課成績應該提高到占總成績的1/2。老師在實驗中應該營造出互動氣氛,檢查每個學生的完成情況同時做好記錄,根據學生的實際動手情況給出他們的平時實驗成績,而不是只依據交上來的實驗報告,這樣也能杜絕抄襲之風。

5結束語

通過教學改革的實踐,在一定程度上提高了他們對本課程的學習積極性,又降低了學習難度。良好的教學效果是永遠追求的目標,在今后的教學中,我們還需要不斷進行探索、研究和嘗試,不斷更新觀念,發現自身教學過程中的問題,找到解決辦法,提高教學效果。

參考文獻

[1] 王成耀.80x86匯編語言程序設計[M].北京:人民郵電出版社,2008(第2版).

[2] 卜登立,彭嵩松,唐衛東,龍侃.“匯編語言程序設計”課程教學改革研究與探討[J].井岡山學院學報,2009,30(10):124-127.

第5篇

【關鍵詞】FORTH 匯編語言 中斷程序

1 引言

匯編語言是人和計算機溝通的最直接的方式,它描述了機器最終所要執行的指令序列,所以匯編語言一直是計算機學科必學的一門基礎課程。通過這門課的學習既能獲得底層編程的體驗,又能深刻理解機器運行程序的機理。FORTH是一種與眾不同的計算機程序設計語言,采用自底向上的構造方式,用匯編語言編寫核心單詞,實現內部數據結構和解釋/編譯機制,構造最小的系統,然后將該系統運行在宿主機上,進而編譯的其它高層單詞,形成一個完整的系統。

本文是在研究了FORTH的自生成技術的基礎上,自定義了一套匯編語言語法,并且構造出將自定義匯編語言轉換為CPU機器碼的編譯器,講解了自定義匯編語言的基本使用方法,最后以中斷程序為例,介紹了自定義FORTH匯編程序的實現方式。

2 FORTH匯編語言和編譯器的實現方法

基本的FORTH平臺內不含產生機器碼的匯編語言編譯器,只是將一個用FORTH語言寫的匯編語言編譯器的源代碼作為附件。一般我們可以使用這個編譯器,但也可以自己按照自己的習慣構造自己的語法和編譯器。

實現編譯器,首先要制訂語言規范。由于FORTH匯編語言并沒有權威的規范,甚至有些要開發的目標芯片就還沒有匯編語言標準可以借鑒,因此程序開發者完全可以編寫自己的編譯器和創造自己的規范。FORTH匯編語言的語法規范是模仿常用的匯編語言,只是將表達式寫成“逆波蘭”形式,即將操作符寫在操作數后面。以8086匯編為例,將AX減去BX的內容,結果在AX中,標準的匯編語言為:SUB AX, BX ,在FORTH匯編語言規范中可以模仿標準的匯編語言規定為:AX, BX SUB,也可以采用這種寫法:BX AX SUB,,不僅逗號移到了操作數那里,而且目的操作數也移到了右面。雖然FORTH匯編語言規范存在這種任意性,但如果存在標準的匯編語言,除了將操作符寫在右面,還是盡量保持標準的風格,這樣容易和別人交流。

實現FORTH匯編編譯器,主要利用FORTH字“C,”、“,”和“Here”,它們分別是向程序區依次放一個字節的二進制指令、兩個字節的二進制指令和給出存放下一個指令的地址。

以8086為例,無操作數的中斷返回指令IRET,可以這樣實現:

語法: IRET

實現: : IRET CF C, ; //將IRET的機器碼CF一個字節放到當前的指令流中

單操作數的跳轉指令JMP,可以這樣實現:

語法: LLLL JMP //LLLL定義了轉跳的地址

實現: : JMP E8 C, ,;

同樣上面實現的FORTH含義是將JPM的機器碼E8一個字節放到當前的指令流中,然后再把已經在堆棧中的要跳轉的地址作為16位偏移放到機器碼E8之后,形成完整的跳轉指令。

通常每個FORTH軟件平臺都有這個平臺的匯編語言規范和編譯器,但是如果要生成異構的FORTH系統,重新制定新CPU的匯編語言規范和編譯器就是必須要完成的任務。

2.1目標代碼的存取

由于一般FORTH目標系統的核心規模較小,16位的系統不超過64KB,32位的系統也用不完內存空間,因此可以直接在宿主機FORTH系統管理的內存中劃出一塊高內存區域用于目標代碼的存取。假如P!和P@是原內存的寫入和讀取字,目標代碼區域的起點是C000,則目標代碼的存取字可以簡單的定義為下面的算法:

C000 CONSTANT Origin

// 定義常數 Origin,它的值是目標代碼區域的起點

: ! Origin + P! ; : @ Origin + P@ ; // 定義目標區的數據存取字

同樣也可以產生按字節的存取字C!和C@。

2.2 機器碼寫入

匯編語言所產生目標機的機器碼是順序存放的,其中跳轉指令是代碼的當前位置參考計算的,因此可以設置一個當前代碼地址指針CP實現:

Variable CP : Here CP @ ; // Here字給出下一個機器碼存放的地址

: C, Here C! CP @ 1+ CP ! ; // 放一個字節的機器碼到目標區

: , Here ! CP @ 2+ CP ! ; // 放一個16位字的機器碼到目標區

有了這些FORTH字,可以不用助記符和匯編,直接把二進制代碼一個字節一個字節地生成目標碼。

2.3 向前跳轉地址

第6篇

關鍵詞:匯編語言程序設計;教學改進

中圖分類號: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 匯編語言程序設計課程教學現狀

匯編語言程序設計作為一門計算機專業的課程,其存在的合理性在近年受到爭議。有些人認為,匯編語言作為一種低級語言,指令繁多,難以掌握。另外,編程效率也不高,一個高級語言用一條語句實現的功能,在匯編語言中需要很多條指令才能實現。此外,匯編語言在時間上和空間上的優勢由于高速CPU和大容量存儲器的出現,也變得意義不大。

我認為學習匯編語言仍然具有重要意義。可以歸納如下:

1) 可以比較深入了解計算機硬件的底層工作原理,例如:CPU的工作模式,寄存器的概念,內存的尋址方式,中斷的工作原理等。

2) 熟悉各種數據表示方法。如各種數制的轉化,各種類型的數據在內存中的存儲方式。學生在系統學習匯編語言程序設計這門課程后,對二進制,十進制以及十六進制相互間的轉換應該非常熟練。對數據在內存中兩種排列方式即大端方式(Big Endian,低地址存放高位字節)與小端方式(Little Endian,低地址存放低位字節)有清晰的理解。而這些相關的概念的牢固掌握對高級語言中的數據類型以及計算機網絡編程的學習具有很大的幫助。

3) 通過匯編語言編程學習,可以促進對高級編程語言相關概念的理解。高級語言在編譯的時候,一般都是先生成匯編代碼,然后再生成的二進制代碼。所以,通過對比分析匯編代碼與高級語言代碼的實現方式,對程序的執行效率,數據在內存中存放方式,堆棧的概念,函數的調用及參數傳遞的方式等都會有進一步的了解。

在教學中,我也遇到一些問題。一方面就是學生的積極性不高。主要原因包括:指令很多,難以記憶。對于幾個大類的指令,如果每次課上一類,學生課后如果不進行主動復習,往往到下一次課的時候,就會忘記前面所學的內容或者發生混淆。另外,在學習匯編課程之前,他們已經學過一門高級語言,如C/C++等,匯編語言的學習方式與高級語言的學習方式有所不同,高級語言比較容易上機練習,也容易對程序運行結果驗證,對于開發實用軟件也相對容易,所以學生的興趣比較大。而匯編語言一方面涉及到底層的硬件概念,比較難以理解,另一方面上機也比較困難,可以這么說,如果按照課本的順序講課,要到差不多講完課,學生才可以上機完成一個功能比較完整的程序。

2 促進學生對知識的掌握

要解決這些問題,我認為要在學生的知識掌握方式以及學習興趣的培養上下功夫。對于知識的掌握,除了每次新課內容講完后,精心給學生布置作業習題之外。還應該注意到由于匯編語言的指令及相關的知識點很多,對于剛接觸這門課程的學生一開始往往不大適應,容易混淆前面學過的內容,所以教師及時對所學過知識點進行比較和總結就很有必要。此外還應該定期對學生的學習效果進行檢測,從過去的教學經驗看,匯編語言這門課程是學生比較容易與教師的教學進度脫離的一門課程,不少學生在一開始由于在掌握知識遇到困難,問題越積越多,最終可能放棄聽課。在檢測的方法上,可以借助網上考試系統。教師可以自主出題,也可以讓系統自動出題。通過分析學生的測試結果,教師可以及時調整教學進度,學生也會有一定的學習壓力,使他們花更多時間查補缺漏的知識。

程序設計學習的最佳方法就是上機實踐。匯編語言上機練習跟高級語言的上機練習相比,對于學生來說比較困難。一方面是由于一個完整的匯編程序涉及的知識點很多,而教材往往按知識點分類進行編排。所以學生要想在剛開始學習階段,就編出完整的程序有一定的難度。另一方面,匯編程序的運行結果較難在屏幕上輸出,匯編語言只有字符與字符串的輸入輸出,對于一道簡單的算術運算題目,其結果的輸出都要通過一大段的轉換程序來實現。對于第一個問題,教師可以對教材內容進行選講,把實驗所涉及到的知識點先進行講解。對于第二個問題, 我認為應該重點培養學生熟練使用調試工具的能力,通過掌握調試工具如DEBUG,CV等的使用,一方面學生可以直接觀察程序的運行結果,另一方面,對于程序的邏輯錯誤也可以進行跟蹤、分析以及解決。此外,由于匯編語言作為一種低級語言,編程都由一條條指令進行構造,所以相對繁瑣,應盡早讓學生應用模塊化思路,掌握子程序及宏的使用方法。這樣把一些常用功能做成模塊,如輸入輸出功能,以后學生在編程的時候就可以直接調用這些模塊,從而專注于實驗的其它方面。

3 提高學生的學習積極性

對于如何提高學生的學習興趣,我認為主要讓學生意識到匯編語言的作用。一方面可以引入一些接口技術相關內容,使學生熟練掌握中斷的概念以及I/O指令,然后上機編寫中斷程序,在中斷控制器(8259A)進行驗證,由于這些實驗有按鍵輸入,有屏幕輸出,還能直接看到程序控制設備的效果,所以學生興趣會比較大。此外,教師也可以適當拓展一些知識,如嵌入式編程相關概念,有興趣的同學可以在課后自主進行學習。另外,由于不少學生對硬盤相關的問題感興趣,比如硬盤數據的存放方式,數據的修復等。可以引導學生對這些問題進行思考,然后通過匯編語言提供的I/O指令和中斷子功能,編程實現對硬盤的MBR,文件分配表等數據結構的讀取,備份,修復等功能。教師通過布置一些學生比較感興趣的課外作業,并適當提供協助,往往能提高學生的學習積極性。

另外,在匯編語言的學習過程中,教師應該有意識引導學生將匯編語言與高級語言的各個對應的部分進行比較。學生在學習匯編語言之前,通常已經學過一門高級語言,如C/C++等。高級語言在編譯的時候,一般是先轉換成匯編代碼,所以它們具有相通性。大部分學生編寫應用程序的時候是用高級語言,所以通過比較分析高級語言與低級語言在數據定義,程序流程控制,函數的定義及調用等的對應部分內容,對于學生更好的使用高級語言編寫程序是很有幫助的。比如:匯編語言里有分段的概念,一般把變量定義到數據段,把代碼定義的代碼段。而C語言是把數據與代碼都定義在一起,那么C語言編寫的程序在編譯成可執行文件后,它的全局變量,局部變量的空間是如何分配的。另外,對于動態內存分配,堆與棧的區別在哪里。還有函數的定義與調用,參數的傳遞順序是如何的?這些疑問,都可以讓學生編寫簡單的C語言程序,生成可執行文件后,然后通過調試工具進行反匯編進行分析。此外,在利用VC++,Dephi等IDE開發工具進行程序編寫時,都會用到里面的調試功能。基本上調試功能都會包括反匯編與內存查看的功能,教師可以引導學生進行這方面的訓練,使他們在以后編程時能熟練應用這個工具解決一些疑難問題,例如:內存非法訪問,指針的非法引用等。

4 Win32平臺下的匯編語言教學思考

目前很多高校在匯編程序設計教學中講解的是8088/8086 CPU實模式環境,實際上是虛擬8086模式,因為真正的實模式工作DOS下,而現在匯編語言實驗環境都是在windows 2000以上。由于現在大部分CPU都是32位以上,并且是工作上保護模式之上,此外這些CPU的寄存器類型以及尋址方式都已經發生較大變化。所以教師有必要對實模式與保護模式在邏輯地址轉化為物理地址的方式的差異,還有16位與32位的指令在用法的不同點進行重點講解。因為匯編語言現在的實際應用基本上采用工作于保護模式的Win32平臺,在Windows操作系統控制下,匯編語言雖然不能再直接存取硬件,但是能通過調用系統提供的API函數完成各種功能。其實這里的API函數當于DOS下的中斷調用,但是Window API函數無論從數量上、功能上還是易用性上都大大超過了DOS或BIOS的中斷調用功能。所以現在在Win32平臺下,匯編語言就像高級語言一樣,可以方便的開發各種Windows應用程序。有些教師認為,既然在實模式講解匯編語言很少涉及實用性,那就應該直接遷移到Win32匯編平臺,講解用匯編語言開發的Windows應用程序設計實例,從而提高學生積極性。我認為如果采用這種教學方法,可能會存在以下問題:首先由于上課時間有限,學生需要大量的時間才能熟練掌握各類指令,匯編語言的語法,程序結構等方面的知識。如果過多涉及Windows程序設計實例,對于不熟悉Windows編程機制的學生的來說,又多了一個不小的學習負擔,這樣子反而影響了匯編語言基礎知識的掌握。另外,DOS下的實模式與Window下的保護模式下的編程在本質上并無很大的區別,只要學生熟練掌握各類指令用法,理解16位與32位的指令及尋址方式的區別,邏輯地址與物理地址轉換機制等知識,他們就可以通過自主學習,較容易的掌握用匯編語言進行Win32應用程序的開發。對于教師,除了幫學生打好匯編語言的基礎,可以適當以課外作業的形式,引入一些匯編語言在不同應用領域的簡單實例,如加密與解密,軟件的逆向工程等,這些課外作業的完成對學生匯編語言的應用能力的提高將會有不小的幫助。

5 結束語

匯編語言難教難學是教師與學生的共識,但是作為計算機科學中一門低級程序設計語言,通過對它的良好掌握,確實可以促進對計算機軟硬件底層的了解,而這又能促進編程能力的提高。作為教師,在教學中應該不斷嘗新的教學方法,不斷積累經驗,只有這樣,才能把這門課上好。

參考文獻:

第7篇

    1.1從知識點講授到以系統設計為主線的教學改革

    我國高校在2世紀8年代初開始在少數高校開設單片機課程,面向電子和計算機專業高年級本科生和研究生,教材內容基本是單片機生產商提供的技術手冊、匯編程序設計和計算機原理與接口技術的綜合體。目前單片機教材雖然較多,但基本延續了這種傳統的教學思路,即以單片機的知識點為主線進行單元技術教學。隨著單片機教學在各層次學校的廣泛普及,這種教學思路顯現了明顯的不適應。系統設計性內容缺失和細節內容深度不夠,使一般學生在實際應用過程中仍然會遇到許多迷茫的問題。目前單片機基礎課教材的一個普遍性的問題是教學集中在分散的各個點,而對單片機系統整體結構性考慮不夠;重在局部和單元模塊,缺乏組織成項目的考慮。這種問題嚴重地體現在系統軟件設計中,一般學生會做例題和作業,不會設計解決實際任務的系統軟件。因此,單片機基礎課程教學改革的一個重點就是從知識點講授到以系統設計為主線,基于課程整體性并結合項目系統整體性考慮實施單元教學,重點提升學生系統性、綜合性設計能力。

    1.2單片機與其它課程教學形成良性互動

    在目前課程體系中,考慮到知識銜接關系,單片機課程在模擬電子技術、數字電路、計算機組成(微機原理與接口)、匯編程序設計等課程之后,一般安排在第6學期。這個安排的問題是學生實際綜合應用及拓展學習的時間較短。這在單片機進入我國高校的早期階段僅高端學生學習的情況下是合理的,在目前單片機普及教學情況下,作為工具和重要的學科基礎課,單片機課程應盡早讓學生掌握,對其熟練和提高系統設計能力、提高學習興趣、結合和促進其它課程學習將產生良好作用。單片機基礎課程涉及到的模擬電子技術、數字電路等知識,是相對簡單的,在課程中從應用的角度介紹即可,對單片機課程的教學沒有影響。實際上,有些同學從大一就開始自學單片機而且都取得了很好的效果,這對我們教學是一個很好的啟示。

第8篇

【關鍵詞】 單片機;PC機;串行通信;VB6.0;匯編程序

隨著科學技術的發展,在單片機應用系統的設計中常常遇到計算機與外界的信息交換,即通信。鑒于PC機具有強大的監控和管理功能,單片機具有快速以及容易控制的特點,在實際應用中,一般都利用PC機所配置的RS-232C標準串行接口來實現應用系統與PC機之間的數據交換。Visual Basic 6.0(簡稱VB6.0)在通信方面提供了專門的Communications控件,即控件Mscomm,可以完成簡單的串行端口通訊功能,也可以用來創建功能完備、事件驅動的高級通訊工具。可以利用VB6.0的Mscomm控件來實現PC機與多臺MCS-51單片機之間的串行通信。該控件提供了一系列標準通訊命令的使用接口,利用它可以建立與串行端口的連接,并通過串行端口連接到其它儀器設備,從而發出命令、交換數據、以及監視和響應連接中發生的事件與錯誤。

一、系統結構設計

本系統是由一臺上位PC機和若個臺以M CS-51單片機為核心的下位機構成。大多數PC機都配備有串行通訊端口RS-232C,用于兩臺計算機間進行串行通訊,但單片機的輸入、輸出電平為TTL電平,與PC機的RS-232C標準串行接口的電氣規范不一致,要實現單片機與PC機之間的數據通信,還必須進行電平轉換,在上位PC機與下位機的連接中采用RS-232C/RS-485轉換器,將PC機串口的標準由RS-232C電平信號轉換成RS-485的差分信號。RS-485具用“平衡差動式”的數據傳輸特性,工作于半雙工方式,RS-485的串行通信線路可采用最普遍的雙絞線,且在抗干擾能力和帶負載能力方面較其它的串行接口標準有非常明顯的優勢,適用于高速率和遠距離的串性通信場合。PC機與多個單片機通信的電路結構圖(如圖1所示)。

圖中的下位機是以MCS-51為核心的單片機系統,該系統由一片MCS-51外加一片256K的Eprom組成,并由芯片構成系統數據輸入功能塊、電機驅動功能塊、數據輸出功能塊和通信功能塊,其中通信功能塊可選擇下列三種通信方式之一,即由74LS245芯片構成的并行通信方式、由MAX232芯片構成的RS-232C串行通信方式以及由75176芯片構成的RS-485串行通信方式。

圖1PC機與多個單片機通信的電路結構圖

二、PC機的程序設計

VB6.省略mport=1 ;設置通訊端口號為com1

Mscomm1.setting=’1200,N,8,1’ ;設置為字符串形式,波特率為1200,無校驗位,8位數據位,1位停止位

Mscomm1.portopen=tu re ;打開通訊端口

(2)連接和發送緩沖區的屬性設置

Inbuffersize=256 ;接收緩沖區為256個字符

Outbuffersize=2 ;發送緩沖區為2個字符

Rthreshold =6 ;每當緩沖區收到6個字符就產生oncomm事件

Sthreshold=1 ;發送緩沖區為空觸發事件

Inputlern=0 ;讀取接收緩沖區所有字符

(3)主程序清單

Private sub commandl_click()

Textl.text=’檢查下位機的連線’

Endsub

Private sub command2_click()

Comml.Output =chr(49)

Textl.text=’1#’ ;1號下位機

Endsub

Private sub command3_click()

Comml.Output =chr(50)

Textl.text=’2#’ ;2號下位機

Endsub

Private sub command4_click()

Comml.Output =chr(51)

Textl.text=’3#’ ;3號下位機

Endsub

Private sub command5_click()

End

Endsub

Private sub comm1.省略mevent

Case comEvReceive

Dim data(100)as string

Data num>=comml. input

k=data(num)

Textl.text=k

Endselect

Endsub

三、單片機的程序設計

下位機中關于RS-485的串行通信部分采用MCS-51系列單片機的匯編語言編寫。MCS-51系列單片機有一個標準的全雙工串行接口,其串行控制寄存器SCON包含串行工作方式選擇位、接收發送控制位以及串行口狀態標志位。SCON在單片機中的地址為98H。假設MCS-51單片機從外部采集到的一組30個的數據,并存在片內RAM 20H~3DH區域中,現要求將這個數據塊傳送給PC機。為了保證傳送的正確,在傳送前應由單片機先向PC機發送聯絡信號#55H,PC機準確接收到后,向單片機發送回應信號#0AAH,在檢驗無誤后,單片機才開始向PC機傳送數據。對串行口的操作可分為以下四步進行:(1)串行口初始化;(2)發送聯絡信號;(3)接收回應信號;(4)發送數據。

匯編程序代碼如下所示:

ORG0030H

START: MOVSP, #60H

MOVTMOD, #20H ;Tl工作在模式2下

MOVTH 1, #F3H

MOVTL1, #F3H ;波特率設置為1200

SETB TRl

MOVPCON, #00H ;SMOD=0

MOVSCON, #50H ;選擇串行方式1

MOVR0, #20H

MOVR2, #30 ;數據個數

XX1: MOVA, #55H

MOVSBUF,A ;發送聯絡信號

WAITl: JBCT 1, W AIT2 ;等待發送完畢

AJMPWAIT1

WAIT2: JBC R1, READ ;等待接收完畢

AJMPWAIT2

READ:MOVA, SBUF ;接收聯絡信號

CJNEA,#0AAH, XX 1 ;接收數據不正確,重新開始

LOOP:MOVA,@R0

MOVSBUF,A

WAIT:JBC T1, LOOP1 ;等待發送完畢

AJMPWAIT

LOOPl:JNCR0

DJNZR2, LOOP

END

在VB6.0下實現串行通信有多種方法,除利用Windows API函數和利用Mscomm ActiveX控件外,還可通過VB調用動態鏈接庫dll來實現,本文只介紹了如何利用Mscomm控件來實現串行通信。當前,基于VB6.0的PC機與單片機的串行通信技術在我國發展已比較成熟,應用也比較廣泛。

參考文獻

[1]陳立元.Visual Basic與RS232串行通信控制.北京:清華大學出版社,2002:48~51

[2]李朝青.PC機及單片機數據通信技術.北京:北京航空航天大學出版社,2000:177

[3]胡漢才.單片機原理及系統設計.清華大學出版社,2003

第9篇

關鍵詞:機械類專業;微機原理與應用;教學改革;教學質量

Teaching reform and practice of principle and its applications of microcomputer for mechanical specialties

Wang Hongru, Tang Wei

Jiangsu university of science and technology, Zhenjiang, 212003, China

Abstract: To improve teaching quality of principle and its applications of microcomputer in mechanical specialties, characteristics and present situation of the course are analyzed thoroughly, and then a series of improvement strategies of teaching contents, teaching methods and means, and practice link are proposed. Results of teaching practice indicate the proposed strategies can stimulate the students’ learning interest and can exploit their learning potentialities. And teaching effect is improved consequently.

Key words: mechanical specialties; principle and its applications of microcomputer; teaching reform; teaching quality

微機原理與應用是我校機械類專業的一門專業基礎課,主要講授單片機硬件知識、匯編語言程序設計方法和單片機應用系統的設計[1]。對學生而言,課程內容比較抽象、知識點多,學習難度大;對教師而言,由于計算機的快速發展而需要不斷更新、補充教學內容,但學時卻在不斷減少。因此,結合微機原理與應用課程的特點及現狀,研究提高教學質量的方法和思路具有重要的現實意義。

1 課程特點及現狀

我校機械類本科專業對微機原理與應用課程的基本要求是學生熟練掌握單片機技術,并初步具備單片機應用系統的設計開發能力。因此要求該課程的教學必須既重視理論知識的傳授,又要加強實踐、創新能力的培養。

1.1 內容繁雜,概念抽象

微機原理與應用課程的主要內容有單片機的基本組成、工作原理、接口電路、匯編程序設計,以及單片機應用系統的設計等[1],其中每一部分都包含諸多知識點和抽象概念。例如半導體存儲器部分,包含的知識點有半導體存儲器的分類、特點、性能指標、基本結構、ROM和RAM的基本工作原理、片選信號產生方法、常用存儲器芯片引腳功能,以及外存儲器擴展的基本方法等;涉及的主要概念有ROM和RAM、片選線和片內地址線、地址總線和地址引腳、字選和片選,以及基本地址范圍和重疊地址范圍等,這些概念均比較抽象,理解起來有一定的難度。

1.2 學時較少,內容更新快

機械類本科專業由于其自身的特點,分配給微機原理與應用課程的學時本身就較少,再加上近年來隨著國家對人才需求的變化,修訂后的教學培養計劃幾乎每門課程的教學時數都在減少[2]。另外,隨著計算機技術的快速發展,教學內容也需要不斷地更新、補充。

1.3 學生學習興趣普遍較低

由于單片機的工作原理看不見、摸不著,且匯編語言是面向機器的語言,再加上機械類專業學生的電路以及計算機基礎相對比較薄弱,因此學生感到抽象、枯燥,多數學生的學習興趣較低,學習主動性不強。

通過上述分析可以看出,如何在有限的時間內將如此繁雜的內容高效傳授給學生,并培養他們的創新能力,成為提高微機原理與應用課程教學質量的關鍵。

2 教學改革

為提高微機原理與應用課程的教學質量,筆者從教學內容和教學方法與手段兩方面提出一些有針對性的改革措施。

2.1 教學內容改革

目前,國內高校的微機原理與應用課程大多是以Intel 80x86系列或MCS—51系列單片機為主要教學內容,也有采用其他類型中央處理器的單片機的。雖然處理器類型不同,但是介紹的主要內容基本相同。我校機械類專業微機原理與應用課程是以MCS—51系列單片機為主要內容組織教學。然而,近年來隨著計算機技術的快速發展,出現了高性能嵌入式中央處理器,這對教與學而言均是一個較大的挑戰。因此,如何處理好教學內容與實際應用之間的矛盾,成為微機原理與應用課程教學改革亟待解決的問題。

2.1.1 緊扣教學大綱,精選教材,優化教學內容

第10篇

1.1從知識點講授到以系統設計為主線的教學改革

我國高校在20世紀80年代初開始在少數高校開設單片機課程,面向電子和計算機專業高年級本科生和研究生,教材內容基本是單片機生產商提供的技術手冊、匯編程序設計和計算機原理與接口技術的綜合體。目前單片機教材雖然較多,但基本延續了這種傳統的教學思路,即以單片機的知識點為主線進行單元技術教學。隨著單片機教學在各層次學校的廣泛普及,這種教學思路顯現了明顯的不適應。系統設計性內容缺失和細節內容深度不夠,使一般學生在實際應用過程中仍然會遇到許多迷茫的問題。目前單片機基礎課教材的一個普遍性的問題是教學集中在分散的各個點,而對單片機系統整體結構性考慮不夠;重在局部和單元模塊,缺乏組織成項目的考慮。這種問題嚴重地體現在系統軟件設計中,一般學生會做例題和作業,不會設計解決實際任務的系統軟件。因此,單片機基礎課程教學改革的一個重點就是從知識點講授到以系統設計為主線,基于課程整體性并結合項目系統整體性考慮實施單元教學,重點提升學生系統性、綜合性設計能力。

1.2單片機與其它課程教學形成良性互動

在目前課程體系中,考慮到知識銜接關系,單片機課程在模擬電子技術、數字電路、計算機組成(微機原理與接口)、匯編程序設計等課程之后,一般安排在第6學期。這個安排的問題是學生實際綜合應用及拓展學習的時間較短。這在單片機進入我國高校的早期階段僅高端學生學習的情況下是合理的,在目前單片機普及教學情況下,作為工具和重要的學科基礎課,單片機課程應盡早讓學生掌握,對其熟練和提高系統設計能力、提高學習興趣、結合和促進其它課程學習將產生良好作用。單片機基礎課程涉及到的模擬電子技術、數字電路等知識,是相對簡單的,在課程中從應用的角度介紹即可,對單片機課程的教學沒有影響。實際上,有些同學從大一就開始自學單片機而且都取得了很好的效果,這對我們教學是一個很好的啟示。

2單片機理論教學的改革

單片機教材最初源于單片機生產廠家技術手冊、匯編語言程序設計和計算機組成與接口技術的綜合。單片機應用初期面向對象是重點院校電子和控制專業的學生和科研人員。傳統的授課方式是以知識為驅動,知識點之間比較分散,學生學完之后沒有系統的概念,缺乏貫穿所有知識的主線,形成不了體系。這種教學方法亟待改革。

2.1以項目為主線

系統結構性設計是一個重要的教學內容。從宏觀教學的角度考慮,我們將整個教學內容設計成基本涵蓋了本課程全部教學內容的一個項目,基于課程整體性并結合項目系統整體性考慮實施單元教學。對結構性的適當變化和局部內容的取舍,即可衍生和變化為其它的應用系統。通過這樣的教學設計,學生加大了對課程的興趣,逐漸地積累成就感,并最終能較快地進入系統設計者的角色,能較好地完成實際應用系統的設計。

2.2整體與局部關系

基于項目為主線的教學設計,在講述局部技術的同時進行系統結構性的教學,使系統整體性的考慮體現在局部中。例如LED數碼管動態顯示、步進電機驅動等技術,在目前教材中基本都是完成單一這類功能的小程序,而在實際應用系統中,這些功能要與系統核心任務并行執行,是一個“多任務”的概念,不能簡單地將教材示例的單一的小程序搬到應用系統中。其它如結合鍵盤掃描和多級LCD菜單形成多任務下的人機交互通道這些系統性內容的考慮,在單元教學中都要考慮到。

2.3教學內容和體系調整

調整應用匯編和C語言教學的比例。匯編指令有助于對單片機硬件的學習,程序代碼短、速度快,較多地應用在對時序有嚴格要求的測控系統中。隨著單片機硬件和軟件編譯技術的發展,代碼長度和速度已不是主要問題,重在軟件質量、開發周期和開發維護成本,大多數場合應用匯編的必要性已不存在。因此教學應以C語言為主,匯編只講解指令原理、尋址方式、必要的指令和在C語言中嵌入匯編程序的方法和實例。調整單元模塊教學順序。現有教材中一般將人機交互設計的內容放在最后,這不利于學生自主實踐。由于無法實施對運行過程必要的監測,使其在沒有仿真系統情況下調試有相當的難度。因此,將人機交互部分盡可能地提前可達到很好的效果。單片機基礎課程傳統教學對新機型和新技術介紹較少,應做適當的補充。增加IIC、SPI、PS/2等相關技術和應用的介紹、對其它典型單片機如AVR簡要的介紹,使學生在掌握基本單片機技術基礎上,能更容易地進入到高級層次的應用。

2.4挖掘基本知識內容的深度

把MCS-51單片機基礎知識講透徹,對后續嵌入式系統深層次學習可打下良好的基礎。以外中斷的重復響應和堆棧的溢出問題為例,學生在實際應用中經常遇到,但在教材中沒有相應的說明。前者是由于外中斷請求信號有毛刺,即使在進入中斷立即屏蔽中斷,且中斷請求信號已經撤銷的情況下,在退出中斷后還將引起此中斷的重復響應。問題在于對中斷請求信號、請求標志和響應過程這些基本知識講述不到位;后者是對堆棧空間位置、容量及系統對堆棧使用沒有準確概念。類似的因基本知識講述深度不夠,導致學生困惑的問題還有很多。因此要注重研究實際應用中典型問題背后的原因,深化和細化基本知識的講授,這對實際應用和提高可起到至關重要的作用。

2.5理論課中的實踐內容

單片機是一門實踐性極強的課程,該理論課不講授實驗實際是一個誤區。在理論課應用Proteus做部分仿真實驗,實驗效率高、理論教學效果好,并可達到擴展學習到課外的效果。因此,需協調好理論與實驗課關系,對仿真實驗學時做一定的硬性要求。另一個問題是系統調試技術的教學。系統調試是初學者開發單片機應用系統的一個難點,特別是在無仿真器情況下進行軟件調試。因此,在理論課中講述初等調試技術是有必要的,例如用示波器、LED顯示測信號、串行通信監測程序流程等。使學生提高系統設計和調試技能的同時,提高了實驗課效率,使實驗課有更多的時間用于綜合性實驗中。

3實踐教學模式的改革

3.1基于項目引領的實驗模式

我們許多課程的實驗課教學模式,基本上都出于傳統的公共基礎課實踐教學。其特點是對單一某個理論教學內容進行實驗演示和驗證。由于思維的慣性,這種傳統自然也延續到單片機實驗課中,致使學生綜合性實驗能力較弱,完成課程設計和實際應用設計的難度較大。作為嵌入式基礎和初級應用的單片機基礎課程,其最大特點是工程性。單片機本身是一個強大的系統集成工具,學生在專業知識基礎上用單片機及相關器件進行綜合分析和設計,最終要制作出滿足用戶要求的產品。因此,單片機實驗課的主體思路是綜合性、工程性。基于這一點,我們對實驗課在宏觀上調整為基于項目引領的實驗模式。首先是將基礎性實驗以Proteus軟件仿真形式在理論課上實驗和演示;其次是配合理論課將整個學期的實驗課安排成一個應用項目,將整個項目按照內部資源、擴展資源、前向通道、后向通道和人機通道等部分分解成各個模塊作為每次試驗課的內容。學生在完成單次試驗的基礎上,從軟硬件的角度對項目整體架構不斷地加深認識和理解,最后完成一個項目的全過程實驗。在這個過程中,學生不斷地積累系統級分析設計的能力,不斷地積累著成就感。學生增強了對實驗課的興趣,大幅提高了單片機實驗課的效率和效果。

3.2多種實驗手段的綜合運用

現在高校學生基本上都基于實驗箱做實驗。相對于傳統實驗手段(手工焊接或用面包板),實驗箱在單片機應用系統的軟件實驗方面具有優越性,但在硬件實驗方面,則現出其明顯的弊端。學生按照實驗指導書的指示在實驗箱上連接各端子,學生大多不去了解這種連接后形成的電路;沒有從設計、元器件連接、調試到完成全過程的鍛煉;實驗箱資源有限;不能進行多種硬件方案的試驗、硬件電路的優化設計和創新。我們根據實驗不同分別采用不同的實驗手段。應用面包板的實驗,側重于自己設計電路實驗方案、創新潛能的開發和硬件系統級調試技術的學習;手工焊接的實驗側重于實際動手技能和模塊及硬件調試方法的學習和鍛煉;應用試驗箱的實驗則重點側重于復雜系統的編程和軟件調試。同時,這些實驗手段的綜合應用,給學生創造了一個寬松的軟硬件實驗環境和發揮創造性的空間,增大了實驗課的吸引力,促進了對理論教學的理解,達到了很好的效果。

3.3發掘第二課堂的深度和廣度

單片機課外教學活動是可行和必要的。組織成立學生課外活動小組,為學生設計階段性任務。這些任務可以是承擔科研項目的分解部分,也可以是有意義和價值的小題目。學生的任務可以指標化,小組實行優勝劣汰。這對學生提高課程興趣、加深理解、拓展知識和帶動整體學習起到了重要作用。每年一次由教育部和信息產業部共同舉辦的大學生電子設計競賽,是一次極好的單片機實踐教學活動。要進行規范整理,優化模塊設計,使之成為標準件,進而成為教學資源,進而促進教學教改工作進展和良好學風校風的建設。

4結語

第11篇

實驗操作是理論聯系實際的重要環節,實驗報告必須在科學實驗的基礎上進行,實驗報告的撰寫是知識系統化的吸收和升華的過程,實驗報告應該體現完整性、規范性、正確性、有效性。現將撰寫實驗報告的有關內容說明如下:

1.實驗名稱

2.實驗目的

本次實驗所涉及并要求掌握的知識點。

3.實驗內容與實驗步驟

實驗內容、原理、原理圖分析及具體實驗步驟。

4.實驗環境

實驗所使用的器件、儀器設備名稱及規格。

5.設計實驗數據表格

6.實驗過程與分析

詳細記錄在實驗過程中發生的故障和問題,并進行故障分析,說明故障排除的過程及方法。

根據具體實驗,記錄、整理相應數據表格、繪制曲線、波形圖等,并進行誤差分析。

7.實驗結果總結

對實驗結果進行分析,完成思考題目,總結實驗的心得體會,并提出實驗的改進意見。

注:1.前5項必須在做實驗之前完成,并由指導教師簽字后才能做實驗。

2.對于學生自擬實驗題目、參與科研、創新實驗等形式實驗項目的實驗報告可采用論文、實驗總結報告等形式完成。

3.此封皮標準頁面為16K,實驗報告:實驗名稱:

熟悉PIC系列單片機的開發環境及簡單編程

實驗目的:

1. 通過順序結構的簡單程序設計,熟悉PIC系列單片機的開發環境,掌握基本應用步驟和命令;

2. 熟悉匯編語言指令,掌握基本的程序設計方法。

實驗環境:

PC計算機 MAPLAB編譯環境

實驗原理 :

實驗一:交換兩個寄存器內容(例如交換f10H和f11H的內容) 實驗過程比較簡單,無分支程序,而且思路十分清晰,難度不大。

實驗二:(選作)將某一寄存器內容中的奇偶位數據交換。

本實驗的思想是:將寄存器中數據同10101010二進制數相與,得到原數據的奇數位,并向右移一位后存至一個寄存器,作為結果數據的偶位數;再將寄存器中數據同01010101二進制數相與,得到原數據的偶數位,并向左移一位后存至另外一個寄存器,作為結果數據的奇位數。最后,將這兩個寄存器中的數字進行或運算,得到結果。

實驗中,使用了RO作為記錄原數奇位數的寄存器,RE作為記錄原數偶位數的寄存器,RN作為記錄員數據的寄存器,RR作為記錄結果的寄存器。

實驗程序:

實驗一:

LIST P=16C54

RA EQU 10

RB EQU 11

RT EQU 12

ORG 1FFH

GOTO MAIN

ORG 0

MAIN NOP

MOVLW 0

MOVWF RT

MOVLW 15H

MOVWF RA

MOVLW 3AH

MOVWF RB

MOVF RA,0

MOVWF RT

MOVF RB,0

MOVWF RA

MOVF RT,0

MOVWF RB

END

實驗二:(選作)

LIST P=16C54

RO EQU 10

RE EQU 11

RN EQU 13

STATU EQU 3

CARRY EQU 0

RR EQU 12

ORG 1FFH

GOTO MAIN

ORG 0

MAIN NOP

MOVLW 99H

MOVWF RN; GIVE VALUE

ANDLW B'10101010'

MOVWF RE

BCF STATU, CARRY

RRF RE; ODD->EVEN

MOVF RN,0

ANDLW &nbs p; B'01010101'

BCF STATU, CARRY

MOVWF RO

RLF RO; EVEN->ODD

MOVF RO,0

IORWF RE,0; ADD THE TWO PARTS OF THE NUMBER BY OR THEM

MOVWF RR

END

調試結果:

實驗一結果:

1、賦值后

2、調換中

3、調換后

實驗二結果:

1、賦值后

2、取奇數位的數值存入RE

3、將奇數位的數值右移一位

5、取偶數位的數值存入RO

6、將偶數位的數值左移一位

7、得到最后結果

實驗分析與實驗體會:

本實驗通過順序結構的簡單程序設計,我基本掌握了PIC系列單片機的開發步驟和命令,熟悉了PIC系列單片機的開發環境MAPLAB,并在具體變成過程中,熟悉匯編語言指令,掌握基本的程序設計方法。

雖然本實驗是基本練習,目的是為了熟悉實驗環境,但是,在實驗中還是學到了很多東西:

第12篇

摘要:本文探討了基于C語言的ARM嵌入式程序設計課程中學生反映不好掌握的一些知識點。

關鍵詞:ARM嵌入式;C語言;程序設計;技巧

中圖分類號:G642

文獻標識碼:B

引言

嵌入式C語言程序設計是利用基本的C語言知識,面向嵌入式工程實際應用進行程序設計語言。如何能夠在嵌入式系統開發中熟練、正確地運用C語言開發出高質量的應用程序,是學習嵌入式程序設計的關鍵。下面介紹基于C語言的ARM嵌入式程序設計課程中學生反映不好掌握的一些難點。

1變量定義

先看下面一個例子:

char  a; char  a;

short b; char  c;

char  c; short b;

int

d; int

d;

這里定義的4個變量形式都一樣,只是次序不同,卻導致了在最終映像中不同的數據布局,如圖1所示。顯然,第2種方式節約了更多的存儲空間(Pad為無意義的填充數據)。

由此可見,在變量聲明時,最好把所有相同類型的變量放在一起定義,這樣可以優化存儲器布局。

圖1變量在數據區里的布局

對于局部變量類型的定義,一般情況下,人們總是設法使用short或char來定義變量,以節省存儲空間;但是,當一個函數的局部變量數目有限時,其結果恰恰相反。因為編譯器會把局部變量分配給內部寄存器,每個變量占用一個寄存器,如圖2所示。假定a1是任意可能的寄存器存儲函數的局部變量,同樣完成加1的操作,32位的int型變量最快,只用1條加法指令。而8位和16位變量,完成加法操作后,還需要在32位的寄存器中進行括號擴展,其中有符號的變量,要用邏輯左移(LSL)和算術右移(ASR)2條指令才能完成符號擴展;無符號的變量,要使用1條邏輯“與”(AND)指令對符號位進行清0。所以,使用32位int或unsingedint局部變量最有效率。

圖2不同類型局部變量的編譯結果

變量定義中,為了精簡程序,程序員總是竭力避免使用冗余變量。通常情況下這是正確的,但也有例外。

例如:冗余變量的使用與否比較。

int f(void);

int g(void);

int errs;

void test1(void)

{

errs+=f();

errs+=g();

}

void test2(void)

{

int localerrs=errs;

localerrs+=f();

localerrs+=g();

errs=localerrs;

}

在第一種情況test1()里,每次訪問全局變量errs時,都要先從相應的存儲器Load到寄存器里,經f()或g()函數調用后再Store回原來的存儲區里面。在這個例子里,一共要進行2次這樣的Load/Store操作(第一次是Load,第2次是Store)。而在第2種情況test2()里,局部變量localerrs被分配以寄存器,這樣一來,整個函數就只需1次Load/Store訪問全局變量存儲器。減少存儲器訪問的次數對于系統性能的改善是非常有好處的。

2參數傳遞

為了使單獨編譯的C語言程序和匯編程序能夠互相調用,定義了統一的函數過程調用標準ATPCS(ARM-Thumb Procedure Call Standard)。ATPCS定義了寄存器組中的{R0~R3}作為參數傳遞和結果返回寄存器。如果參數數目超過4個,則使用堆棧進行傳遞。由于內部寄存器的訪問速度遠遠大于存儲器,所以要盡量使參數傳遞在寄存器里面進行,即應盡量把函數的參數控制在4個以下。例如:從C語言中直接調用匯編語言函數:

extern void strcopy(char *d,const char *s);

int main(void){

const char src=“Source”;

char dest[10];

strcopy(dest,src);

}

AREAStrCopy,CODE,READONLY

EXPORT strcopy

strcopy

LDRBR2,[R1],#1

STRBR2,[R0],#1

CMP R2,#0

BNE strcopy

MOVPC,LR

END

例子中的函數strcopy(dest,src)用匯編來實現。根據ATPCS的定義,函數參數從左到右由寄存器進行傳遞,所以在匯編中可直接由R0和R1進行引用。這樣,在C語言和匯編語言之間進行相互調用就容易實現了。

3循環條件

計數循環是程序中十分常用的流程控制結構。在C語言中,常用下面累加計數的循環形式:

for(loop=1;loop

這種累加計數的方法符合一般的自然思維習慣,所以下面這種遞減計數方法很少使用:

for(loop= limit;loop!=0;loop--)

這2種循環形式在邏輯上并沒有效率差異,但是映射到具體的體系結構中時,就產生了很大的不同,如圖3所示。

圖3不同的循環條件設置比較

從圖中可以發現,累加法比遞減法多用了1條指令,當循環次數比較大時,這2段代碼就會在性能上產生明顯的差異。

其本質原因是:當進行一個非0常數比較時,必須用專門的CMP指令來執行;而當一個變量與0進行比較時,ARM指令則可直接利用條件執行的特性(NE)來進行判別。因此,在ARM的體系結構下編程,最好采用遞減至0的方法來設置循環條件。

參考文獻

[1] 梁合慶等. 從C到嵌入式C編程語言[M]. 北京航空航天大學出版社,2000.

[2] 田澤. 嵌入式系統開發與應用[M]. 北京航空航天大學出版社,2005.

主站蜘蛛池模板: 施秉县| 滁州市| 都兰县| 内江市| 岳西县| 乌什县| 金山区| 博湖县| 元朗区| 灵璧县| 金川县| 兰考县| 阜新| 绥芬河市| 青川县| 肇州县| 安远县| 大足县| 永登县| 青龙| 拉萨市| 玛纳斯县| 奈曼旗| 水富县| 正定县| 多伦县| 丘北县| 六枝特区| 手机| 陈巴尔虎旗| 乌兰察布市| 汕头市| 商城县| 沾化县| 莆田市| 七台河市| 周至县| 长汀县| 苏尼特右旗| 玉龙| 沁阳市|