




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、實驗?zāi)康模?)學(xué)習(xí)匯編語言循環(huán)結(jié)構(gòu)語句的特點(diǎn),重點(diǎn)掌握冒泡排序的方法。(2)理解并掌握各種指令的功能,編寫完整的匯編源程序。(3)進(jìn)一步熟悉DEBUG的調(diào)試命令,運(yùn)用DEBUG進(jìn)行調(diào)試匯編語言程序。二、實驗內(nèi)容及要求(1)實驗內(nèi)容:從鍵盤輸入五個有符號數(shù),用冒泡排序法將其按從小到大的順序排序。(2)實驗要求:編制程序,對這組數(shù)進(jìn)行排序并輸出原數(shù)據(jù)及排序后的數(shù)據(jù);利用DEBUG調(diào)試工具,用D0命令,查看排序前后內(nèi)存數(shù)據(jù)的變化;去掉最大值和最小值,求出其余值的平均值,輸出最大值、最小值和平均值;用壓棧PUSH和出棧POP指令,將平均值按位逐個輸出;將平均值轉(zhuǎn)化為二進(jìn)制串,并將這組二進(jìn)制串輸出;
2、所有數(shù)據(jù)輸出前要用字符串的輸出指令進(jìn)行輸出提示,所有數(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ù)平均值A(chǔ)verage調(diào)用One子程序顯示平均值二進(jìn)制串Binary調(diào)用One子程序結(jié)束(2)冒泡排序子程序: SORTCOUNT1 - 外循環(huán)次數(shù)COUNT2 - 內(nèi)循環(huán)次數(shù)i - 數(shù)組下標(biāo)進(jìn)入初始化COUNT1=N-1COUNT2=COUNT1SI
3、=0AiAi+1 否 是Ai與Ai+1兩數(shù)交換SI=SI+2COUNT2=COUNT2-1COUNT2=0? 否 是COUNT1=COUNT1-1COUNT2=0? 否 是返回四、程序清單NAME BUBBLE_SORTDATA SEGMENTARRAY DW 5 DUP(?) ;輸入數(shù)據(jù)的存儲單元COUNT DW 5 TWO DW 2FLAG1 DW 0 ;判斷符號標(biāo)志FLAG2 DB 0 ;判斷首位是否為零的標(biāo)志FAULT DW -1 ;判斷出錯標(biāo)志CR DB 0DH,0AH,'$'STR1 DB 'Please input five numbers seperat
4、ed with space and finished with Enter:','$'STR2 DB 'The original numbers:','$'STR3 DB 'The sorted numbers:','$'STR4 DB 'The Min:','$'STR5 DB 'The Max:','$'STR6 DB 'The Average:','$'STR7 DB 'The binary sys
5、tem of the average :','$'STR8 DB 'Input error!Please input again!''$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATASTART: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H ;9號DOS功能調(diào)用,提示輸入數(shù)據(jù) INT 21H CALL CRLF ;回車換行REIN: CALL INPUT ;調(diào)用I
6、NPUT子程序,輸入原始數(shù)據(jù) CMP AX,FAULT ;判斷是否出錯, JE REIN ;出錯則重新輸入 LEA DX,STR2 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出原始數(shù)據(jù) INT 21H CALL OUTPUT ;調(diào)用OUTPUT子程序,輸出原始數(shù)據(jù) CALL SORT ;調(diào)用SORT子程序,進(jìn)行冒泡排序 LEA DX,STR3 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出排序后的數(shù)據(jù) INT 21H CALL OUTPUT ;調(diào)用OUTPUT子程序,輸出排序后的數(shù)據(jù) AND SI,0 AND BX,0 MOV BX,ARRAYSI ;將最小值存入BX LEA D
7、X,STR4 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出數(shù)據(jù)的最小值 INT 21H CALL ONE ;調(diào)用ONE子程序,輸出最小值 CALL CRLF LEA DX,STR5 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出排序后的最大值 INT 21H MOV BX,ARRAYSI+8 ;將最大值存入BX CALL ONE ;調(diào)用ONE子程序,輸出最大值 CALL CRLF LEA DX,STR6 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出平均值 INT 21H AND DX,0 MOV AX,ARRAYSI+2 ;將去掉最大最小值的其余各數(shù)之和存入AX ADD
8、AX,ARRAYSI+4 ADC AX,ARRAYSI+6 MOV CX,COUNT ;計數(shù)器CX=5 DEC CX ;CXCX-1 DEC CX DIV CX ;字除法,余數(shù)存入AX MOV BX,AX ;將余下各數(shù)的平均值存入BX CALL ONE ;調(diào)用ONE子程序,輸出去掉最大最小值的其余數(shù)平均值 CALL CRLF LEA DX,STR6 MOV AH,09H ;9號DOS功能調(diào)用,提示輸出平均值的二進(jìn)制串 MOV CX,16 ;16位二進(jìn)制串,計數(shù)器初始值為16LL1: AND DX,0 DIV TWO PUSH DX LOOP LL1 MOV CX,16LL2: POP DX A
9、DD DL,30H ;將DL中的數(shù)進(jìn)行ASCII碼轉(zhuǎn)換 MOV AH,2 ;2號DOS功能調(diào)用,輸出字符“0”或“1” INT 21H LOOP LL2 MOV AH,4CH INT 21H ;4C號功能調(diào)用,返回DOSMAIN ENDP;-子程序:CRLF功能: 回車和換行;-CRLF PROC LEA DX,CR MOV AH,09H INT 21H RETCRLF ENDP;-子程序:INPUT功能: 輸入一組數(shù)據(jù);-INPUT PROC MOV CX,COUNT ;計數(shù)器CX=5 AND SI,0NEXT1: CALL DTB ;調(diào)用DTB子程序,將輸入轉(zhuǎn)換為二進(jìn)制數(shù) DEC CX ;
10、CXCX-1 CMP DL,20H ;判斷輸入字符是否為空格符 JE STO CMP DL,0DH ;判斷輸入字符是否為換行符 JE EXIT2 CALL CRLF ERROR: LEA DX,STR8 MOV AH,09H ;9號DOS功能調(diào)用,提示輸入不合法 INT 21H CALL CRLF MOV AX,FAULT ;以AX中的值作為出錯標(biāo)志 JMP EXIT3STO: MOV ARRAYSI,BX ;是空格符,將BX中的二進(jìn)制數(shù)存入存儲單元 ADD SI,2 JMP NEXT1EXIT2: MOV ARRAYSI,BX ;是換行符,將BX中的二進(jìn)制數(shù)存入存儲單元 CALL CRLFE
11、XIT3: RETINPUT ENDP;-子程序:DTB功能: 將鍵盤輸入的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)形式存入BX;-DTB PROC AND BX,0 AND FLAG1,0 ;符號標(biāo)志,0為正,1為負(fù)CHAR: MOV AH,01H ;1號DOS功能調(diào)用,輸入一個字符,存入AL INT 21H MOV DL,AL CMP AL,2DH ;判斷輸入字符是否為負(fù)號"-" JNZ NEXT2 MOV FLAG1,1 ;是負(fù)數(shù),將符號標(biāo)志FLAG1置1 JMP CHAR NEXT2: SUB AL,30H ;判斷輸入字符是否在0-9之間 JL NEXT3 CMP AL,09H JG
12、 NEXT3 CBW XCHG AX,BX ;輸入字符在0-9之間,將BX中的數(shù)乘以10 MOV CX,10 MUL CX XCHG AX,BX ADD BX,AX ;將BX中的數(shù)與新輸入的數(shù)相加 JMP CHARNEXT3: CMP FLAG1,1 ;根據(jù)符號標(biāo)志判斷輸入是否為負(fù) JNZ EXIT1 NEG BX ;對BX中的數(shù)求補(bǔ)EXIT1: RETDTB ENDP;-子程序:OUTPUT功能: 輸出一組數(shù)據(jù);-OUTPUT PROC CALL CRLF MOV DI,COUNT ;計數(shù)器DI=5 AND SI,0GO1: MOV BX,ARRAYSI ;將存儲單元的第一組數(shù)據(jù)存入BX T
13、EST BX,8000H ;判斷正負(fù) JZ GO2 MOV DL,2DH MOV AH,02H ;2號DOS功能調(diào)用,輸出負(fù)號"-" INT 21H NEG BXGO2: CALL ONE ;調(diào)用ONE子程序,將BX中二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)輸出 MOV DL,20H MOV AH,02H ;2號DOS功能調(diào)用,輸出空格符 INT 21H ADD SI,2 ;指針指向下一數(shù)據(jù) DEC DI ;DIDI-1 JNZ GO1 ;計數(shù)器DI不為零,繼續(xù)循環(huán) CALL CRLF RETOUTPUT ENDP;-子程序:ONE功能: 將BX中的的二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù),由高到低各位依次
14、輸出;-ONE PROC PUSH BX PUSH CX PUSH SI PUSH DI MOV CX,10000 ;除數(shù)存入CX CALL BTD MOV CX,1000 CALL BTD MOV CX,100 CALL BTD MOV CX,10 CALL BTD MOV CX,1 CALL BTD ADD DL,FLAG2 CMP DL,30H ;與"0"的ASCII碼比較,判斷該數(shù)是否為"0" JNE QUIT3 MOV AH,02H ;2號DOS功能調(diào)用,輸出"0" INT 21HQUIT3: POP DI POP SI P
15、OP CX POP BX AND FLAG2,0 ;將首位標(biāo)志FLAG2重新置0 RETONE ENDP;-子程序:BTD功能: 將BX中的二進(jìn)制數(shù)轉(zhuǎn)換為一個十進(jìn)制數(shù)輸出;-BTD PROC MOV AX,BX AND DX,0 DIV CX ;字除法,商值存入AX,余數(shù)存入DX MOV BX,DX ;余數(shù)存入BX MOV DL,AL ADD DL,30H ;對DL中的數(shù)進(jìn)行ASCII碼轉(zhuǎn)換 CMP FLAG2,0 ;判斷是否為首位數(shù)據(jù) JNE QUIT1 CMP DL,30H ;是首位則判斷是否為"0" JE QUIT2 ;是"0"則不輸出 MOV F
16、LAG2,1 ;不是"0"將首位標(biāo)志置1QUIT1: MOV AH,02H ;2號DOS功能調(diào)用,輸出一位十進(jìn)制數(shù) INT 21HQUIT2: RETBTD ENDP;-子程序:SORT功能: 冒泡排序;- SORT PROC CLD MOV CX,COUNT ;初始化計數(shù)器CX DEC CX ;CX=4LOO1: MOV DI,CX ;CX中的數(shù)存入DI AND SI,0LOO2: MOV AX,ARRAYSI CMP AX,ARRAYSI+2 ;相鄰兩數(shù)進(jìn)行比較 JL LOO3 XCHG AX,ARRAYSI+2 ;前一數(shù)較大則進(jìn)行數(shù)據(jù)交換 MOV ARRAYSI,AX
17、LOO3: ADD SI,2 ;前一數(shù)較小,則進(jìn)行下一組比較 LOOP LOO2 ;CX=0,停止內(nèi)循環(huán) MOV CX,DI ;還原計數(shù)器CX的值 LOOP LOO1 ;CX=0,停止外循環(huán) RETSORT ENDP;- CODE ENDS END START五、運(yùn)行結(jié)果(1)對300,250,280,240,260五個數(shù)進(jìn)行冒泡排序,運(yùn)行結(jié)果如下:(2)對-1,2,54,-38,43五個數(shù)進(jìn)行冒泡排序,運(yùn)行結(jié)果如下(1)當(dāng)輸入不合法時,出現(xiàn)錯誤提示:(4)當(dāng)輸入數(shù)據(jù)不足5個時程序自動補(bǔ)0:六、心得體會 在本次匯編語言程序設(shè)計實驗中,我們學(xué)習(xí)了匯編語言的循環(huán)結(jié)構(gòu),并對冒泡排序法進(jìn)行了匯編程序設(shè)
18、計,我首先編寫了對給定數(shù)據(jù)進(jìn)行冒泡排序的算法設(shè)計,這有助于我熟悉冒泡排序的邏輯結(jié)構(gòu),理清設(shè)計思路。匯編語言與C語言相似,然而,在設(shè)計過程中,我才意識到,要用匯編語言寫出完整的算法程序并不是一件簡單的事,一個微小的錯誤就可能導(dǎo)致整個程序無法正常運(yùn)行。在編程時,出現(xiàn)了各種各樣的錯誤,如寫程序時沒有切換成英式標(biāo)點(diǎn),16進(jìn)制數(shù)未加“H”符號,做字除法運(yùn)算時忘記將DX清零而導(dǎo)致“Divide Overflow”。這些錯誤都在匯編調(diào)試過程中得到改正。 在接下來的上機(jī)課程中,我們按照老師的要求對改程序進(jìn)行了進(jìn)一步設(shè)計對從鍵盤輸入的數(shù)據(jù)進(jìn)行冒泡排序。這個算法程序較為復(fù)雜,為了使程序能夠更加簡潔明了,我對其進(jìn)行了模塊化設(shè)計,將輸入、輸出、冒泡排序等功能分離出來,用子程序一一實現(xiàn)。由于鍵盤輸入的數(shù)據(jù)并不能簡單的從位數(shù)來判定輸入輸出,我設(shè)定將Space作為分隔符,而結(jié)束輸入時按En
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《離騷》(節(jié)選) 教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 2025年液態(tài)食品包裝機(jī)械合作協(xié)議書
- 2024中國太平洋財產(chǎn)保險股份有限公司自貢中心支公司招聘2人(四川)筆試參考題庫附帶答案詳解
- 2025年湖北省鄂州市單招職業(yè)傾向性測試題庫必考題
- 第13課《黃鶴樓》《渡荊門送別》教學(xué)設(shè)計2024-2025學(xué)年統(tǒng)編版語文八年級上冊
- 2025至2030年中國棉織睡袋數(shù)據(jù)監(jiān)測研究報告
- 山東省日照市2023-2024學(xué)年高二上學(xué)期期末校際聯(lián)合考試地理試題(解析版)
- 2025年廣東省汕尾市單招職業(yè)適應(yīng)性測試題庫學(xué)生專用
- 吉林省吉林市普通中學(xué)2024-2025學(xué)年高三上學(xué)期第一次模擬測試地理試題(解析版)
- 湖北省新高考聯(lián)考協(xié)作體2023-2024學(xué)年高二上學(xué)期11月期中聯(lián)考地理試題(解析版)
- 2023-2024學(xué)年河北省涿州市實驗中學(xué)中考數(shù)學(xué)模試卷含解析
- 初中美術(shù)備課組工作計劃
- 國防動員教案
- 湖北省武漢市江岸區(qū)2024年七年級下學(xué)期期末數(shù)學(xué)試題附答案
- 2024-2034年中國藏香豬養(yǎng)殖行業(yè)市場深度分析及發(fā)展?jié)摿︻A(yù)測報告
- 罪犯個性分測驗
- 辦公室職業(yè)健康業(yè)務(wù)培訓(xùn)
- 五年級英語閱讀理解(共20篇)
- 2024年重慶三峰環(huán)境集團(tuán)招聘筆試參考題庫附帶答案詳解
- (2024年)傳染病培訓(xùn)課件
- 部編版六年級語文下冊第一單元《臘八粥》作業(yè)設(shè)計
評論
0/150
提交評論