前言:中文期刊網(wǎng)精心挑選了匯編程序范文供你參考和學(xué)習(xí),希望我們的參考范文能激發(fā)你的文章創(chuàng)作靈感,歡迎閱讀。
匯編程序范文1
關(guān)鍵詞:匯編語言程序設(shè)計;教學(xué)改進
中圖分類號:TP311文獻標(biāo)識碼: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 匯編語言程序設(shè)計課程教學(xué)現(xiàn)狀
匯編語言程序設(shè)計作為一門計算機專業(yè)的課程,其存在的合理性在近年受到爭議。有些人認為,匯編語言作為一種低級語言,指令繁多,難以掌握。另外,編程效率也不高,一個高級語言用一條語句實現(xiàn)的功能,在匯編語言中需要很多條指令才能實現(xiàn)。此外,匯編語言在時間上和空間上的優(yōu)勢由于高速CPU和大容量存儲器的出現(xiàn),也變得意義不大。
我認為學(xué)習(xí)匯編語言仍然具有重要意義。可以歸納如下:
1) 可以比較深入了解計算機硬件的底層工作原理,例如:CPU的工作模式,寄存器的概念,內(nèi)存的尋址方式,中斷的工作原理等。
2) 熟悉各種數(shù)據(jù)表示方法。如各種數(shù)制的轉(zhuǎn)化,各種類型的數(shù)據(jù)在內(nèi)存中的存儲方式。學(xué)生在系統(tǒng)學(xué)習(xí)匯編語言程序設(shè)計這門課程后,對二進制,十進制以及十六進制相互間的轉(zhuǎn)換應(yīng)該非常熟練。對數(shù)據(jù)在內(nèi)存中兩種排列方式即大端方式(Big Endian,低地址存放高位字節(jié))與小端方式(Little Endian,低地址存放低位字節(jié))有清晰的理解。而這些相關(guān)的概念的牢固掌握對高級語言中的數(shù)據(jù)類型以及計算機網(wǎng)絡(luò)編程的學(xué)習(xí)具有很大的幫助。
3) 通過匯編語言編程學(xué)習(xí),可以促進對高級編程語言相關(guān)概念的理解。高級語言在編譯的時候,一般都是先生成匯編代碼,然后再生成的二進制代碼。所以,通過對比分析匯編代碼與高級語言代碼的實現(xiàn)方式,對程序的執(zhí)行效率,數(shù)據(jù)在內(nèi)存中存放方式,堆棧的概念,函數(shù)的調(diào)用及參數(shù)傳遞的方式等都會有進一步的了解。
在教學(xué)中,我也遇到一些問題。一方面就是學(xué)生的積極性不高。主要原因包括:指令很多,難以記憶。對于幾個大類的指令,如果每次課上一類,學(xué)生課后如果不進行主動復(fù)習(xí),往往到下一次課的時候,就會忘記前面所學(xué)的內(nèi)容或者發(fā)生混淆。另外,在學(xué)習(xí)匯編課程之前,他們已經(jīng)學(xué)過一門高級語言,如C/C++等,匯編語言的學(xué)習(xí)方式與高級語言的學(xué)習(xí)方式有所不同,高級語言比較容易上機練習(xí),也容易對程序運行結(jié)果驗證,對于開發(fā)實用軟件也相對容易,所以學(xué)生的興趣比較大。而匯編語言一方面涉及到底層的硬件概念,比較難以理解,另一方面上機也比較困難,可以這么說,如果按照課本的順序講課,要到差不多講完課,學(xué)生才可以上機完成一個功能比較完整的程序。
2 促進學(xué)生對知識的掌握
要解決這些問題,我認為要在學(xué)生的知識掌握方式以及學(xué)習(xí)興趣的培養(yǎng)上下功夫。對于知識的掌握,除了每次新課內(nèi)容講完后,精心給學(xué)生布置作業(yè)習(xí)題之外。還應(yīng)該注意到由于匯編語言的指令及相關(guān)的知識點很多,對于剛接觸這門課程的學(xué)生一開始往往不大適應(yīng),容易混淆前面學(xué)過的內(nèi)容,所以教師及時對所學(xué)過知識點進行比較和總結(jié)就很有必要。此外還應(yīng)該定期對學(xué)生的學(xué)習(xí)效果進行檢測,從過去的教學(xué)經(jīng)驗看,匯編語言這門課程是學(xué)生比較容易與教師的教學(xué)進度脫離的一門課程,不少學(xué)生在一開始由于在掌握知識遇到困難,問題越積越多,最終可能放棄聽課。在檢測的方法上,可以借助網(wǎng)上考試系統(tǒng)。教師可以自主出題,也可以讓系統(tǒng)自動出題。通過分析學(xué)生的測試結(jié)果,教師可以及時調(diào)整教學(xué)進度,學(xué)生也會有一定的學(xué)習(xí)壓力,使他們花更多時間查補缺漏的知識。
程序設(shè)計學(xué)習(xí)的最佳方法就是上機實踐。匯編語言上機練習(xí)跟高級語言的上機練習(xí)相比,對于學(xué)生來說比較困難。一方面是由于一個完整的匯編程序涉及的知識點很多,而教材往往按知識點分類進行編排。所以學(xué)生要想在剛開始學(xué)習(xí)階段,就編出完整的程序有一定的難度。另一方面,匯編程序的運行結(jié)果較難在屏幕上輸出,匯編語言只有字符與字符串的輸入輸出,對于一道簡單的算術(shù)運算題目,其結(jié)果的輸出都要通過一大段的轉(zhuǎn)換程序來實現(xiàn)。對于第一個問題,教師可以對教材內(nèi)容進行選講,把實驗所涉及到的知識點先進行講解。對于第二個問題, 我認為應(yīng)該重點培養(yǎng)學(xué)生熟練使用調(diào)試工具的能力,通過掌握調(diào)試工具如DEBUG,CV等的使用,一方面學(xué)生可以直接觀察程序的運行結(jié)果,另一方面,對于程序的邏輯錯誤也可以進行跟蹤、分析以及解決。此外,由于匯編語言作為一種低級語言,編程都由一條條指令進行構(gòu)造,所以相對繁瑣,應(yīng)盡早讓學(xué)生應(yīng)用模塊化思路,掌握子程序及宏的使用方法。這樣把一些常用功能做成模塊,如輸入輸出功能,以后學(xué)生在編程的時候就可以直接調(diào)用這些模塊,從而專注于實驗的其它方面。
3 提高學(xué)生的學(xué)習(xí)積極性
對于如何提高學(xué)生的學(xué)習(xí)興趣,我認為主要讓學(xué)生意識到匯編語言的作用。一方面可以引入一些接口技術(shù)相關(guān)內(nèi)容,使學(xué)生熟練掌握中斷的概念以及I/O指令,然后上機編寫中斷程序,在中斷控制器(8259A)進行驗證,由于這些實驗有按鍵輸入,有屏幕輸出,還能直接看到程序控制設(shè)備的效果,所以學(xué)生興趣會比較大。此外,教師也可以適當(dāng)拓展一些知識,如嵌入式編程相關(guān)概念,有興趣的同學(xué)可以在課后自主進行學(xué)習(xí)。另外,由于不少學(xué)生對硬盤相關(guān)的問題感興趣,比如硬盤數(shù)據(jù)的存放方式,數(shù)據(jù)的修復(fù)等。可以引導(dǎo)學(xué)生對這些問題進行思考,然后通過匯編語言提供的I/O指令和中斷子功能,編程實現(xiàn)對硬盤的MBR,文件分配表等數(shù)據(jù)結(jié)構(gòu)的讀取,備份,修復(fù)等功能。教師通過布置一些學(xué)生比較感興趣的課外作業(yè),并適當(dāng)提供協(xié)助,往往能提高學(xué)生的學(xué)習(xí)積極性。
另外,在匯編語言的學(xué)習(xí)過程中,教師應(yīng)該有意識引導(dǎo)學(xué)生將匯編語言與高級語言的各個對應(yīng)的部分進行比較。學(xué)生在學(xué)習(xí)匯編語言之前,通常已經(jīng)學(xué)過一門高級語言,如C/C++等。高級語言在編譯的時候,一般是先轉(zhuǎn)換成匯編代碼,所以它們具有相通性。大部分學(xué)生編寫應(yīng)用程序的時候是用高級語言,所以通過比較分析高級語言與低級語言在數(shù)據(jù)定義,程序流程控制,函數(shù)的定義及調(diào)用等的對應(yīng)部分內(nèi)容,對于學(xué)生更好的使用高級語言編寫程序是很有幫助的。比如:匯編語言里有分段的概念,一般把變量定義到數(shù)據(jù)段,把代碼定義的代碼段。而C語言是把數(shù)據(jù)與代碼都定義在一起,那么C語言編寫的程序在編譯成可執(zhí)行文件后,它的全局變量,局部變量的空間是如何分配的。另外,對于動態(tài)內(nèi)存分配,堆與棧的區(qū)別在哪里。還有函數(shù)的定義與調(diào)用,參數(shù)的傳遞順序是如何的?這些疑問,都可以讓學(xué)生編寫簡單的C語言程序,生成可執(zhí)行文件后,然后通過調(diào)試工具進行反匯編進行分析。此外,在利用VC++,Dephi等IDE開發(fā)工具進行程序編寫時,都會用到里面的調(diào)試功能。基本上調(diào)試功能都會包括反匯編與內(nèi)存查看的功能,教師可以引導(dǎo)學(xué)生進行這方面的訓(xùn)練,使他們在以后編程時能熟練應(yīng)用這個工具解決一些疑難問題,例如:內(nèi)存非法訪問,指針的非法引用等。
4 Win32平臺下的匯編語言教學(xué)思考
目前很多高校在匯編程序設(shè)計教學(xué)中講解的是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)在的實際應(yīng)用基本上采用工作于保護模式的Win32平臺,在Windows操作系統(tǒng)控制下,匯編語言雖然不能再直接存取硬件,但是能通過調(diào)用系統(tǒng)提供的API函數(shù)完成各種功能。其實這里的API函數(shù)當(dāng)于DOS下的中斷調(diào)用,但是Window API函數(shù)無論從數(shù)量上、功能上還是易用性上都大大超過了DOS或BIOS的中斷調(diào)用功能。所以現(xiàn)在在Win32平臺下,匯編語言就像高級語言一樣,可以方便的開發(fā)各種Windows應(yīng)用程序。有些教師認為,既然在實模式講解匯編語言很少涉及實用性,那就應(yīng)該直接遷移到Win32匯編平臺,講解用匯編語言開發(fā)的Windows應(yīng)用程序設(shè)計實例,從而提高學(xué)生積極性。我認為如果采用這種教學(xué)方法,可能會存在以下問題:首先由于上課時間有限,學(xué)生需要大量的時間才能熟練掌握各類指令,匯編語言的語法,程序結(jié)構(gòu)等方面的知識。如果過多涉及Windows程序設(shè)計實例,對于不熟悉Windows編程機制的學(xué)生的來說,又多了一個不小的學(xué)習(xí)負擔(dān),這樣子反而影響了匯編語言基礎(chǔ)知識的掌握。另外,DOS下的實模式與Window下的保護模式下的編程在本質(zhì)上并無很大的區(qū)別,只要學(xué)生熟練掌握各類指令用法,理解16位與32位的指令及尋址方式的區(qū)別,邏輯地址與物理地址轉(zhuǎn)換機制等知識,他們就可以通過自主學(xué)習(xí),較容易的掌握用匯編語言進行Win32應(yīng)用程序的開發(fā)。對于教師,除了幫學(xué)生打好匯編語言的基礎(chǔ),可以適當(dāng)以課外作業(yè)的形式,引入一些匯編語言在不同應(yīng)用領(lǐng)域的簡單實例,如加密與解密,軟件的逆向工程等,這些課外作業(yè)的完成對學(xué)生匯編語言的應(yīng)用能力的提高將會有不小的幫助。
5 結(jié)束語
匯編語言難教難學(xué)是教師與學(xué)生的共識,但是作為計算機科學(xué)中一門低級程序設(shè)計語言,通過對它的良好掌握,確實可以促進對計算機軟硬件底層的了解,而這又能促進編程能力的提高。作為教師,在教學(xué)中應(yīng)該不斷嘗新的教學(xué)方法,不斷積累經(jīng)驗,只有這樣,才能把這門課上好。
參考文獻:
匯編程序范文2
關(guān)鍵詞:MCS-51 單片機 匯編 IDE 編譯器
中圖分類號:TP313 文獻標(biāo)識碼:A 文章編號:1007-9416(2013)05-0029-01
1 單片機簡介
1.1 單片機介紹
單片機是一種集成電路芯片,它將CPU、RAM、ROM、I/O接口、中斷系統(tǒng)等等功能集成到一塊硅片上,構(gòu)成一個微型計算機系統(tǒng),所以單片機也叫做微控制器。在工業(yè)控制領(lǐng)域中,單片機具有非常重要的地位。MCS-51單片機是一種8位單片機,雖然目前已經(jīng)有32位單片機的出現(xiàn),但8位單片機在很多行業(yè)中仍在被廣泛使用,其性能較之以前也有巨大的提升。
1.2 單片機發(fā)展方向
單片機發(fā)展有兩個方向:
(1)改進集成電路工藝,提高芯片速度。
(2)根據(jù)不同領(lǐng)域需要,在保留基本外設(shè)裝置和公共指令的基礎(chǔ)上,將不同的外設(shè)裝置集成到芯片中。
(3)MCS-51單片機指令。MCS-51單片機的指令系統(tǒng)功能強、指令短、執(zhí)行的速度也快,一共有111條指令以及8條偽指令,可以從功能上將其劃分為數(shù)據(jù)傳送、邏輯操作、算術(shù)操作、程序移位操作等四大類;空間屬性上來分,分為單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令;時間屬性上來分,分為單機器周期指令、雙機器周期指令和四機器周期指令。MCS-51單片機的指令由操作碼和操作數(shù)組成,操作數(shù)又有無操作數(shù)、單操作數(shù)、雙操作數(shù)三種情況。格式如下:
【標(biāo)號:】操作碼助記符【目的操作數(shù)】【,源操作數(shù)】【.注釋】。
偽指令不用計算機做任何操作,只是幫助匯編,不影響程序執(zhí)行。
2 IDE簡介
2.1 IDE介紹
IDE(Integrated Development Environment,集成開發(fā)環(huán)境),包括代碼編輯器、編譯器、調(diào)試器、用戶界面等,是用于編程語言開發(fā)的應(yīng)用程序。目前的單片機IDE,主要是由國外幾大面向嵌入式系統(tǒng)的軟件公司來開發(fā),如:德國的Keil,美國的Franklin等,國內(nèi)幾乎沒有自主研發(fā)的優(yōu)秀的單片機IDE。
2.2 IDE主要功能
(1)代碼編輯。程序員在使用IDE進行程序開發(fā)時,大部分的時間都是在進行代碼的編輯,一個好的IDE應(yīng)該在代碼編輯中為用戶提供幫助,提高他們的開發(fā)效率,例如:通過改善顯示效果來提高程序可讀性;讓部門代碼自動生成從而簡化用戶輸入的動作;方便用戶進行程序閱讀等等。(2)項目管理與編譯控制。(3)平臺信息管理。主要是針對嵌入式開發(fā)環(huán)境,針對不同的CPU體系、開發(fā)板名稱,將所有的平臺信息在信息管理模塊中分類記錄,用戶選取相應(yīng)的配置文件來使用新的開發(fā)平臺,這樣就能最快的進入最終應(yīng)用開發(fā)階段。(4)調(diào)試功能。IDE的調(diào)試功能是十分重要的,它能檢查出軟件執(zhí)行過程中出現(xiàn)的錯誤,當(dāng)然,在嵌入式系統(tǒng)開發(fā)中,還要支持遠程調(diào)試。
2.3 在IDE中單片機匯編程序的開發(fā)
基于MCS-51單片機匯編語言程序的應(yīng)用系統(tǒng)開發(fā),有以下幾個步驟:(1)源代碼編輯。(2)生成目標(biāo)程序。(3)下載或編程。(4)調(diào)試。
3 設(shè)計思路與詳細步驟
3.1 界面設(shè)計
設(shè)計IDE時,選擇微軟的VC++工具,它是面向?qū)ο蟮某绦蛟O(shè)計工具,可視化功能強,界面友好,易于解決大型問題,軟件維護方便。選好設(shè)計工具,就開始進入界面的設(shè)計,要讓單片機匯編語言的初學(xué)者較好掌握這門語言,IDE就應(yīng)該簡單直觀,易于操作。編輯框當(dāng)中包含以下幾個部分:(1)文件(file):新建、打開、保存、關(guān)閉、打印、退出;(2)編輯(edit):剪切、復(fù)制、粘貼、查找、撤銷;(3)編譯(compile):編譯連接、裝載程序;(4)實驗演示和參數(shù)設(shè)置;(5)系統(tǒng)登錄。
3.2 編譯器設(shè)計
3.2.1 分解
一個編譯器的整個工作流程是分階段進行的,這幾個階段是:詞法分析、語法分析、語義分析、目標(biāo)代碼生成。如果編譯過程中發(fā)現(xiàn)源程序有錯誤,編譯程序要報告出錯誤的性質(zhì)和發(fā)生的地方,將錯誤的影響盡量限定在很小范圍內(nèi),使得程序的其他代碼能繼續(xù)被編譯。
3.2.2 設(shè)計步驟
(1)總體設(shè)計。設(shè)計時使用兩遍掃描,第一遍是建立符號表和確定源程序每一行的偏移地址,同時檢查匯編程序是否有錯誤;第二遍是利用第一遍掃描所生成的符號表,產(chǎn)生可供微處理器執(zhí)行的機器代碼文件,并產(chǎn)生一個列表文件。
(2)指令系統(tǒng)設(shè)計。MCS-51單片機共有111條可執(zhí)行的指令和8條偽指令,建立一個對象,用來存儲用戶使用的指令系統(tǒng)的信息,如序號、操作數(shù)對應(yīng)的Token碼等,為了在編譯時能夠判斷輸入的語句正確與否,先要建立一個指令表和操作碼表,然后將語句與111條指令進行匹配。
(3)詞法分析設(shè)計。MCS-51單片機匯編語言程序,是將若干條MCS-51指令行組合而成,指令行格式:
【標(biāo)號:】MCS一51操作碼【操作數(shù)1】,【操作數(shù)2】,【操作數(shù)3】【;注釋】
偽指令語句格式:
【標(biāo)號:或字符串】MCS-51偽代碼表達式列表【;注釋】
定義一個類來進行詞法分析,設(shè)置兩個變量a,b,分別代表讀入單詞的頭指針和尾指針,先將b的值賦值給a,然后通過循環(huán)逐個判斷,得出a的真正位置,從而實現(xiàn)對詞語的判斷。
(4)符號表管理設(shè)計。符號表一個鏈表中的每個元素都是一個結(jié)構(gòu)體,每個結(jié)構(gòu)體包含多個域,如果遇到一個詞語并判斷出它是變量,就將它的名字、類型、值描述出來,存入符號表。
(5)出錯處理設(shè)計。發(fā)現(xiàn)的錯誤必須由用戶對源程序進行改正后再重新編譯,錯誤信息和警告信息包括:出錯的匯編源文件的文件名,出錯行的行號,具體的出錯信息等。
參考文獻
匯編程序范文3
1、匯編語言比高級語言更加接近機器語言,是幾乎所有高級語言的基礎(chǔ)。
2、匯編語言是面向機器的程序設(shè)計語言。在匯編語合中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標(biāo)號(Label)代替地址碼。這樣用符號代替機器語言的二進制碼,就把機器語言變成了匯編語言。于是匯編語言亦稱為符號語言。
使用匯編語言編寫的程序,機器不能直接識別,要由一種程序?qū)R編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編程序把匯編語言翻譯成機器語言的過程稱為匯編。
3、由于匯編語言依賴于硬件體系,且助記符量大難記,于是人們又發(fā)明了更加易用的所謂高級語言。在這種語言下,其語法和結(jié)構(gòu)更類似普通英文,且由于遠離對硬件的直接操作,使得一般人經(jīng)過學(xué)習(xí)之后都可以編程。高級語言通常按其基本類型、代系、實現(xiàn)方式、應(yīng)用范圍等分類。
(來源:文章屋網(wǎng) )
匯編程序范文4
Asmedit與Alab分別是O Love& Tels及kurtg開發(fā)的DOS環(huán)境下的匯編IDE,可配置多種匯編編譯器和鏈接器工作,具備高亮顯示、數(shù)字文本分色顯示,與經(jīng)典的Borland C++3.1環(huán)境十分相似,一直被國內(nèi)外匯編程序員喜愛。Asmedit與Alab以前需要注冊,現(xiàn)在已經(jīng)是免費軟件,在網(wǎng)上很容易搜索到。
我近來因項目開發(fā)所需,分別下載到這兩個軟件,卻發(fā)現(xiàn)它們在Tasm5.0下能夠很好工作,在Masm6.11下只能編譯而無法鏈接。每次執(zhí)行l(wèi)ink.exe鏈接程序時,系統(tǒng)均出現(xiàn)內(nèi)存段地址出錯或DOS保護模式錯的信息。經(jīng)過近一個月時間的調(diào)試、測試,終于解決了這個問題。本文給出有關(guān)的技巧,供廣大匯編程序愛好者分享。
我采用的操作系統(tǒng)為DOS6.22。經(jīng)測試在 Tasm3.0下出現(xiàn)問題,加上Asmedit/Alab均為依托BORLAND公司產(chǎn)品開發(fā)出來的,因此,我先考慮的問題是由BORLAND公司的DOS保護模式接口DPMI資源管理的問題。我首先利用1996年出版的隨Tasm5.0發(fā)行的DPMI資源管理工具DPMI16BI.OVL、RTM.EXE、RTMRES.EXE覆蓋Asmedit/Alab自帶的1992年出版的對應(yīng)文件,則發(fā)現(xiàn)對于Tasm系列,問題已經(jīng)解決。在Tasm系列下,Asmedit/Alab均能順利工作。但是仍然無法在Aasm6.11下工作。
我參考其文檔,還是認為問題在DPMI方面,于是采用QEMM虛擬內(nèi)存管理專用工具來進行操作系統(tǒng)配置管理,結(jié)果還是不能解決問題。
經(jīng)過長時間嘗試失敗后,我采用Masm5.1進行了測試,結(jié)果發(fā)現(xiàn)問題不再出現(xiàn)。于是意識到,問題在Masm6.11的鏈接工具Link.exe上。那么為什么Masm5.1沒有問題而Masm6.11會有問題呢?經(jīng)過思考,我得到這樣的結(jié)論:Masm5.1采用的鏈接工具是純16位的,Masm6.11是16位與32位兼容的,二者在內(nèi)存使用上的機制完全不同。看來需要一個能夠與Masm6.11兼容的比Masm5.1性能更好的鏈接器。于是我在微軟的網(wǎng)站下載98DDK所提供的LNK563。一經(jīng)測試,問題立刻解決。至此,我將此過程整理如下:
1.下載Asmedit或Alab的匯編IDE;
2.下載98DDK之LNK563;
3.安裝Asmedit或Alab,用Tasm5.0的DPMI16BI.OVL、RTM.EXE、RTMRES.EXE覆蓋Asmedit/Aalab自帶對應(yīng)文件;
匯編程序范文5
關(guān)鍵詞: Proteus;微機原理與接口技術(shù);仿真設(shè)計
中圖分類號:G434 文獻標(biāo)識碼:A 文章編號:1671-7597(2012)0910060-01
0 引言
Proteus是英國Labcenter公司開發(fā)的電路分析與實物仿真及印刷電路板設(shè)計軟件。它主要有ISIS和ARES兩部分組成,ISIS的主要功能是原理圖設(shè)計及電路原理圖的交互仿真,ARES主要用于印制電路板的設(shè)計[1]。ISIS提供的Protues VSM(Virtual System Modeling)實現(xiàn)了混合式的SPICE電路仿真,它將虛擬儀器、高級圖表應(yīng)用、CPU仿真,以及第三方程序開發(fā)與調(diào)試環(huán)境有機的結(jié)合起來,在搭建硬件模型之前即可在個人計算機上完成原理圖設(shè)計、電路分析及程序代碼實時仿真、測試及驗證。從Proteus 7.5版開始增加了對8086CPU的仿真,為微機原理與接口技術(shù)(以下簡稱“微機接口”)的仿真提供了實驗平臺。
1 微機接口仿真設(shè)計
1.1 仿真實驗類型
在Proteus中,可以完成以下微機接口實驗類型:定時/計數(shù)器仿真實驗、并行接口芯片仿真實驗、串行接口芯片仿真實驗、基本I/O仿真實驗、中斷仿真實驗、數(shù)模轉(zhuǎn)換仿真實驗、模數(shù)轉(zhuǎn)換仿真實驗、存儲體擴展仿真實驗。
1.2 電路原理圖設(shè)計
Proteus ISIS通過層次設(shè)計形式支持多圖紙設(shè)計。當(dāng)設(shè)計電路相對簡單時,可以直接在主電路圖中搭建譯碼電路。對于一個較大、較復(fù)雜的電路圖,不可能將這個電路圖畫在一張圖紙上,利用層次電路圖可以大大提高設(shè)計效率,也就是將這種復(fù)雜的電路圖根據(jù)功能劃分為幾個模塊,做到多層次并行設(shè)計。
基本設(shè)計過程描述如下:① 運行Proteus ISIS創(chuàng)建新文檔;② 添加元件到對象選擇器,并根據(jù)需要移動、刪除元件、調(diào)整元件方向、編輯元件屬性;③ 連線,Proteus ISIS有無模式連線、自動連線、動態(tài)光標(biāo)顯示三種連線模式。上述過程第二步,若在Proteus ISIS沒有適合微機接口的元件,則可定制自己的元件,定制方法有3種:方法一,用Proteus VSM SDK開發(fā)仿真模型[2],并制作元件;方法二,在已有的元件基礎(chǔ)上進行改造,例如,把元件改成總線接口;方法三,利用已制作好(現(xiàn)成)的元件,可以到網(wǎng)上下載一些新元件并把它們添加到自己的元件庫里。
1.3 仿真實例——并行接口芯片8255A的應(yīng)用
1.3.1 功能說明。本例結(jié)合8255A的使用,說明翻轉(zhuǎn)法行列式鍵盤的運用及七段數(shù)碼管的工作原理。該電路用到的仿真元件包括8086(微處理器)、74LS373(三態(tài)輸出的八D透明鎖存器)、74LS02(與非門)、74154(4-16譯碼器)、74273(八D型觸發(fā)器)、4078(8輸入與非門)、8255A(可編程24位并行接口)、LED-GREEN(綠色LED發(fā)光管)、NOT(非門)、BUTTON(按鈕)、7SEG-COM-CATHOD(七段紅色共陰極數(shù)碼管)、RES(電阻)。
1.3.2 電路設(shè)計。在本例中,不采用層次電路圖,而是直接在主電路圖中搭建譯碼電路,如圖1所示。選用IO3作為8255A的片選地址線,從而可見8255A的起始地址為30H。
對于8255A的3個并行口,選用C口的低4位和高4位分別接4×4鍵盤的行列信號線,選用B口接LED,選用A口驅(qū)動數(shù)碼管,數(shù)碼管采用靜態(tài)共陰極接法。實現(xiàn)當(dāng)有一按鍵按下時,LED和數(shù)碼管均能顯示其按鍵值。數(shù)碼管和鍵盤實驗電路分別如圖2和圖3所示。
2 編譯器設(shè)置和仿真調(diào)試
首先,設(shè)置外部代碼編輯器。將masm32文件夾(包含匯編程序ml.exe、鏈接程序link.exe和批處理文件masm32.bat)復(fù)制到工作盤下,并修改masm32.bat文件的有關(guān)內(nèi)容。接著,添加源代碼并選擇編譯器。需要注意的是,由于Proteus是器件級的仿真過程,匯編程序的運行仿真是在無操作系統(tǒng)支持的狀態(tài)下進行的,所以仿真時在匯編程序中不再支持DOS和BIOS調(diào)用。單擊仿真盤框中的運行按鈕,電路進入仿真狀態(tài)。在默認設(shè)置下,系統(tǒng)會彈出兩個窗口:一個是源程序調(diào)試窗口;另外一個是寄存器窗口。在源程序調(diào)試窗口單擊某行,使該行高亮顯示后,按F9鍵就可以設(shè)置斷點,按F12鍵可使程序運行。通過觀察寄存器窗口的寄存器值的編號,來檢測指令的運行情況。
3 結(jié)束語
雖然,目前Proteus 7.5版對8086CPU的虛擬仿真僅能提供最小模式下的仿真[3],但即便如此Proteus也基本能支持“微機原理與接口技術(shù)”課程教學(xué)內(nèi)容,完成大部分主要仿真實驗。相信將來的Proteus對8086CPU的支持會越來越完善。
項目:百色學(xué)院科研項目(百院字[2010]156號):基于Proteus的微機接口虛擬實驗的設(shè)計與開發(fā)(2010KB14)
參考文獻:
[1]Labcenter公司Proteus用戶手冊.
[2]周靈彬、張靖武,創(chuàng)建Proteus動態(tài)器件仿真模型的技術(shù)[J].現(xiàn)代電子技術(shù),2009(12):152-155.
[3]吉向東、李新鄂,基于Proteus的微機原理實驗仿真[J].信息技術(shù),2010(2):36-39,44.
匯編程序范文6
C語言是在B語言的基礎(chǔ)上完善形成的。1967年,英國的MartinRichards推出了BCPL語言,且在1970年,美國的KenThompson以BCPL語言為基礎(chǔ)推出了B語言。而B語言的功能有限、語言簡單,并不能完全滿足計算機軟件編程需要。在此基礎(chǔ)上,許多研究者加強對計算機編程語言的研究,經(jīng)過多次試驗,在B語言的基礎(chǔ)上,對其進行完善,最終在1972年美國貝爾實驗室D.M推出了C語言。1978年后,大、中、小型計算機對C語言進行移植,將其作為系統(tǒng)設(shè)計語言,為系統(tǒng)程序編寫提供條件。在各種計算機編程語言中,一切計算機語言的基礎(chǔ)是C語言。它是一門高級語言,靈活方便,具有匯編語言、高級語言的特點,簡潔緊湊。同時,C語言可移植性強,應(yīng)用廣泛,表達力強、功能豐富,適用于多種操作系統(tǒng),可進行自由書寫,在信息技術(shù)發(fā)展方面發(fā)揮積極作用。
2軟件編程技巧
2.1C語言的特有函數(shù)在計算機軟件編程中,每一個函數(shù)都具有一定的功能,而在C語言編程過程中,需要應(yīng)用一些特有函數(shù)。對于函數(shù)而言,函數(shù)名對函數(shù)功能進行反映,因此,在定義函數(shù)的過程中,程序員需要定義函數(shù)名字、參數(shù)名、返回值類型等。同時,由于在編程過程中,C編譯系統(tǒng)提供庫函數(shù),且該系統(tǒng)首先定義好了這些函數(shù),因此在調(diào)用程序時,程序員通過#include指令”,在所有文件中引入相關(guān)的頭文件,從而便可實現(xiàn)程序調(diào)用。例如,在運用程序時,當(dāng)應(yīng)用到sqrt函數(shù)時,頭文件中必須包含#include“string.h”,以此確保程序的正常運行。
2.2指針的靈活運用在軟件編程中,指針的使用極為重要,賦值的實現(xiàn)需要指針的控制,從而建立變量關(guān)系,且編程的難度與指針運用的大小密切相關(guān)。因此,在復(fù)雜編程工作的完成中,程序員需要熟練運用指針,明確指針使用的作用,進行編程。指針是特殊類型變量的一種,可幫助程序員解決程序設(shè)計中遇到的問題,其具有指針名、值、指針類型3要素。在編程過程中,使用者需要對指針類型、指針名進行合理、科學(xué)定義,對其賦值,從而對指針、變量進行區(qū)分。同時,在指針調(diào)用過程中,利用C語言的特有函數(shù)科學(xué)、準確定義函數(shù),并按照算法編程的方式,利用流程圖表達算法內(nèi)容。此外,在函數(shù)編程過程中,程序員具體設(shè)置函數(shù)的名字、參數(shù)名、返回值類型,設(shè)置好指令,且在C語言設(shè)置過程中,具體確定文件知識、位運算,確保其滿足程序中的具體要求,明確二進制的對象。對于文件中包含的程序文件、數(shù)據(jù)文件,應(yīng)將它們之間的步驟設(shè)置好,從而為數(shù)據(jù)查找提供方便。
2.3位運算及算法技巧在計算機高級語言的運算方法中,C語言的重要特點是位運算。位運算的對象是二進制,具有唯一性、獨特性,是計算機軟件編程、程序運行的基礎(chǔ),其根據(jù)相關(guān)程序要求的進行符合要求的運算。同時,運算、程序運行過程中,程序文件必不可少,在編程中,程序設(shè)計員需要在文件中存儲程序,方便數(shù)據(jù)查找,提高運行效率。此外,在程序設(shè)計中,程序的靈魂是算法,算法技巧的掌握對程序設(shè)計極為關(guān)鍵。算法可用自然語言、流程圖表述,而在用流程圖表示算法時,要求程序員對流程圖符號進行熟練掌握,并具備牢固的數(shù)學(xué)知識,提高編程效率。
3計算機軟件編程中C語言、匯編語言的結(jié)合
3.1匯編語言的嵌入方法隨著科學(xué)技術(shù)的快速發(fā)展,計算機軟件不斷更新,而C語言、匯編語言兩種語言的混合編程是計算機軟件開發(fā)中常使用的方式,以此提高計算機編程、程序開發(fā)效率,實現(xiàn)難度較高的編程任務(wù)。在具體編程中,在C語言程序中嵌入?yún)R編語言,在寄存器的存儲、轉(zhuǎn)換作用下是實現(xiàn)匯編語言的運行。例如,如果在C語言源程序中嵌入一組匯編語句,就需要用大括號擴充嵌入程序,進而添加“asm”,且需要在asm前面放入指令代碼,并用分隔符“:”區(qū)分正常的C語言、匯編語言。其中,嵌入語言以大括號來表示,通過該形式的編程對編程的過程進行簡化。當(dāng)匯編程序嵌入后,程序員定義程序,根據(jù)C語言指出函數(shù),定義函數(shù),并對不同的函數(shù)進行區(qū)分,根據(jù)不同模塊的使用特點,對目標(biāo)文件進行分析,提高編程的可靠性。
3.2鏈接C語言、匯編語言在C語言、匯編語言程序編寫中,需要獨立設(shè)置編譯目標(biāo)代碼,然后實現(xiàn)鏈接。由于C語言、匯編語言程序能夠相互調(diào)用,且多個功能模塊共同組成一個任務(wù),合適的語言獨立編程功能模塊。因此,在編程中,程序員應(yīng)根據(jù)每個模塊特點,設(shè)置編程,形成目標(biāo)文件,使其成為可執(zhí)行文件。同時,在C語言編程過程中,匯編程序需要調(diào)用函數(shù)、定義變量,這樣,程序員就需要對寄存器的使用、參數(shù)傳遞、子程序的返回值、變量及函數(shù)調(diào)用、存儲模式等問題進行考慮,特別需要注意參數(shù)傳遞問題。在編程中,根據(jù)堆棧匯編程序傳遞參數(shù),并按照參數(shù)傳遞原則進行程序編程。例如,在Voidaa(char*p,inti)函數(shù)中,利用匯編語言編寫該函數(shù),在系統(tǒng)調(diào)用在小內(nèi)存模式下進行,寫為aa(&q,n)。而在系統(tǒng)運行中,在堆棧中壓入n,并為了實現(xiàn)對存儲數(shù)據(jù)的存取,傳遞參數(shù)。此外,由于C語言程序、調(diào)用的子程序的編程使用的是同一個堆棧,這樣,就會產(chǎn)生pushbppopbp、sp兩個執(zhí)行指令,設(shè)置這兩個指令,為執(zhí)行過程的使用提供方便。
3.3C語言、匯編語言混合編程實驗分析在混合軟件具體編程中,一般情況下,在5個數(shù)中比較程序功能,從而對最小數(shù)值進行確定。由于匯編的子程序、主程序共同組成了所編程序,運用C語言編寫主程序,利用匯編語言編寫子程序,而最小數(shù)值通過主程序的調(diào)用得到確定。在編程中,用min.c*表示主程序,用qiumin.asm表示子程序,C語言、匯編語言結(jié)合,軟件之間進行交流,從而使程序運行速度得以提高。在程序運行中,需要具體編程程序設(shè)計過程中的內(nèi)存模式、寄存器分配等,確保程序設(shè)計語言的相互協(xié)同,使外部接口處于正常使用狀況,為編程中的外部調(diào)用功能的實現(xiàn)提供保障。
4C語言多項式除法的程序設(shè)計
4.1設(shè)計流程在軟件編程中利用C語言,對計算機軟件的實用性進行探索。在C語言多項式除法的程序設(shè)計中,實驗設(shè)計的建立依據(jù)循環(huán)冗余的結(jié)構(gòu)進行,設(shè)置循環(huán)冗余驗碼編制軟件程序。在此過程中,程序員需先對函數(shù)名稱進行定義,了解函數(shù),對函數(shù)的初始位置進行確定,進而建立數(shù)據(jù)庫。此后,在C語言的基礎(chǔ)上,程序員編程、計算函數(shù),并在此過程中,一個冗余余數(shù)在系統(tǒng)中自動生成,在remainder文件中存儲余數(shù),確定程序的起始文件。最后,根據(jù)系統(tǒng)運行的結(jié)果,結(jié)合軟件需求,程序員科學(xué)分析計算機軟件實驗,此時,如果計算結(jié)果能夠滿足軟件運行需求,則說明軟性運行正常。如果計算結(jié)果不能夠滿足軟件運行需求,則需要程序員仔細檢查軟件編程過程,發(fā)現(xiàn)問題,解決問題。在C語言基礎(chǔ)上,對軟件編程實驗流程進行設(shè)計,簡化編程過程,提高實驗結(jié)果的準確性。
4.2程序應(yīng)用很多領(lǐng)域的發(fā)展過程都需要運用到C語言多項式除法程序的編程,該編程使軟件應(yīng)用的實際價值得到最大程度的發(fā)揮,并拓寬了混合語言在多項式除法的應(yīng)用范圍。在C語言、編程語言混合語言的使用中,程序員應(yīng)及時定義函數(shù),通過函數(shù)名對函數(shù)性質(zhì)進行準確體現(xiàn),獲取準確的余數(shù)結(jié)果,確保計算機軟性系統(tǒng)高效運行。
5結(jié)語