版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、目 錄摘 要11概述21.1任務(wù)要求21.2編程環(huán)境22分析32.1程序功能32.2設(shè)計(jì)思路33程序流程圖43.1主程序流程圖43.2子程序流程圖54程序調(diào)試85心得與體會9參考文獻(xiàn)11摘 要用匯編語言編寫程序能夠直接利用硬件系統(tǒng)的特性直接對位、字節(jié)或字寄存器、存儲單元、I/O端口進(jìn)行處理,同時也能直接使CPU指令系統(tǒng)和指令系統(tǒng)提供的各種尋址方式編出高質(zhì)量的程序。匯編程序是最早也是最成熟的一種系統(tǒng)軟件,能夠?qū)R編語言源程序翻譯成機(jī)器語言程序,可以自動對源程序進(jìn)行檢查給出錯誤信息等。本說明書主要介紹了用匯編語言編寫程序計(jì)算比賽成績的設(shè)計(jì)思路和編程流程圖,以及調(diào)試程序時的心得與體會。關(guān)鍵詞 匯編
2、流程比賽評分系統(tǒng)程序設(shè)計(jì)1概述1.1任務(wù)要求 比賽選手人數(shù)控制在30以下; 9個評委,每個評委給分范圍為010分(整數(shù)),隨機(jī)給出分?jǐn)?shù) 9個評委的給分中,去掉一個最高分和一個最低分,余下7位評委的平均分即為參加者的得分(精確到小數(shù)點(diǎn)后一位); 將分?jǐn)?shù)在屏幕中間位置處用紅色顯示出來; 將參加比賽的選手的排名順序顯示出來。1.2編程環(huán)境把匯編語言翻譯成機(jī)器語言的過程稱為匯編,為了實(shí)現(xiàn)這一過程正確運(yùn)行匯編語言,系統(tǒng)需具備以下編輯程序:Masm.exe Link.exeDebug.exeMasm為宏匯編程序,負(fù)責(zé)對源文件進(jìn)行匯編;link為連接程序,把匯編后產(chǎn)生的目標(biāo)模塊連接在一起,產(chǎn)生可執(zhí)行文件;d
3、ebug是調(diào)試程序,它是調(diào)試匯編語言程序必不可少的工具。2分析 根據(jù)設(shè)計(jì)任務(wù)書分析得出程序要求具備的功能,進(jìn)而寫出自己的設(shè)計(jì)思路。2.1程序功能根據(jù)設(shè)計(jì)任務(wù)要求可以得出所涉及程序必須具有以下功能(1) 顯示選手序號(2) 顯示9個評委的評分(3) 用紅色字體顯示每位選手的平均分(4) 根據(jù)選手平均得分排序(本程序按照分?jǐn)?shù)由高到低排列)2.2設(shè)計(jì)思路主要采用循環(huán)結(jié)構(gòu)和子程序調(diào)用的基本結(jié)構(gòu)形式,編寫程序產(chǎn)生9個010的隨機(jī)數(shù),找出這9個數(shù)中的最大和最小的數(shù),即評委給出的最高分和最低分,分別保存。再對這9個數(shù)求和,減去前面保存的最大數(shù)和最小數(shù),所得的值除以7,即為選手的平均分,分別保存整數(shù)部分和小數(shù)
4、部分。保存該分?jǐn)?shù)并在屏幕中間用紅色顯示出來。以上過程循環(huán)30次,然后根據(jù)平均分的高低對選手進(jìn)行排序并調(diào)用BIOS功能使平均分為紅色顯示。為了使程序方便閱讀和修改,減少編程工作量,節(jié)省存儲空間,并易于實(shí)現(xiàn)程序的模塊化,在編寫程序的時候盡可能的把一些具有特定功能的程序段獨(dú)立出來編寫成可以被其他程序多次調(diào)用的子程序,然后在主程序需要的地方調(diào)用。匯編程序中的CALL和RET指令就是完成子程序調(diào)用和返回功能的。有了以上基本的設(shè)計(jì)思路,便可以著手準(zhǔn)備開始編寫流程圖,然后再查閱相關(guān)資料鞏固關(guān)于匯編語言指令系統(tǒng)以及尋址方式的知識和使用技巧,復(fù)習(xí)調(diào)試程序的方法以及常見問題的解決辦法等等。3程序流程圖流程圖是算法
5、的圖形描述,它以圖形的方式把解決問題的先后次序和程序的邏輯結(jié)構(gòu)直觀地、形象地描述出來,使得編程的思路清晰,有利于編制、調(diào)試程序。3.1主程序流程圖開始從40H端口讀入一個隨機(jī)數(shù)除以11產(chǎn)生9個010的隨機(jī)整數(shù),保存找出9個隨機(jī)數(shù)中的最大值和最小值9個數(shù)相加減去最大值、最小值除以7得平均分,保存小于30次控制循環(huán)30次 大于等于30次將各選手按照平均分降序排列顯示選手序號、9個評委的評分和紅色字體的平均分 結(jié)束圖3-1 主程序流程圖為了使程序簡潔明了和易于調(diào)試查錯,因此把流程圖分成了幾個部分。主程序的流程圖如上圖3-1所示,由流程圖中可以看出程序的主要設(shè)計(jì)思路和整體框架。3.2子程序流程圖對于一
6、些具有特殊功能的程序可以編制成子程序,通過調(diào)用來實(shí)現(xiàn)功能,這樣有利于程序的讀和寫,也易于查錯,因此本題將顯示指定字符串、顯示十進(jìn)制ASCII碼、查找最高分最低分的過程編寫成子程序以供調(diào)用,方便簡潔明了,可以更快地確定編程的方向和目的,找出解決問題的最佳途徑。由于顯示指定字符串、顯示十進(jìn)制ASCII碼涉及DOS功能調(diào)用,指令簡單,為匯編者所熟記的知識,可以不用流程圖再次贅述。查找最高分最低分的流程圖如圖3-2所示,從圖中可以看出,找出最高分的方法和查找最低分的方法類似,只需更改其中的個別指令,即可達(dá)到目的。開始開始取出一個數(shù)取出一個數(shù)與下一個數(shù)作比較大于等于?與下一個數(shù)作比較小于等于?與下一個數(shù)
7、作比較與下一個數(shù)作比較與下一個數(shù)作比較大于等于?不變替換N不變替換N不變NNYNY替換不變保存該數(shù)為最高分結(jié)束保存該數(shù)為最高分保存該數(shù)為最高分保存該數(shù)為最高分結(jié)束圖3-2 查找最高分和最低分程序流程圖將各個選手按照所得的平均分排序的程序流程圖如圖3-3所示。由于參賽選手的人數(shù)不多,采用冒泡法排序可以達(dá)到快速、準(zhǔn)確的效果。數(shù)據(jù)的排序采用冒泡法降序排列,將其兩兩比較。前一個數(shù)較大,則不改變原位置,否則兩數(shù)交換,一次將全部數(shù)據(jù)排序,排序的次數(shù)由需要排序的數(shù)據(jù)個數(shù)決定。這種排序方法是從最低部的元素開始進(jìn)行比較,較小的元素將會像氣泡一樣往上冒。在排序的過程中,外循環(huán)遍歷要排序的元素,內(nèi)循環(huán)用于挑選出最值
8、。內(nèi)循環(huán)用于將相鄰的兩個元素進(jìn)行比較,將小的元素調(diào)到大元素的前頭,內(nèi)循環(huán)的循環(huán)次數(shù)表示相鄰元素的交換趟數(shù)。結(jié)束開始此外,在整個程序中,除了這三個主要環(huán)節(jié),還需要編寫子程序用于顯示字符串,產(chǎn)生隨機(jī)數(shù)等等,這些模塊的編程思路比較直觀,所以在流程圖中沒有著重表明。比較相鄰兩個數(shù)的大小循環(huán)29次前一個數(shù)大?NY順序交換順序不變小于29大于等于29 保存結(jié)果并顯示圖3-3 將平均成績排序的流程圖有了編寫匯編語言計(jì)算比賽成績的思路和流程圖之后,通過查找一些不常見的指令和查閱相關(guān)的參考資料,就可以編寫出初步的源程序。4程序調(diào)試經(jīng)過調(diào)試程序,得出隨機(jī)給出選手得分的運(yùn)行的結(jié)果如圖4-1所示。圖4-1 隨機(jī)給出的
9、選手得分最終排名和選手所得的分?jǐn)?shù)如圖4-2所示。圖中給出了24位選手的成績和排名,排名順序?yàn)閺母叻值降头?,最后一列為各個選手所得的平均分,用紅色顯示。圖4-2 選手排名順序5心得與體會在本次比賽評分系統(tǒng)程序的設(shè)計(jì)過程中,本小組各成員積極配合想算法,分工協(xié)作寫程序,歷經(jīng)百般波折,通過幾個晝夜的艱苦奮戰(zhàn),終于在我們幾近絕望的最后關(guān)頭突然跳出來一個窗口,程序運(yùn)行成功了,大家手舞足蹈、歡欣雀躍,總算努力沒有白費(fèi),俗話說得好:堅(jiān)持,就意味著一切。本次微機(jī)原理課程設(shè)計(jì)感受頗深,受益匪淺。由于初學(xué)匯編語言,再加上平時的習(xí)題都很簡單而且要求不高,所以在看到題目的時候,一開始有些傻眼不知從何著手,仔細(xì)看了看想了
10、想查了查資料后發(fā)現(xiàn)把問題分塊處理,各個擊破,最后再擰成一股繩,問題貌似就變得簡單很多,主要是如何擰成一股繩,從何處開始擰,也就是如何把各個子程序在何處調(diào)用才能實(shí)現(xiàn)功能,這個問題確實(shí)需要大動腦筋才能確保最后的結(jié)果和設(shè)計(jì)要求相符。第一次上機(jī)用匯編編寫程序,第一次接觸用匯編語言程序產(chǎn)生隨機(jī)數(shù),第一次嘗試著編寫子程序,也是第一次聽說還有BIOS功能調(diào)用。萬事開頭難,但總要開個頭,第一天沒著落,就想啊,查資料,通過小組成員討論后決定各成員分工合作,每人負(fù)責(zé)一個功能,最后一起合成調(diào)試。然后各自就開始努力的工作了,先是根據(jù)要求把可能用到的書中的知識復(fù)習(xí)鞏固了一遍,然后對準(zhǔn)問題查閱相關(guān)資料,遇到相似的問題就借
11、鑒過來,再根據(jù)實(shí)際問題需要編寫自己的程序,就這樣一步步按照流程做了下來,途中遇到了諸多問題,但是問題必須解決才能繼續(xù)往下寫,雖然好些天疲于奔命于圖書館、書店,但是有壓力就有動力,逐漸的問題變得越來越少。編寫程序過程中,開始是一塌糊涂,對一些偽指令和DOS功能調(diào)用方便掌握不牢固,編寫起程序來很不靈活,經(jīng)過查閱資料和詢問同學(xué),在邊摸索邊實(shí)踐的過程中,我體會到了編寫程序不僅需要廣泛深入的知識面,還需要靈活的頭腦和嚴(yán)密的邏輯思維,稍有考慮不到的方面,程序就會“沒有生成OBJ文件”。循序漸進(jìn)的,我終于編寫出了我腦子里所想的初步程序,但輸入到MF2KP集成開發(fā)環(huán)境中運(yùn)行時,一開始的熱情瞬間就沒了,程序無法
12、編譯,不能生成.obj文件,想了許久,明白了一點(diǎn):編寫程序最主要的其實(shí)不是在于如何編寫而是成百上千次甚至上萬次的不斷調(diào)試。于是,我開始了調(diào)試程序這復(fù)雜而又極其漫長的過程。最終在小組成員共同的努力下,我們成功了,一股成就感襲上心頭,各個都笑了,也松了口氣,回頭想想,不僅鞏固了所學(xué)知識,而且鍛煉我們理論結(jié)合實(shí)際的能力和團(tuán)隊(duì)合作能力。同時也發(fā)現(xiàn)了些許不足,我敢肯定的是這次發(fā)現(xiàn)的問題被牢牢記住了,還起了個加深記憶的作用。通過本次課設(shè)我發(fā)現(xiàn),定義的變量是可以直接用inc、dec的,即對其內(nèi)容值加1、減1,但是要注意,雖然變量可以看成符號地址,不過此處只是把它們的數(shù)據(jù)內(nèi)容加1或減1,而非對其地址,之前我以
13、為不能直接對定義好的變量用inc、dec;使用十六進(jìn)制數(shù)時,若第一個數(shù)位值是字母,要在在其前加0,否則會被認(rèn)為是變量;寄存器、變量之間傳遞值時,位數(shù)要一致;使用push后記得相應(yīng)地使用pop,還要注意二者應(yīng)反序,即push ax,push bx,push cx與pop cx,pop bx,pop ax相對應(yīng);在子過程中的 ret 處之前應(yīng)放上相應(yīng)地放上pop語句,而子過程的入口處應(yīng)相應(yīng)放上push語句;要養(yǎng)成良好的程序書寫習(xí)慣,比如標(biāo)號對齊、參數(shù)對齊、注釋對齊,這樣看起來賞心悅目,也不容易出錯,也易于排錯修改;標(biāo)號最好采用有意義的英文,這樣比較直觀,注釋盡量詳細(xì)準(zhǔn)確,便于閱讀,而且有利于其它程
14、序中作為子程序模塊的調(diào)用。還有要注意典型程序模塊的積累,再復(fù)雜的程序也是由一個個小程序模塊組成的。這些問題是這次課程設(shè)計(jì)體會比較深刻的幾個方面。 總而言之,通過本次比賽評分系統(tǒng)程序的設(shè)計(jì),不僅鞏固了所學(xué)匯編知識,而且在知識的廣面和深面上有了相當(dāng)程度的拓展。幾個枯燥的字母被我們這一折騰竟然變得有了活力,使我感覺到匯編強(qiáng)大的魔力,編程就像日常生活一樣,是個不斷探索和發(fā)現(xiàn)的過程,途中必然會遇到困難,前面出現(xiàn)坎兒,是因?yàn)閷γ婢褪瞧皆?,編程序要知道:?jiān)持,就意味著一切。參考文獻(xiàn)1沈美明,溫冬蟬.IBM-PC匯編語言程序設(shè)計(jì)(第2版).清華大學(xué)出版社,20012沈美明,溫冬蟬.IBM-PC匯編語言程序設(shè)計(jì)
15、例題習(xí)題集.清華大學(xué)出版社,19913陸忠華.匯編語言程序設(shè)計(jì).科學(xué)出版社,19934遲成文,王保秀.匯編語言程序設(shè)計(jì).中國科學(xué)技術(shù)大學(xué)出版社,19935徐建民.匯編語言程序設(shè)計(jì).電子工業(yè)出版社.2005年6彭虎,周培玲,傅忠謙.微機(jī)原理與接口技術(shù)(第2版).電子工業(yè)出版社,2008附錄Code Segment Assume CS:Code,DS:Code; ; 功能:顯示指定地址(Str_Addr)的字符串; 入口:; Str_Addr字符串地址(要求在數(shù)據(jù)段); 用法: Output Str_Addr; 用法舉例:Output PromptStrOutput MACRO Str_Addr
16、push ax lea dx,Str_Addr mov ah,9 int 21h pop ax EndM; ; 功能:把AX中的二進(jìn)制無符號數(shù)轉(zhuǎn)換成顯式的十進(jìn)制ASCII碼,并送顯示屏顯示; 入口:AX=二進(jìn)制數(shù) ; 出口:在當(dāng)前光標(biāo)位置顯示轉(zhuǎn)換后的ASCII碼數(shù)字 Dec_ASCII Proc Near mov dh,10 div dh or ax,3030h ;將兩位十進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼 cmp al,30h ja $+4 mov al,20h ;若十位數(shù)是0,以空格代替 push ax mov ah,0eh int 10h ;顯示十位數(shù) pop ax xchg ah,al mov
17、ah,0eh int 10h ;顯示個位數(shù) ret Dec_ASCII EndP; Commentators equ 9 ;評委人數(shù)Contestants equ 23 ;參賽選手人數(shù)Press_Key db 0ah,0dh,The complated. Press any key to exit.$ Start: mov di,64 ;顯示緩沖區(qū)偏移地址 mov ax,0b800h ;顯示緩沖區(qū)段地址 mov es,ax mov al,20h mov ah,4 ;字符顏色(紅色) mov cx,Contestants ;參賽選手人數(shù) cldLine: push cx mov cx,3 rep
18、 stosw add di,154 ;顯示緩沖區(qū)下一行同列偏移地址 pop cx loop Line push cs pop ds ;使數(shù)據(jù)段與代碼段同段 push cs pop es ;使附加段與代碼段同段; ; 評委隨機(jī)打分 cld lea si,Buffer ;數(shù)據(jù)緩沖區(qū)地址(選手成績鏈表) mov di,si add di,Contestants*2 ;選手成績存放地址 mov cx,Contestants ;參賽選手人數(shù) mov dl,11 ;除數(shù)Grade_0: push cx mov si,di ;選手成績地址 inc si inc si ;下一個鏈表節(jié)點(diǎn)地址 mov ax,Co
19、ntestants+1 sub ax,cx ;選手序號 stosb ;保存選手序號 xor bx,bx ;BH=,最高分初值,BL=最低分初值 xor dh,dh ;選手總分初值 mov cx,Commentators ;評委人數(shù)Grade_1: xor al,al out 43h,al in al,40h xor ah,ah div dl xchg ah,al ;舍棄商數(shù),取余數(shù),作為某評委的打分 stosb ;保存一個評委打分 add dh,al ;累計(jì)評委打分 cmp bh,al jae $+4 ;最高分=此評委打分 mov bh,al ;保存新的最高分 cmp bl,al jbe $+
20、4 ;最低分=此評委打分 mov bl,al ;保存新的最低分 loop Grade_1 mov al,dh sub al,bh ;減去一個最高分 sub al,bl ;減去一個最低分 stosb ;保存最后得分 pop cx loop Grade_0; ; 用冒泡排序法對選手最后得分降序排序 lea si,Buffer ;選手成績鏈表地址 mov cx,Contestants ;參賽選手人數(shù) dec cx ;外循環(huán)次數(shù)Sorting: push cx ;入棧保存外循環(huán)次數(shù) push si ;入棧保存數(shù)組地址Compare: push si pop di ;當(dāng)前數(shù)組元素地址賦給目的變址寄存器,
21、以備交換之用 lodsw ;將當(dāng)前數(shù)組元素讀入累加器 mov bx,ax mov al,bx10 ;將當(dāng)前最后得分讀入累加器AL mov bx,si ;相鄰的下一個選手信息地址 cmp al,bx10 ;當(dāng)前選手最后得分與相鄰的下一個選手最后得分相比較 jae NextOne ;若大于或等于,不作數(shù)據(jù)交換,處理下一個數(shù)組元素 mov ax,di ;若小于,讀入當(dāng)前選手信息鏈表節(jié)點(diǎn) xchg ax,si ;交換鏈表元素 mov di,ax ;保存數(shù)值較大者節(jié)點(diǎn)地址NextOne: loop Compare ;處理下一個數(shù)組元素 pop si ;數(shù)組地址出棧 pop cx ;外循環(huán)次數(shù)出棧 loop Sorting ;下一趟比較; ; 按總成績降序顯示所有選手各評委打分、平均得分 mov cx,Contestants ;參賽選手人數(shù) xor bh,bh ;顯示頁號0Contestant: push cx push si mov si,si ;讀
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)游泳小學(xué)作文15篇
- 《打電話》教案匯編九篇
- 大學(xué)生實(shí)習(xí)報告(15篇)
- 2024年12月 《馬克思主義基本原理概論》復(fù)習(xí)題
- 關(guān)于五年級單元作文300字10篇
- 2024年五年級語文上冊 第一單元 語文園地一教學(xué)實(shí)錄 新人教版
- 公司財(cái)務(wù)個人工作計(jì)劃5篇
- 2019年資產(chǎn)負(fù)債表(樣表)
- 轉(zhuǎn)讓協(xié)議書范文七篇
- 個人房屋租賃合同范文合集五篇
- 上海黃金交易所貴金屬交易員題庫
- 滾筒性能檢驗(yàn)報告
- 蘇州大學(xué)國際金融期末考試題庫20套
- 壓縮映射原理的性質(zhì)和應(yīng)用
- 四年級寒假語文實(shí)踐作業(yè)
- 項(xiàng)目進(jìn)場計(jì)劃及臨建方案
- 蒸汽管道設(shè)計(jì)表(1)
- 通信設(shè)施產(chǎn)權(quán)歸屬
- 提撈采油安全操作規(guī)程
- 京劇英語介紹PPT課件
- in、ing對比辨音練習(xí).doc
評論
0/150
提交評論