微機原理實驗報告-冒泡排序_第1頁
微機原理實驗報告-冒泡排序_第2頁
微機原理實驗報告-冒泡排序_第3頁
微機原理實驗報告-冒泡排序_第4頁
微機原理實驗報告-冒泡排序_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

。一、實驗?zāi)康?)學(xué)習(xí)匯編語言循環(huán)結(jié)構(gòu)語句的特點,重點掌握冒泡排序的方法。2)理解并掌握各種指令的功能,編寫完整的匯編源程序。3)進一步熟悉DEBUG的調(diào)試命令,運用DEBUG進行調(diào)試匯編語言程序。二、實驗內(nèi)容及要求1)實驗內(nèi)容:從鍵盤輸入五個有符號數(shù),用冒泡排序法將其按從小到大的順序排序。2)實驗要求:①編制程序,對這組數(shù)進行排序并輸出原數(shù)據(jù)及排序后的數(shù)據(jù);②利用DEBUG調(diào)試工具,用D0命令,查看排序前后內(nèi)存數(shù)據(jù)的變化;③去掉最大值和最小值,求出其余值的平均值,輸出最大值、最小值和平均值;④用壓棧PUSH和出棧POP指令,將平均值按位逐個輸出;⑤將平均值轉(zhuǎn)化為二進制串,并將這組二進制串輸出;⑥所有數(shù)據(jù)輸出前要用字符串的輸出指令進行輸出提示, 所有數(shù)據(jù)結(jié)果能清晰顯示。三、程序流程圖(1)主程序:MAIN 開始初始化鍵盤輸入數(shù)據(jù)調(diào)用INPUT 子程序 顯示輸入錯誤否輸入是否正確是顯示原始數(shù)據(jù)調(diào)用OUTPUT 子程序精選資料,歡迎下載。顯示冒泡排序后的數(shù)據(jù)調(diào)用SORT子程序調(diào)用OUTPUT 子程序顯示最小值 Min顯示One子程序顯示最大值 Max調(diào)用One子程序顯示其余數(shù)平均值 Average調(diào)用One子程序顯示平均值二進制串 Binary調(diào)用One子程序結(jié)束精選資料,歡迎下載。(2)冒泡排序子程序 :SORTCOUNT1----外循環(huán)次數(shù)COUNT2----內(nèi)循環(huán)次數(shù)i ----數(shù)組下標否否

進入初始化COUNT1=N-1COUNT2=COUNT1SI=0否Ai≥Ai+1是Ai與Ai+1兩數(shù)交換SI=SI+2COUNT2=COUNT2-1COUNT2=0 ?是COUNT1=COUNT1-1COUNT2=0 ?是返回精選資料,歡迎下載。四、程序清單NAMEBUBBLE_SORTDATASEGMENTARRAYDW5DUP(?);輸入數(shù)據(jù)的存儲單元COUNTDW5TWODW2FLAG1DW0;判斷符號標志FLAG2DB0;判斷首位是否為零的標志FAULTDW-1;判斷出錯標志CRDB0DH,0AH,'$'STR1DB'PleaseinputfivenumbersseperatedwithspaceandfinishedwithEnter:','$'STR2DB'Theoriginalnumbers:','$'STR3DB'Thesortednumbers:','$'STR4DB'TheMin:','$'STR5DB'TheMax:','$'STR6DB'TheAverage:','$'STR7DB'Thebinarysystemoftheaverage:','$'STR8DB'Inputerror!Pleaseinputagain!''$'DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,ES:DATASTART:PUSHDSANDAX,0PUSHAXMOVAX,DATAMOVDS,AXLEADX,STR1MOVAH,09H;9號DOS功能調(diào)用,提示輸入數(shù)據(jù)INT21HCALLCRLF;回車換行REIN:CALLINPUT;調(diào)用INPUT子程序,輸入原始數(shù)據(jù)CMPAX,FAULT;判斷是否出錯,JEREIN;出錯則重新輸入LEADX,STR2MOVAH,09H;9號DOS功能調(diào)用,提示輸出原始數(shù)據(jù)INT21HCALLOUTPUT;調(diào)用OUTPUT子程序,輸出原始數(shù)據(jù)CALLSORT;調(diào)用SORT子程序,進行冒泡排序LEADX,STR3MOVAH,09H;9號DOS功能調(diào)用,提示輸出排序后的數(shù)據(jù)INT21H精選資料,歡迎下載。CALLOUTPUT;調(diào)用OUTPUT子程序,輸出排序后的數(shù)據(jù)ANDSI,0ANDBX,0MOVBX,ARRAY[SI];將最小值存入BXLEADX,STR4MOVAH,09H;9號DOS功能調(diào)用,提示輸出數(shù)據(jù)的最小值INT21HCALLONE;調(diào)用ONE子程序,輸出最小值CALLCRLFLEADX,STR5MOVAH,09H;9號DOS功能調(diào)用,提示輸出排序后的最大值INT21HMOVBX,ARRAY[SI+8];將最大值存入BXCALLONE;調(diào)用ONE子程序,輸出最大值CALLCRLFLEADX,STR6MOVAH,09H;9號DOS功能調(diào)用,提示輸出平均值INT21HANDDX,0MOVAX,ARRAY[SI+2];將去掉最大最小值的其余各數(shù)之和存入AXADDAX,ARRAY[SI+4]ADCAX,ARRAY[SI+6]MOVCX,COUNT;計數(shù)器CX=5DECCX;CX←CX-1DECCXDIVCX;字除法,余數(shù)存入AXMOVBX,AX;將余下各數(shù)的平均值存入BXCALLONE;調(diào)用ONE子程序,輸出去掉最大最小值的其余數(shù)平均值CALLCRLFLEADX,STR6MOVAH,09H;9號DOS功能調(diào)用,提示輸出平均值的二進制串MOVCX,16;16位二進制串,計數(shù)器初始值為16LL1:ANDDX,0DIVTWOPUSHDXLOOPLL1MOVCX,16LL2:POPDXADDDL,30H;將DL中的數(shù)進行ASCII碼轉(zhuǎn)換MOVAH,2;2號DOS功能調(diào)用,輸出字符“0”或“1”INT21HLOOPLL2MOVAH,4CHINT21H;4C號功能調(diào)用,返回DOS精選資料,歡迎下載。MAIN ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:CRLF功能: 回車和換行;--------------------------------------------------------------------------------------------------------------------------------CRLF PROCLEA DX,CRMOV AH,09HINT 21HRETCRLF ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:INPUT功能: 輸入一組數(shù)據(jù);--------------------------------------------------------------------------------------------------------------------------------INPUT PROCMOV CX,COUNT ; 計數(shù)器CX=5AND SI,0NEXT1:CALLDTB ; 調(diào)用DTB子程序,將輸入轉(zhuǎn)換為二進制數(shù)DEC CX ;CX ←CX-1CMP DL,20H ; 判斷輸入字符是否為空格符JE STOCMP DL,0DH ; 判斷輸入字符是否為換行符JE EXIT2CALLCRLFERROR:LEA DX,STR8MOV AH,09H ;9 號DOS功能調(diào)用,提示輸入不合法INT 21HCALLCRLFMOV AX,FAULT ; 以AX中的值作為出錯標志JMP EXIT3STO: MOV ARRAY[SI],BX ; 是空格符,將 BX中的二進制數(shù)存入存儲單元ADD SI,2JMP NEXT1EXIT2:MOV ARRAY[SI],BX ; 是換行符,將 BX中的二進制數(shù)存入存儲單元CALLCRLFEXIT3:RETINPUT ENDP;--------------------------------------------------------------------------------------------------------------------------------精選資料,歡迎下載。子程序:DTB功能:將鍵盤輸入的十進制數(shù)轉(zhuǎn)換為二進制數(shù)形式存入BX;--------------------------------------------------------------------------------------------------------------------------------DTBPROCANDBX,0ANDFLAG1,0;符號標志,0為正,1為負CHAR:MOVAH,01H;1號DOS功能調(diào)用,輸入一個字符,存入ALINT21HMOVDL,ALCMPAL,2DH;判斷輸入字符是否為負號"-"JNZNEXT2MOVFLAG1,1;是負數(shù),將符號標志FLAG1置1JMPCHARNEXT2:SUBAL,30H;判斷輸入字符是否在0-9之間JLNEXT3CMPAL,09HJGNEXT3CBWXCHGAX,BX;輸入字符在0-9之間,將BX中的數(shù)乘以10MOVCX,10MULCXXCHGAX,BXADDBX,AX;將BX中的數(shù)與新輸入的數(shù)相加JMPCHARNEXT3:CMPFLAG1,1;根據(jù)符號標志判斷輸入是否為負JNZEXIT1NEGBX;對BX中的數(shù)求補EXIT1:RETDTB ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:OUTPUT功能: 輸出一組數(shù)據(jù);--------------------------------------------------------------------------------------------------------------------------------OUTPUTPROCCALLCRLFMOV DI,COUNT ; 計數(shù)器DI=5AND SI,0GO1: MOV BX,ARRAY[SI] ; 將存儲單元的第一組數(shù)據(jù)存入 BXTESTBX,8000H ; 判斷正負JZ GO2MOV DL,2DH精選資料,歡迎下載。MOVAH,02H;2號DOS功能調(diào)用,輸出負號"-"INT21HNEGBXGO2:CALLONE;調(diào)用ONE子程序,將BX中二進制數(shù)轉(zhuǎn)換為十進制數(shù)輸出MOVDL,20HMOVAH,02H;2號DOS功能調(diào)用,輸出空格符INT21HADDSI,2;指針指向下一數(shù)據(jù)DECDI;DI←DI-1JNZGO1;計數(shù)器DI不為零,繼續(xù)循環(huán)CALLCRLFRETOUTPUTENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:ONE功能: 將BX中的的二進制數(shù)轉(zhuǎn)換為十進制數(shù) ,由高到低各位依次輸出;--------------------------------------------------------------------------------------------------------------------------------ONEPROCPUSHBXPUSHCXPUSHSIPUSHDIMOVCX,10000;除數(shù)存入CXCALLBTDMOVCX,1000CALLBTDMOVCX,100CALLBTDMOVCX,10CALLBTDMOVCX,1CALLBTDADDDL,FLAG2CMPDL,30H;與"0"的ASCII碼比較,判斷該數(shù)是否為"0"JNEQUIT3MOVAH,02H;2號DOS功能調(diào)用,輸出"0"INT21HQUIT3:POPDIPOPSIPOPCXPOPBXANDFLAG2,0;將首位標志FLAG2重新置0精選資料,歡迎下載。RETONE ENDP;--------------------------------------------------------------------------------------------------------------------------------子程序:BTD功能: 將BX中的二進制數(shù)轉(zhuǎn)換為一個十進制數(shù)輸出--------------------------------------------------BTDPROCMOVAX,BXANDDX,0DIVCX;字除法,商值存入AX,余數(shù)存入DXMOVBX,DX;余數(shù)存入BXMOVDL,ALADDDL,30H;對DL中的數(shù)進行ASCII碼轉(zhuǎn)換CMPFLAG2,0;判斷是否為首位數(shù)據(jù)JNEQUIT1CMPDL,30H;是首位則判斷是否為"0"JEQUIT2;是"0"則不輸出MOVFLAG2,1;不是"0"將首位標志置1QUIT1:MOVAH,02H;2號DOS功能調(diào)用,輸出一位十進制數(shù)INT21HQUIT2:RETBTDENDP--------------------------------------------------子程序:SORT功能: 冒泡排序;--------------------------------------------------------------------------------------------------------------------------------SORT PROCCLDMOV CX,COUNT ; 初始化計數(shù)器 CXDEC CX ;CX=4LOO1: MOV DI,CX ;CX 中的數(shù)存入 DIAND SI,0LOO2: MOV AX,ARRAY[SI]CMP AX,ARRAY[SI+2] ; 相鄰兩數(shù)進行比較JL LOO3XCHGAX,ARRAY[SI+2] ; 前一數(shù)較大則進行數(shù)據(jù)交換MOV ARRAY[SI],AXLOO3: ADD SI,2 ; 前一數(shù)較小,則進行下一組比較LOOPLOO2 ;CX=0, 停止內(nèi)循環(huán)MOV CX,DI ; 還原計數(shù)器 CX的值精選資料,歡迎下載。LOOPLOO1 ;CX=0, 停止外循環(huán)RETSORT ENDP;--------------------------------------------------------------------------------------------------------------------------------CODE ENDSEND START五、運行結(jié)果1)對300,250,280,240,260五個數(shù)進行冒泡排序,運行結(jié)果如下:(2)對-1,2,54 ,-38,43 五個數(shù)進行冒泡排序,運行結(jié)果如下精選資料,歡迎下載。(1)當輸入不合法時,出現(xiàn)錯誤提示:(4)當輸入數(shù)據(jù)不足 5個時程序自動補 0:六、心得體會在本次匯編語言程序設(shè)計實驗中, 我們學(xué)習(xí)了匯編語言的循環(huán)結(jié)構(gòu), 并對冒泡排序法進行精選資料,歡迎下載。了匯編程序設(shè)計,我首先編寫了對給定數(shù)據(jù)進行冒泡排序的算法設(shè)計, 這有助于我熟悉冒泡排序的邏輯結(jié)構(gòu),理清設(shè)計思路。匯編語言與 C語言相似,然而,在設(shè)計過程中,我才意識到,要用匯編語言寫出完整的算法程序并不是一件簡單的事, 一個微小的錯誤就可能導(dǎo)致整個程序無法正常運行。在編程時,出現(xiàn)了各種各樣的錯誤, 如寫程序時沒有切換成英式標點,16進制數(shù)未加“H”符號,做字除法運算時忘記將DX清零而導(dǎo)致“DivideOverflow”。這些錯誤都在匯編調(diào)試過程中得到改正。在接下來的上機課程中,我們按照老師的要求對改程序進行了進一步設(shè)計——對從鍵盤輸入的數(shù)據(jù)進行冒泡排序。這個算法程序較為復(fù)雜,為了使程序能夠更加簡潔明

溫馨提示

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

最新文檔

評論

0/150

提交評論