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

下載本文檔

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

文檔簡介

.....目錄摘要11概述21.1任務(wù)要求21.2編程環(huán)境22分析32.1程序功能32.2設(shè)計思路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ìn)行檢查給出錯誤信息等。本說明書主要介紹了用匯編語言編寫程序計算比賽成績的設(shè)計思路和編程流程圖,以及調(diào)試程序時的心得與體會。關(guān)鍵詞匯編流程比賽評分系統(tǒng)程序設(shè)計1概述1.1任務(wù)要求①比賽選手人數(shù)控制在30以下;②9個評委,每個評委給分范圍為0~10分〔整數(shù),隨機給出分?jǐn)?shù)③9個評委的給分中,去掉一個最高分和一個最低分,余下7位評委的平均分即為參加者的得分〔精確到小數(shù)點后一位;④將分?jǐn)?shù)在屏幕中間位置處用紅色顯示出來;⑤將參加比賽的選手的排名順序顯示出來。1.2編程環(huán)境把匯編語言翻譯成機器語言的過程稱為匯編,為了實現(xiàn)這一過程正確運行匯編語言,系統(tǒng)需具備以下編輯程序:Masm.exeLink.exeDebug.exeMasm為宏匯編程序,負(fù)責(zé)對源文件進(jìn)行匯編;link為連接程序,把匯編后產(chǎn)生的目標(biāo)模塊連接在一起,產(chǎn)生可執(zhí)行文件;debug是調(diào)試程序,它是調(diào)試匯編語言程序必不可少的工具。2分析根據(jù)設(shè)計任務(wù)書分析得出程序要求具備的功能,進(jìn)而寫出自己的設(shè)計思路。2.1程序功能根據(jù)設(shè)計任務(wù)要求可以得出所涉及程序必須具有以下功能顯示選手序號顯示9個評委的評分用紅色字體顯示每位選手的平均分根據(jù)選手平均得分排序〔本程序按照分?jǐn)?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ù)部分。保存該分?jǐn)?shù)并在屏幕中間用紅色顯示出來。以上過程循環(huán)30次,然后根據(jù)平均分的高低對選手進(jìn)行排序并調(diào)用BIOS功能使平均分為紅色顯示。為了使程序方便閱讀和修改,減少編程工作量,節(jié)省存儲空間,并易于實現(xiàn)程序的模塊化,在編寫程序的時候盡可能的把一些具有特定功能的程序段獨立出來編寫成可以被其他程序多次調(diào)用的子程序,然后在主程序需要的地方調(diào)用。匯編程序中的CALL和RET指令就是完成子程序調(diào)用和返回功能的。有了以上基本的設(shè)計思路,便可以著手準(zhǔn)備開始編寫流程圖,然后再查閱相關(guān)資料鞏固關(guān)于匯編語言指令系統(tǒng)以及尋址方式的知識和使用技巧,復(fù)習(xí)調(diào)試程序的方法以及常見問題的解決辦法等等。3程序流程圖流程圖是算法的圖形描述,它以圖形的方式把解決問題的先后次序和程序的邏輯結(jié)構(gòu)直觀地、形象地描述出來,使得編程的思路清晰,有利于編制、調(diào)試程序。3.1主程序流程圖開始開始從40H端口讀入一個隨機數(shù)從40H端口讀入一個隨機數(shù)除以11產(chǎn)生9個0~10的隨機整數(shù),保存除以11產(chǎn)生9個0~10的隨機整數(shù),保存找出9個隨機數(shù)中的最大值和最小值找出9個隨機數(shù)中的最大值和最小值9個數(shù)相加減去最大值、最小值9個數(shù)相加減去最大值、最小值除以7得平均分,保存除以7得平均分,保存小于30次小于30次控制循環(huán)30次控制循環(huán)30次大于等于30次將各選手按照平均分降序排列將各選手按照平均分降序排列顯示選手序號、9個評委的評分和紅色字體的平均分顯示選手序號、9個評委的評分和紅色字體的平均分結(jié)束結(jié)束圖3-1主程序流程圖為了使程序簡潔明了和易于調(diào)試查錯,因此把流程圖分成了幾個部分。主程序的流程圖如上圖3-1所示,由流程圖中可以看出程序的主要設(shè)計思路和整體框架。3.2子程序流程圖對于一些具有特殊功能的程序可以編制成子程序,通過調(diào)用來實現(xiàn)功能,這樣有利于程序的讀和寫,也易于查錯,因此本題將顯示指定字符串、顯示十進(jìn)制ASCII碼、查找最高分最低分的過程編寫成子程序以供調(diào)用,方便簡潔明了,可以更快地確定編程的方向和目的,找出解決問題的最佳途徑。由于顯示指定字符串、顯示十進(jìn)制ASCII碼涉及DOS功能調(diào)用,指令簡單,為匯編者所熟記的知識,可以不用流程圖再次贅述。查找最高分最低分的流程圖如圖3-2所示,從圖中可以看出,找出最高分的方法和查找最低分的方法類似,只需更改其中的個別指令,即可達(dá)到目的。開始開始開始開始取出一個數(shù)取出一個數(shù)取出一個數(shù)取出一個數(shù)與下一個數(shù)作比較大于等于?與下一個數(shù)作比較小于等于?與下一個數(shù)作比較與下一個數(shù)作比較與下一個數(shù)作比較大于等于?與下一個數(shù)作比較小于等于?與下一個數(shù)作比較與下一個數(shù)作比較與下一個數(shù)作比較與下一個數(shù)作比較大于等于?大于等于?不變替換N不變替換N不變NNYNY不變替換N不變替換N不變NNYNY替換不變替換不變保存該數(shù)為最高分結(jié)束保存該數(shù)為最高分保存該數(shù)為最高分保存該數(shù)為最高分結(jié)束保存該數(shù)為最高分保存該數(shù)為最高分保存該數(shù)為最高分保存該數(shù)為最高分結(jié)束結(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)用于挑選出最值。內(nèi)循環(huán)用于將相鄰的兩個元素進(jìn)行比較,將小的元素調(diào)到大元素的前頭,內(nèi)循環(huán)的循環(huán)次數(shù)表示相鄰元素的交換趟數(shù)。結(jié)束開始此外,在整個程序中,除了這三個主要環(huán)節(jié),還需要編寫子程序用于顯示字符串,產(chǎn)生隨機數(shù)等等,這些模塊的編程思路比較直觀,所以在流程圖中沒有著重表明。結(jié)束開始比較相鄰兩個數(shù)的大小比較相鄰兩個數(shù)的大小循環(huán)29次前一個數(shù)大?循環(huán)29次前一個數(shù)大?NYNY順序交換順序不變順序交換順序不變小于29小于29大于等于29大于等于29保存結(jié)果并顯示保存結(jié)果并顯示圖3-3將平均成績排序的流程圖有了編寫匯編語言計算比賽成績的思路和流程圖之后,通過查找一些不常見的指令和查閱相關(guān)的參考資料,就可以編寫出初步的源程序。4程序調(diào)試經(jīng)過調(diào)試程序,得出隨機給出選手得分的運行的結(jié)果如圖4-1所示。圖4-1隨機給出的選手得分最終排名和選手所得的分?jǐn)?shù)如圖4-2所示。圖中給出了24位選手的成績和排名,排名順序為從高分到低分,最后一列為各個選手所得的平均分,用紅色顯示。圖4-2選手排名順序5心得與體會在本次比賽評分系統(tǒng)程序的設(shè)計過程中,本小組各成員積極配合想算法,分工協(xié)作寫程序,歷經(jīng)百般波折,通過幾個晝夜的艱苦奮戰(zhàn),終于在我們幾近絕望的最后關(guān)頭突然跳出來一個窗口,程序運行成功了,大家手舞足蹈、歡欣雀躍,總算努力沒有白費,俗話說得好:堅持,就意味著一切。本次微機原理課程設(shè)計感受頗深,受益匪淺。由于初學(xué)匯編語言,再加上平時的習(xí)題都很簡單而且要求不高,所以在看到題目的時候,一開始有些傻眼不知從何著手,仔細(xì)看了看想了想查了查資料后發(fā)現(xiàn)把問題分塊處理,各個擊破,最后再擰成一股繩,問題貌似就變得簡單很多,主要是如何擰成一股繩,從何處開始擰,也就是如何把各個子程序在何處調(diào)用才能實現(xiàn)功能,這個問題確實需要大動腦筋才能確保最后的結(jié)果和設(shè)計要求相符。第一次上機用匯編編寫程序,第一次接觸用匯編語言程序產(chǎn)生隨機數(shù),第一次嘗試著編寫子程序,也是第一次聽說還有BIOS功能調(diào)用。萬事開頭難,但總要開個頭,第一天沒著落,就想啊,查資料,通過小組成員討論后決定各成員分工合作,每人負(fù)責(zé)一個功能,最后一起合成調(diào)試。然后各自就開始努力的工作了,先是根據(jù)要求把可能用到的書中的知識復(fù)習(xí)鞏固了一遍,然后對準(zhǔn)問題查閱相關(guān)資料,遇到相似的問題就借鑒過來,再根據(jù)實際問題需要編寫自己的程序,就這樣一步步按照流程做了下來,途中遇到了諸多問題,但是問題必須解決才能繼續(xù)往下寫,雖然好些天疲于奔命于圖書館、書店,但是有壓力就有動力,逐漸的問題變得越來越少。編寫程序過程中,開始是一塌糊涂,對一些偽指令和DOS功能調(diào)用方便掌握不牢固,編寫起程序來很不靈活,經(jīng)過查閱資料和詢問同學(xué),在邊摸索邊實踐的過程中,我體會到了編寫程序不僅需要廣泛深入的知識面,還需要靈活的頭腦和嚴(yán)密的邏輯思維,稍有考慮不到的方面,程序就會"沒有生成OBJ文件"。循序漸進(jìn)的,我終于編寫出了我腦子里所想的初步程序,但輸入到MF2KP集成開發(fā)環(huán)境中運行時,一開始的熱情瞬間就沒了,程序無法編譯,不能生成.obj文件,想了許久,明白了一點:編寫程序最主要的其實不是在于如何編寫而是成百上千次甚至上萬次的不斷調(diào)試。于是,我開始了調(diào)試程序這復(fù)雜而又極其漫長的過程。最終在小組成員共同的努力下,我們成功了,一股成就感襲上心頭,各個都笑了,也松了口氣,回頭想想,不僅鞏固了所學(xué)知識,而且鍛煉我們理論結(jié)合實際的能力和團(tuán)隊合作能力。同時也發(fā)現(xiàn)了些許不足,我敢肯定的是這次發(fā)現(xiàn)的問題被牢牢記住了,還起了個加深記憶的作用。通過本次課設(shè)我發(fā)現(xiàn),定義的變量是可以直接用inc、dec的,即對其內(nèi)容值加1、減1,但是要注意,雖然變量可以看成符號地址,不過此處只是把它們的數(shù)據(jù)內(nèi)容加1或減1,而非對其地址,之前我以為不能直接對定義好的變量用inc、dec;使用十六進(jìn)制數(shù)時,若第一個數(shù)位值是字母,要在在其前加0,否則會被認(rèn)為是變量;寄存器、變量之間傳遞值時,位數(shù)要一致;使用push后記得相應(yīng)地使用pop,還要注意二者應(yīng)反序,即pushax,pushbx,pushcx與popcx,popbx,popax相對應(yīng);在子過程中的ret處之前應(yīng)放上相應(yīng)地放上pop語句,而子過程的入口處應(yīng)相應(yīng)放上push語句;要養(yǎng)成良好的程序書寫習(xí)慣,比如標(biāo)號對齊、參數(shù)對齊、注釋對齊,這樣看起來賞心悅目,也不容易出錯,也易于排錯修改;標(biāo)號最好采用有意義的英文,這樣比較直觀,注釋盡量詳細(xì)準(zhǔn)確,便于閱讀,而且有利于其它程序中作為子程序模塊的調(diào)用。還有要注意典型程序模塊的積累,再復(fù)雜的程序也是由一個個小程序模塊組成的。這些問題是這次課程設(shè)計體會比較深刻的幾個方面??偠灾?通過本次比賽評分系統(tǒng)程序的設(shè)計,不僅鞏固了所學(xué)匯編知識,而且在知識的廣面和深面上有了相當(dāng)程度的拓展。幾個枯燥的字母被我們這一折騰竟然變得有了活力,使我感覺到匯編強大的魔力,編程就像日常生活一樣,是個不斷探索和發(fā)現(xiàn)的過程,途中必然會遇到困難,前面出現(xiàn)坎兒,是因為對面就是平原,編程序要知道:堅持,就意味著一切。參考文獻(xiàn)[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è)出版社.20XX[6]彭虎,周培玲,傅忠謙.微機原理與接口技術(shù)〔第2版.電子工業(yè)出版社,2008附錄CodeSegmentAssumeCS:Code,DS:Code;-------------------------------------;功能:顯示指定地址〔Str_Addr的字符串;入口:;Str_Addr=字符串地址〔要求在數(shù)據(jù)段;用法:OutputStr_Addr;用法舉例:OutputPromptStrOutputMACROStr_Addrpushaxleadx,Str_Addrmovah,9int21hpopaxEndM;-------------------------------------;功能:把AX中的二進(jìn)制無符號數(shù)轉(zhuǎn)換成顯式的十進(jìn)制ASCII碼,并送顯示屏顯示;入口:AX=二進(jìn)制數(shù);出口:在當(dāng)前光標(biāo)位置顯示轉(zhuǎn)換后的ASCII碼數(shù)字Dec_ASCIIProcNearmovdh,10divdhorax,3030h;將兩位十進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼cmpal,30hja$+4moval,20h;若十位數(shù)是0,以空格代替pushaxmovah,0ehint10h;顯示十位數(shù)popaxxchgah,almovah,0ehint10h;顯示個位數(shù)retDec_ASCIIEndP;-------------------------------------Commentatorsequ9;評委人數(shù)Contestantsequ23;參賽選手人數(shù)Press_Keydb0ah,0dh,'Thecomplated.Pressanykeytoexit...$'Start:movdi,64;顯示緩沖區(qū)偏移地址movax,0b800h;顯示緩沖區(qū)段地址moves,axmoval,20hmovah,4;字符顏色〔紅色movcx,Contestants;參賽選手人數(shù)cldLine:pushcxmovcx,3repstoswadddi,154;顯示緩沖區(qū)下一行同列偏移地址popcxloopLinepushcspopds;使數(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];讀入鏈表

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論