比賽評分系統(tǒng)設(shè)計_第1頁
比賽評分系統(tǒng)設(shè)計_第2頁
比賽評分系統(tǒng)設(shè)計_第3頁
比賽評分系統(tǒng)設(shè)計_第4頁
比賽評分系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

技術(shù)》課程設(shè)計說明書摘要 11概述 21.1任務(wù)要求 21.2編程環(huán)境 22分析 32.1程序功能 32.2設(shè)計思路 33程序流程圖 43.1主程序流程圖 43.2子程序流程圖 54程序調(diào)試 85心得與體會 9參考文獻 111 摘要用匯編語言編寫程序能夠直接利用硬件系統(tǒng)的特性直接對位、字節(jié)或字寄存器、存儲單元、I/O端口進行處理,同時也能直接使CPU指令系統(tǒng)和指令系統(tǒng)提供的各種尋址方式編出高質(zhì)量的程序。匯編程序是最早也是最成熟的一種系統(tǒng)軟件,能夠?qū)R編語言源程序翻譯成機器語言程序,可以自動對源程序進行檢查給出錯誤信息等。本說明書主要介紹了用匯編語言編寫程序計算比賽成績的設(shè)計思路和編程流程圖,以及調(diào)試程序時的心得與體會。關(guān)鍵詞匯編流程2a 比賽評分系統(tǒng)程序設(shè)計1概述1.1任務(wù)要求①比賽選手人數(shù)控制在30以下;②9個評委,每個評委給分范圍為0~10分(整數(shù)),隨機給出分數(shù)③9個評委的給分中,去掉一個最高分和一個最低分,余下7位評委的平均分即為參加者的得分(精確到小數(shù)點后一位);④將分數(shù)在屏幕中間位置處用紅色顯示出來;⑤將參加比賽的選手的排名順序顯示出來。1.2編程環(huán)境把匯編語言翻譯成機器語言的過程稱為匯編,為了實現(xiàn)這一過程正確運行匯編語言,系統(tǒng)需具備以下編輯程序:Masm.exeLink.exeDebug.exeMasm為宏匯編程序,負責(zé)對源文件進行匯編;link為連接程序,把匯編后產(chǎn)生的目標模塊連接在一起,產(chǎn)生可執(zhí)行文件;debug是調(diào)試程序,它是調(diào)試匯編語言程序必不可少的工具。3 2分析根據(jù)設(shè)計任務(wù)書分析得出程序要求具備的功能,進而寫出自己的設(shè)計思路。2.1程序功能根據(jù)設(shè)計任務(wù)要求可以得出所涉及程序必須具有以下功能 (1)顯示選手序號 (2)顯示9個評委的評分 (3)用紅色字體顯示每位選手的平均分 (4)根據(jù)選手平均得分排序(本程序按照分數(shù)由高到低排列)2.2設(shè)計思路主要采用循環(huán)結(jié)構(gòu)和子程序調(diào)用的基本結(jié)構(gòu)形式,編寫程序產(chǎn)生9個0~10的隨機數(shù),找出這9個數(shù)中的最大和最小的數(shù),即評委給出的最高分和最低分,分別保存。再對這9個數(shù)求和,減去前面保存的最大數(shù)和最小數(shù),所得的值除以7,即為選手的平均分,分別保存整數(shù)部分和小數(shù)部分。保存該分數(shù)并在屏幕中間用紅色顯示出來。以上過程循環(huán)30次,然后根據(jù)平均分的高低對選手進行排序并調(diào)用BIOS功能使平均分為紅色顯示。為了使程序方便閱讀和修改,減少編程工作量,節(jié)省存儲空間,并易于實現(xiàn)程序的模塊化,在編寫程序的時候盡可能的把一些具有特定功能的程序段獨立出來編寫成可以被其他程序多次調(diào)用的子程序,然后在主程序需要的地方調(diào)用。匯編程序中的CALL和RET指令就是完成子程序調(diào)用和返回功能的。有了以上基本的設(shè)計思路,便可以著手準備開始編寫流程圖,然后再查閱相關(guān)資料鞏固關(guān)于匯編語言指令系統(tǒng)以及尋址方式的知識和使用技巧,復(fù)習(xí)調(diào)試程序的方法以及常見問題的解決辦法等等。4 3程序流程圖流程圖是算法的圖形描述,它以圖形的方式把解決問題的先后次序和程序的邏輯結(jié)構(gòu)直觀地、形象地描述出來,使得編程的思路清晰,有利于編制、調(diào)試程3.1主程序流程圖開始開始從40H端口讀入一個隨機數(shù)除以11產(chǎn)生9個0~10的隨機整數(shù),保存找出9個隨機數(shù)中的最大值和最小值9個數(shù)相加減去最大值、最小值除以7得平均分,保存小于30次控制循環(huán)30次大于等于30次將各選手按照平均分降序排列顯示選手序號、9個評委的評分和紅色字體的平均分結(jié)束5開始取出一個數(shù)與下一個數(shù)作比開始取出一個數(shù)與下一個數(shù)作比較N不變保存該數(shù)為最高分結(jié)束替換Y為了使程序簡潔明了和易于調(diào)試查錯,因此把流程圖分成了幾個部分。主程序的流程圖如上圖3-1所示,由流程圖中可以看出程序的主要設(shè)計思路和整體框3.2子程序流程圖對于一些具有特殊功能的程序可以編制成子程序,通過調(diào)用來實現(xiàn)功能,這樣有利于程序的讀和寫,也易于查錯,因此本題將顯示指定字符串、顯示十進制ASCII碼、查找最高分最低分的過程編寫成子程序以供調(diào)用,方便簡潔明了,可以更快地確定編程的方向和目的,找出解決問題的最佳途徑。由于顯示指定字符串、顯示十進制ASCII碼涉及DOS功能調(diào)用,指令簡單,為匯編者所熟記的知識,可以不用流程圖再次贅述。查找最高分最低分的流程圖如圖3-2所示,從圖中可以看出,找出最高分的方法和查找最低分的方法類似,只需更改其中的個別指令,即開始開始取出一個數(shù)與下一個數(shù)作比較N不變保存該數(shù)為最高分結(jié)束替換Y6 將各個選手按照所得的平均分排序的程序流程圖如圖3-3所示。由于參賽選手的人數(shù)不多,采用冒泡法排序可以達到快速、準確的效果。數(shù)據(jù)的排序采用冒泡法降序排列,將其兩兩比較。前一個數(shù)較大,則不改變原位置,否則兩數(shù)交換,一次將全部數(shù)據(jù)排序,排序的次數(shù)由需要排序的數(shù)據(jù)個數(shù)決定。這種排序方法是從最低部的元素開始進行比較,較小的元素將會像氣泡一樣往上冒。在排序的過程中,外循環(huán)遍歷要排序的元素,內(nèi)循環(huán)用于挑選出最值。內(nèi)循環(huán)用于將相鄰的兩個元素進行比較,將小的元素調(diào)到大元素的前頭,內(nèi)循環(huán)的循環(huán)次數(shù)表示相鄰元素的交換趟數(shù)。此外,在整個程序中,除了這三個主要環(huán)節(jié),還需要編寫子程序用于顯示字符串,產(chǎn)生隨機數(shù)等等,這些模塊的編程思路比較直觀,所以在流程圖中沒有著開始開始比較相鄰兩個數(shù)的大小前一個數(shù)大?N順序交換循環(huán)29次大于等于29保存結(jié)果并顯示結(jié)束順序不變Y有了編寫匯編語言計算比賽成績的思路和流程圖之后,通過查找一些不常見7 的指令和查閱相關(guān)的參考資料,就可以編寫出初步的源程序。a8a4程序調(diào)試經(jīng)過調(diào)試程序,得出隨機給出選手得分的運行的結(jié)果如圖4-1所示。最終排名和選手所得的分數(shù)如圖4-2所示。圖中給出了24位選手的成績和排名,排名順序為從高分到低分,最后一列為各個選手所得的平均分,用紅色顯示。9 5心得與體會在本次比賽評分系統(tǒng)程序的設(shè)計過程中,本小組各成員積極配合想算法,分工協(xié)作寫程序,歷經(jīng)百般波折,通過幾個晝夜的艱苦奮戰(zhàn),終于在我們幾近絕望的最后關(guān)頭突然跳出來一個窗口,程序運行成功了,大家手舞足蹈、歡欣雀躍,總算努力沒有白費,俗話說得好:堅持,就意味著一切。本次微機原理課程設(shè)計感受頗深,受益匪淺。由于初學(xué)匯編語言,再加上平時的習(xí)題都很簡單而且要求不高,所以在看到能實現(xiàn)功能,這個問題確實需要大動腦筋才能確保最后的結(jié)果和設(shè)計要求相符。員討論后決定各成員分工合作,每人負責(zé)一個功能,最后一起合成調(diào)試。然后各自就開始努力的工作了,先是根據(jù)要求把可能用到的書中的知識復(fù)習(xí)鞏固了一遍,然后對準問題查閱相關(guān)資料,遇到相似的問題就借鑒過來,再根據(jù)實際問題需要壓編寫程序過程中,開始是一塌糊涂,對一些偽指令和DOS功能調(diào)用方便掌握不牢固,編寫起程序來很不靈活,經(jīng)過查閱資料和詢問同學(xué),在邊摸索邊實踐的過程中,我體會到了編寫程序不僅需要廣泛深入的知識面,還需要靈活的頭腦和循序漸進的,我終于編寫出了我腦子里所想的初步程序,但輸入到MF2KP集 百上千次甚至上萬次的不斷調(diào)試。于是,我開始了調(diào)試程序這復(fù)雜而又極其漫長的過程。最終在小組成員共同的努力下,我們成功了,一股成就感襲上心頭,各個都笑了,也松了口氣,回頭想想,不僅鞏固了所學(xué)知識,而且鍛煉我們理論結(jié)合實際的能力和團隊合作能力。同時也發(fā)現(xiàn)了些許不足,我敢肯定的是這次發(fā)現(xiàn)的問題被牢牢記住了,還起了個加深記憶的作用。通過本次課設(shè)我發(fā)現(xiàn),定義的變量是可以直接用inc、dec的,即對其內(nèi)容值加1、減1,但是要注意,雖然變量可以我以為不能直接對定義好的變量用inc、dec;使用十六進制數(shù)時,若第一個數(shù)位值是字母,要在在其前加0,否則會被認為是變量;寄存器、變量之間傳遞值時,位數(shù)要一致;使用push后記得相應(yīng)地使用pop,還要注意二者應(yīng)反序,即pushax,,這些問題是這次課程設(shè)計體會比較深刻的幾個方面??偠灾ㄟ^本次比賽評分系統(tǒng)程序的設(shè)計,不僅鞏固了所學(xué)匯編知識, 參考文獻[1]沈美明,溫冬蟬.IBM-PC匯編語言程序設(shè)計(第2版).清華大學(xué)出版社,2001[2]沈美明,溫冬蟬.IBM-PC匯編語言程序設(shè)計例題習(xí)題集.清華大學(xué)出版社,1991[3]陸忠華.匯編語言程序設(shè)計.科學(xué)出版社,1993[4]遲成文,王保秀.匯編語言程序設(shè)計.中國科學(xué)技術(shù)大學(xué)出版社,1993[5]徐建民.匯編語言程序設(shè)計.電子工業(yè)出版社.2005年[6]彭虎,周培玲,傅忠謙.微機原理與接口技術(shù)(第2版).電子工業(yè)出版社,2008 附錄CodeSegmentAssumeCS:Code,DS:Code;----------------------------------;功能:顯示指定地址(Str_Addr)的字符串;入口:;Str_Addr=字符串地址(要求在數(shù)據(jù)段);用法:OutputStr_Addr;用法舉例:OutputPromptStrOutputMACROStr_Addrpushaxleadx,Str_Addrmovah,9int21hpopaxEndM;----------------------------------;功能:把AX中的二進制無符號數(shù)轉(zhuǎn)換成顯式的十進制ASCII碼,并送顯示屏顯示;入口:AX=二進制數(shù);出口:在當(dāng)前光標位置顯示轉(zhuǎn)換后的ASCII碼數(shù)字Dec_ASCIIProcNearmovdh,10divdhorax,3030h;將兩位十進制數(shù)轉(zhuǎn)換成ASCII碼cmpal,30hja$+4moval,20h;若十位數(shù)是0,以空格代替pushaxmovah,0ehint10h;顯示十位數(shù)popax xchgah,almovah,0ehint10h;顯示個位數(shù)retDec_ASCIIEndP;----------------------------------CommentatorsequContestantsequPress_Keydb9;評委人數(shù)23;參賽選手人數(shù)0ah,0dh,'Thecomplated.Pressanykeytoexit...$'Start:movdi,64;顯示緩沖區(qū)偏移地址movax,0b800h;顯示緩沖區(qū)段地址moves,axmoval,20hmovah,4;字符顏色(紅色)movcx,Contestants;參賽選手人數(shù)cld@@Line:pushcxmovcx,3repstoswadddi,154;顯示緩沖區(qū)下一行同列偏移地址popcxloop@@Linepushcspopds;使數(shù)據(jù)段與代碼段同段pushcspopes;使附加段與代碼段同段;----------------------------------;評委隨機打分cldleasi,Buffer;數(shù)據(jù)緩沖區(qū)地址(選手成績鏈表)movdi,siadddi,Contestants*2;選手成績存放地址 movcx,Contestants;參賽選手人數(shù)movdl,11;除數(shù)Grade_0:pushcxmov[si],di;選手成績地址incsiincsi;下一個鏈表節(jié)點地址movax,Contestants+1subax,cx;選手序號stosb;保存選手序號xorbx,bx;BH=,最高分初值,BL=最低分初值xordh,dh;選手總分初值movcx,Commentators;評委人數(shù)Grade_1:xoral,alout43h,alinal,40hxorah,ahdivdlxchgah,al;舍棄商數(shù),取余數(shù),作為某評委的打分stosb;保存一個評委打分adddh,al;累計評委打分cmpbh,aljae$+4;最高分>=此評委打分movbh,al;保存新的最高分cmpbl,aljbe$+4;最低分<=此評委打分movbl,al;保存新的最低分loopGrade_1moval,dhsubal,bh;減去一個最高分subal,bl;減去一個最低分stosb;保存最后得分popcxloopGrade_0;---------------------------------- ;用冒泡排序法對選手最后得分降序排序leasi,Buffer;選手成績鏈表地址movcx,Contestants;參賽選手人數(shù)deccx;外循環(huán)次數(shù)Sorting:pushcx;入棧保存外循環(huán)次數(shù)pushsi;入棧保存數(shù)組地址Compare:pushsipopdi;當(dāng)前數(shù)組元素地址賦給目的變址寄存器,以備交換之用lodsw;將當(dāng)前數(shù)組元素讀入累加器movbx,axmoval,[bx][10];將當(dāng)前最后得分讀入累加器ALmovbx,[si];相鄰的下一個選手信息地址cmpal,[bx][10];當(dāng)前選手最后得分與相鄰的下一個選手最后得分相比較jaeNextOne;若大于或等于,不作數(shù)據(jù)交換,處理下一個數(shù)組元素movax,[di];若小于,讀入當(dāng)前選手信息鏈表節(jié)點xchgax,[si];交換鏈表元素mov[di],ax;保存數(shù)值較大者節(jié)點地址NextOne:loopCompare;處理下一個數(shù)組元素popsi;數(shù)組地址出棧popcx;外循環(huán)次數(shù)出棧loopSorting;下一趟比較;----------------------------------;按總成績降序顯示所有選手各評委打分、平均得分movcx,Contestants;參賽選手人數(shù)xorbh,bh;顯示頁號0Contestant:pushcxpushsimovsi,[si];讀入鏈表節(jié)點(某選手成績地址)lodsb;讀入選手序號xorah,ahcallDec_ASCII;顯示參賽選手序號movah,0eh moval,':'int10hmoval,20hint10h;空一格

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論