匯編試驗報告-學(xué)生信息管理系統(tǒng)方案_第1頁
匯編試驗報告-學(xué)生信息管理系統(tǒng)方案_第2頁
匯編試驗報告-學(xué)生信息管理系統(tǒng)方案_第3頁
匯編試驗報告-學(xué)生信息管理系統(tǒng)方案_第4頁
匯編試驗報告-學(xué)生信息管理系統(tǒng)方案_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

./學(xué)生信息管理系統(tǒng)1.實驗類別使用匯編語言編程2.實驗容和實驗?zāi)康膶W(xué)生的信息包括、班級、學(xué)號和成績,其中成績精確到1位小數(shù)。編寫程序?qū)崿F(xiàn)以下功能:〔1 可以錄入學(xué)生的信息,成績以十進制形式錄入,并顯示;〔2 可以按成績進行排序顯示;〔3 可以統(tǒng)計平均成績;〔4 可以統(tǒng)計不及格、60~70、70~80、80~90、90~100各分數(shù)段的人數(shù)。3.實驗設(shè)備環(huán)境Windows7操作系統(tǒng)的pc機,使用QASM270編譯器環(huán)境下編寫。4.實驗實現(xiàn)過程及方法首先數(shù)據(jù)采用二維數(shù)組的形式進行存儲,分為學(xué)生信息部分與成績部分。然后將輸入學(xué)生數(shù)也保存在一個一維數(shù)組中。然后再信息的存儲過程中,對于字符串輸入進行轉(zhuǎn)換,以二進制的形式存儲在數(shù)據(jù)段中。然后采用冒泡排序,對于數(shù)據(jù)段中的人員信息進行排序。以成績?yōu)閰?shù)。然后再對每個人員成績進行遍歷,統(tǒng)計各個數(shù)據(jù)層次中人員數(shù),然后再成績遍歷的同時,將平均成績也同時求出,在求平時成績的時候,首先先將整數(shù)部分乘10然后再加上小數(shù)部分,以便于后續(xù)的輸出。將排序后的人員信息及成績顯示出來,然后將平均成績也同時打印出來,還有各個分數(shù)層次中的人員數(shù)也都一并顯示出來。下面是一些主要代碼來實現(xiàn)上述過程:;數(shù)據(jù)部分NUMBERDB3DUP<0>;第一個存?zhèn)€/十位<ASCII碼>,第二個存?zhèn)€位<ASCII碼>,第三個存學(xué)生數(shù)<二進制>;用20字節(jié)單元表示學(xué)生信息,0-19中:0對應(yīng)最大字符,1對應(yīng)實際輸入,2-18對應(yīng)輸入信息,19對應(yīng)'$'INFORMATIONDB99DUP<20DUP<0>>;用7字節(jié)單元來存分數(shù),0-6中,0-4對應(yīng)輸入字符,5對應(yīng)輸入整數(shù)部分的二進制數(shù),6對應(yīng)于小數(shù)部分的二進制數(shù)GRADEDB99DUP<7DUP<0>>AVERAGE_GRADE_BUFFERDB2DUP<0>;第一個存整數(shù)部分<二進制形式>,STORE_STUDENT_NUM;存儲學(xué)生總數(shù),結(jié)果送cx中STORE_STUDENT_INFORMATION;存儲學(xué)生信息STORE_STUDENT_GRADE;存儲每個學(xué)生成績SORT;采用冒泡排序_DISPLAY;顯示結(jié)果FIND_RESULT;顯示平均成績和分段人數(shù)關(guān)鍵算法的流程圖:關(guān)于分段人數(shù)與總成績的計算冒泡排序算法:處理計算處理計算計算總成績<60?<70?<80?<90?<=100錯誤返回NNNNNA++B++C++D++E++YYYYY處理排序冒泡i=0交換i++Ki<=Ki+1i=counter?返回YNYN5.效果圖輸入三人信息,班級學(xué)好,然后輸入此人成績。可以看到三人的按成績排序,然后將平均值輸出,而且統(tǒng)計了各個分數(shù)區(qū)間的人數(shù)。輸入5人信息,并將其打印出來。6.實驗心得通過編寫學(xué)生管理系統(tǒng)的匯編實驗,讓我對匯編語言有了很深的了解,對于語言的熟悉度也提高了很多。在編寫的過程中遇到了很多的問題,由于匯編語言使用起來比較繁瑣〔個人感覺,很多部運行的數(shù)據(jù)不能很好的呈現(xiàn)出來,所以對數(shù)據(jù)的保存,處理等方面出現(xiàn)了很大的錯誤,主要是在字符的輸入與二進制的轉(zhuǎn)換,還有就是在數(shù)據(jù)處理的時候會出現(xiàn)很多標(biāo)志位,這些標(biāo)準(zhǔn)為對于處理后數(shù)據(jù)的保存有很大的影響,但是通過課本上的實驗例子,對于這些問題基本上都能得到一定的解決。還有就是在需要跳轉(zhuǎn)的時候,由于跳轉(zhuǎn)指令使用對標(biāo)志位或者條件使用比較靈活,有很多種的跳轉(zhuǎn)指令,這些指令在使用起來是很方便但是由于判斷條件很多,可能不小心就出現(xiàn)了跳轉(zhuǎn)出錯。還有就是,跳轉(zhuǎn)不到想要跳轉(zhuǎn)的地方。這些問題需要在編寫的過程中非常的小心,同時也能將這些指令得使用規(guī)則得到一個很好的理解與記憶??傊?在此次的匯編實驗的編寫過程中,理解了很多在課堂上學(xué)習(xí)到的知識,也同時記憶了這些指令的使用規(guī)則與方法。對于匯編語言有了一定程度的理解與掌握。源程序:DATASSEGMENT;此處輸入數(shù)據(jù)段代碼;輸入輸出提示字符STUDENT_NUMDB'Pleaseinputthenumberofstudents<1-99>:','$'STUDENT_INFORMATIONDB0DH,0AH,'Pleaseinputthestudentinformation<classidname>:',0DH,0AH,'$'STUDENT_GRADEDB0DH,0AH,'Pleaseinputthestudentgrade<0.0-100.0>:',0DH,0AH,'$'AVERAGE_GRADEDB0DH,0AH,'Theaveragegradeis:','$'RESULT1DB0DH,0AH,'Thenumberofstudentin[>=90]is:','$';各分數(shù)段人數(shù)RESULT2DB0DH,0AH,'Thenumberofstudentin[80-90]is:','$'RESULT3DB0DH,0AH,'Thenumberofstudentin[70-80]is:','$'RESULT4DB0DH,0AH,'Thenumberofstudentin[60-70]is:','$'RESULT5DB0DH,0AH,'Thenumberofstudentin[<=60]is:','$'GRADE_RANKDB0DH,0AH,'Thegradelist<hightolow>is:',0DH,0AH,'$';打印排名BLANKDB'','$'HUANHANGDB0DH,0AH,'$'KAISHISHUCHUDB0DH,0AH,'***********************************',0DH,0AH,'$';數(shù)據(jù)NUMBERDB3DUP<0>;第一個存?zhèn)€/十位<ASCII碼>,第二個存?zhèn)€位<ASCII碼>,第三個存學(xué)生數(shù)<二進制>;用20字節(jié)單元表示學(xué)生信息,0-19中:0對應(yīng)最大字符,1對應(yīng)實際輸入,2-18對應(yīng)輸入信息,19對應(yīng)'$'INFORMATIONDB99DUP<20DUP<0>>;用7字節(jié)單元來存分數(shù),0-6中,0-4對應(yīng)輸入字符,5對應(yīng)輸入整數(shù)部分的二進制數(shù),6對應(yīng)于小數(shù)部分的二進制數(shù)GRADEDB99DUP<7DUP<0>>AVERAGE_GRADE_BUFFERDB2DUP<0>;第一個存整數(shù)部分<二進制形式>,第二個存小數(shù)部分<二進制形式>N0DB0;各分數(shù)段人數(shù)存儲區(qū)<二進制形式>N1DB0N2DB0N3DB0N4DB0DATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:;此處輸入代碼段代碼MOVAX,DATASMOVDS,AXMOVSI,0;指向每個學(xué)生信息MOVDI,0;指向每個學(xué)生成績MOVCX,100;初始化學(xué)生數(shù)MOVDX,OFFSETSTUDENT_NUM;請求輸入學(xué)生總數(shù)MOVAH,09INT21HCALLSTORE_STUDENT_NUM;存儲學(xué)生總數(shù),結(jié)果送cx中CMPCX,0;輸入為0退出JLEOUTTODOSCMPCX,100;學(xué)生數(shù)超出本程序圍,退出JGEOUTTODOSINPUT:MOVDX,OFFSETSTUDENT_INFORMATION;請求輸入學(xué)生信息MOVAH,09INT21HCALLSTORE_STUDENT_INFORMATION;存儲學(xué)生信息ADDSI,20;指向下一個學(xué)生信息MOVDX,OFFSETSTUDENT_GRADE;請求輸入學(xué)生成績MOVAH,09INT21HCALLSTORE_STUDENT_GRADE;存儲每個學(xué)生成績ADDDI,7;指向下一個學(xué)生LOOPINPUT;循環(huán),直到輸入所有學(xué)生成績CALLSORT;排序CALL_DISPLAY;顯示結(jié)果CALLFIND_RESULT;顯示平均成績和分段人數(shù)OUTTODOS:MOVAH,1;任意鍵結(jié)束INT21HMOVAX,4C00H;返回DOSINT21H;******************存儲學(xué)生數(shù)目的函數(shù)******************STORE_STUDENT_NUMPROC;調(diào)用之后,cx中存儲了學(xué)生數(shù)<二進制>PUSHAXPUSHBXMOVBX,0S1:MOVAH,1INT21HCMPAL,0DH;是否為回車JES2ANDAL,0FH;轉(zhuǎn)換為非壓縮的BCD碼MOVNUMBER[BX],ALINCBXJMPS1S2:CMPBX,2JGS5;大于2JZS3;等于2;小于2MOVAL,NUMBERJMPS4S3:MOVAH,NUMBERMOVAL,NUMBER+1AAD;BCD碼轉(zhuǎn)換為二進制數(shù)S4:MOVNUMBER+2,ALMOVCX,0MOVCL,NUMBER+2S5:POPBXPOPAXRETSTORE_STUDENT_NUMENDP;******************存儲學(xué)生信息的函數(shù)******************STORE_STUDENT_INFORMATIONPROCPUSHAXPUSHBXPUSHDXMOVAL,18MOVINFORMATION[SI],ALLEADX,INFORMATION[SI]MOVAH,0AHINT21HMOVBL,INFORMATION[SI+1];實際輸入的字符個數(shù)MOVAL,''MOVINFORMATION[SI+BX+2],AL;將回車換成''MOVINFORMATION[SI+19],'$';將每個存儲單元的最后一個字節(jié)置為'$'以便輸出POPDXPOPBXPOPAXRETSTORE_STUDENT_INFORMATIONENDP;******************存儲學(xué)生成績的函數(shù)******************STORE_STUDENT_GRADEPROCPUSHAXPUSHBXPUSHCXPUSHDXMOVBX,0MOVCX,0MOVDX,DIDEAL0:MOVAH,1INT21HCMPAL,0DH;判斷是否為回車JZDEAL2;是回車CMPAL,'.';是否為小數(shù)點JNZDEAL1;不是小數(shù)點MOVBX,CX;bx指向小數(shù)點處INCBX;標(biāo)記小數(shù)點字符出現(xiàn)在第幾個位置DEAL1:PUSHBXMOVBX,DXMOVGRADE[BX],ALPOPBXINCCX;記錄輸入字符的個數(shù)INCDXJMPDEAL0DEAL2:CMPBX,0JNZDEAL3;有小數(shù)點;無小數(shù)點CMPCX,3JGGOUT;大于100JZDEAL4;等于100;小于100CMPCX,2JZDEAL5;輸入數(shù)目為2位數(shù);個位數(shù)DEAL6:;處理個位數(shù)MOVAL,GRADE[DI]SUBAL,'0'MOVGRADE[DI+5],ALJMPGOUTDEAL5:;處理2位數(shù)MOVAH,GRADE[DI]ANDAH,0FHMOVAL,GRADE[DI+1]ANDAL,0FHAADMOVGRADE[DI+5],ALJMPGOUTDEAL4:;處理3位數(shù)MOVAL,100MOVGRADE[DI+5],ALJMPGOUTDEAL3:;處理帶有小數(shù)部分的成績MOVAL,GRADE[DI+BX];將小數(shù)部分處理SUBAL,'0'MOVGRADE[DI+6],ALCMPBX,4JZDEAL4;'.'出現(xiàn)在輸入字符的第四位,則輸入的整數(shù)部分為3位數(shù)JGGOUT;整數(shù)部分大于3位數(shù)CMPBX,3JZDEAL5;'.'出現(xiàn)在輸入字符的第三位,則輸入的整數(shù)部分為2位數(shù)JMPDEAL6;否則為個位數(shù)GOUT:POPDXPOPCXPOPBXPOPAXRETSTORE_STUDENT_GRADEENDP;******************排序?qū)W生成績的函數(shù)******************SORTPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIMOVDX,0MOVDL,NUMBER+2LOOP1:;使用冒泡排序法MOVCX,DXMOVDI,0MOVSI,0LOOP2:;先比整數(shù)部分,再比小數(shù)部分MOVAL,GRADE[DI+5]CMPAL,GRADE[DI+12]JGNEXT;大于,向下個移動JLSWAP1;小于,交換成績,名字;等于,比較小數(shù)部分MOVAL,GRADE[DI+6]CMPAL,GRADE[DI+13]JGENEXT;大于或等于,向下個移動JLSWAP1;小于,交換成績,名字SWAP1:MOVBX,SISWAP11:;交換學(xué)生信息MOVAL,INFORMATION[BX+2]XCHGAL,INFORMATION[BX+22]MOVINFORMATION[BX+2],ALINCBXCMPAL,'$'JNZSWAP11PUSHBXMOVBX,0SWAP2:;交換學(xué)生成績MOVAL,GRADE[DI+BX]XCHGAL,GRADE[DI+BX+7]MOVGRADE[DI+BX],ALINCBXCMPBX,7JNZSWAP2POPBXNEXT:ADDSI,20ADDDI,7DECCXJNZLOOP2DECDXJNZLOOP1POPDIPOPSIPOPDXPOPCXPOPBXPOPAXRETSORTENDP;******************顯示最后結(jié)果的函數(shù)******************FIND_RESULTPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIMOVBX,0MOVCX,0MOVCL,NUMBER+2;cl中保存學(xué)生人數(shù)MOVDI,0MOVSI,0F1:MOVAL,GRADE[DI+5]CMPAL,100JGFOUT;大于100JZF90;等于100;小于100CMPAL,90JGEF90;大于等于90;小于90CMPAL,80JGEF80;大于等于80;小于80CMPAL,70JGEF70;大于等于70;小于70CMPAL,60JGEF60;大于等于60;小于60;處理<60MOVDL,N4INCDLMOVN4,DLFNEXT:;處理平均成績處理方式:整數(shù)部分*10+小數(shù)部分,結(jié)果先除以學(xué)生人數(shù),再輸出<輸出整數(shù)時除以10>MOVAL,GRADE[DI+5]MOVDL,10MULDLMOVDL,GRADE[DI+6]MOVDH,0ADDAX,DXADDBX,AXJMPF2FOUT:POPDIPOPSIPOPDXPOPCXPOPBXPOPAXF90:;處理>=90MOVDL,N0INCDLMOVN0,DLJMPFNEXTF80:;處理大于等于80小于90MOVDL,N1INCDLMOVN1,DLJMPFNEXTF70:;處理大于等于70小于80MOVDL,N2INCDLMOVN2,DLJMPFNEXTF60:;處理大于等于60小于70MOVDL,N3INCDLMOVN3,DLJMPFNEXTF2:ADDDI,7DECCXJNZF1;處理所有學(xué)生MOVDX,OFFSETKAISHISHUCHU;打印一段************MOVAH,09INT21HMOVDX,OFFSETAVERAGE_GRADE;打印平均成績MOVAH,09INT21HMOVAX,BXMOVDX,0MOVCX,0MOVCL,NUMBER+2DIVCXMOVCL,10DIVCLCALLSHOW;先打印平均成績的整數(shù)部分PUSHAXMOVDL,'.';打印'.'MOVAH,2INT21HPOPAXMOVAL,AHCALLSHOW;再打印平均成績的小數(shù)部分MOVDX,OFFSETRESULT1;輸出大于等于90的人數(shù)MOVAH,09INT21HMOVAL,N0CALLSHOWMOVDX,OFFSETRESULT2;輸出大于等于80并小于90的人數(shù)MOVAH,09INT21HMOVAL,N1CALLSHOWMOVDX,OFFSETRESULT3;輸出大于等于70并小于80的人數(shù)MOVAH,09INT21HMOVAL,N2CALLSHOWMOVDX,OFFSETRESULT4;輸出大于等于60并小于70的人數(shù)MOVAH,09INT21HMOVAL,N3CALLSHOWMOVDX,OFFSETRESULT5;輸出小于60的人數(shù)MOVAH,09INT21HMOVAL,N4CALLSHOWRETFIND_RESULTENDP;******************輸出分數(shù)排序的函數(shù)******************_DISPLAYPROCPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIMOVDX,OFFSETGRADE_RANKMOVAH,09INT21HMOVCX,0MOVCL,NUMBER+2;cl中保存學(xué)生人數(shù)MOVDI,0MOVSI,0D1:MOVDX,OFFSETINFORMATIONADDDX,SIADDDX,2MOVAH,09INT21HMOVDX,OFFSETBLANK;打印一段空白MOVAH,09INT21HmovAl,GRADE[DI+5]pushaxMOVGRADE[DI+5],'$';將保存成績的單元中第6個字節(jié)置為'$',便于輸出MOVDX,OFFSETGRADE;輸出成績ADDDX,DIMOVAH,09INT21Hpopax movGRADE[DI+5],AlMOVDX,OFFSETHUANHANG;打印換行MOVAH,09

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論