版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、實(shí)驗(yàn)?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)試匯編語言程序。二、實(shí)驗(yàn)內(nèi)容及要求(1)實(shí)驗(yàn)內(nèi)容:從鍵盤輸入五個(gè)有符號(hào)數(shù),用冒泡排序法將其按從小到大的順序排序。(2)實(shí)驗(yàn)要求:編制程序,對(duì)這組數(shù)進(jìn)行排序并輸出原數(shù)據(jù)及排序后的數(shù)據(jù);利用DEBUG調(diào)試工具,用D0命令,查看排序前后內(nèi)存數(shù)據(jù)的變化;去掉最大值和最小值,求出其余值的平均值,輸出最大值、最小值和平均值;用壓棧PUSH和出棧POP指令,將平均值按位逐個(gè)輸出;將平均值轉(zhuǎn)化為二進(jìn)制串,并將這組二進(jìn)制串輸出;
2、所有數(shù)據(jù)輸出前要用字符串的輸出指令進(jìn)行輸出提示,所有數(shù)據(jù)結(jié)果能清晰顯示。開始三、程序流程圖(1)主程序:MAIN初始化鍵盤輸入數(shù)據(jù)調(diào)用INPUT子程序顯示輸入錯(cuò)誤輸入是否正確 否 是顯示原始數(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ù)的存儲(chǔ)單元COUNT DW 5 TWO DW 2FLAG1 DW 0 ;判斷符號(hào)標(biāo)志FLAG2 DB 0 ;判斷首位是否為零的標(biāo)志FAULT DW -1 ;判斷出錯(cuò)標(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號(hào)DOS功能調(diào)用,提示輸入數(shù)據(jù) INT 21H CALL CRLF ;回車換行REIN: CALL INPUT ;調(diào)用I
6、NPUT子程序,輸入原始數(shù)據(jù) CMP AX,FAULT ;判斷是否出錯(cuò), JE REIN ;出錯(cuò)則重新輸入 LEA DX,STR2 MOV AH,09H ;9號(hào)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號(hào)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號(hào)DOS功能調(diào)用,提示輸出數(shù)據(jù)的最小值 INT 21H CALL ONE ;調(diào)用ONE子程序,輸出最小值 CALL CRLF LEA DX,STR5 MOV AH,09H ;9號(hào)DOS功能調(diào)用,提示輸出排序后的最大值 INT 21H MOV BX,ARRAYSI+8 ;將最大值存入BX CALL ONE ;調(diào)用ONE子程序,輸出最大值 CALL CRLF LEA DX,STR6 MOV AH,09H ;9號(hào)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 ;計(jì)數(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號(hào)DOS功能調(diào)用,提示輸出平均值的二進(jìn)制串 MOV CX,16 ;16位二進(jìn)制串,計(jì)數(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號(hào)DOS功能調(diào)用,輸出字符“0”或“1” INT 21H LOOP LL2 MOV AH,4CH INT 21H ;4C號(hào)功能調(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 ;計(jì)數(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號(hào)DOS功能調(diào)用,提示輸入不合法 INT 21H CALL CRLF MOV AX,FAULT ;以AX中的值作為出錯(cuò)標(biāo)志 JMP EXIT3STO: MOV ARRAYSI,BX ;是空格符,將BX中的二進(jìn)制數(shù)存入存儲(chǔ)單元 ADD SI,2 JMP NEXT1EXIT2: MOV ARRAYSI,BX ;是換行符,將BX中的二進(jìn)制數(shù)存入存儲(chǔ)單元 CALL CRLFE
11、XIT3: RETINPUT ENDP;-子程序:DTB功能: 將鍵盤輸入的十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)形式存入BX;-DTB PROC AND BX,0 AND FLAG1,0 ;符號(hào)標(biāo)志,0為正,1為負(fù)CHAR: MOV AH,01H ;1號(hào)DOS功能調(diào)用,輸入一個(gè)字符,存入AL INT 21H MOV DL,AL CMP AL,2DH ;判斷輸入字符是否為負(fù)號(hào)"-" JNZ NEXT2 MOV FLAG1,1 ;是負(fù)數(shù),將符號(hào)標(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ù)符號(hào)標(biāo)志判斷輸入是否為負(fù) JNZ EXIT1 NEG BX ;對(duì)BX中的數(shù)求補(bǔ)EXIT1: RETDTB ENDP;-子程序:OUTPUT功能: 輸出一組數(shù)據(jù);-OUTPUT PROC CALL CRLF MOV DI,COUNT ;計(jì)數(shù)器DI=5 AND SI,0GO1: MOV BX,ARRAYSI ;將存儲(chǔ)單元的第一組數(shù)據(jù)存入BX T
13、EST BX,8000H ;判斷正負(fù) JZ GO2 MOV DL,2DH MOV AH,02H ;2號(hào)DOS功能調(diào)用,輸出負(fù)號(hào)"-" 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號(hào)DOS功能調(diào)用,輸出空格符 INT 21H ADD SI,2 ;指針指向下一數(shù)據(jù) DEC DI ;DIDI-1 JNZ GO1 ;計(jì)數(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號(hào)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)換為一個(gè)十進(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 ;對(duì)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號(hào)DOS功能調(diào)用,輸出一位十進(jìn)制數(shù) INT 21HQUIT2: RETBTD ENDP;-子程序:SORT功能: 冒泡排序;- SORT PROC CLD MOV CX,COUNT ;初始化計(jì)數(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 ;還原計(jì)數(shù)器CX的值 LOOP LOO1 ;CX=0,停止外循環(huán) RETSORT ENDP;- CODE ENDS END START五、運(yùn)行結(jié)果(1)對(duì)300,250,280,240,260五個(gè)數(shù)進(jìn)行冒泡排序,運(yùn)行結(jié)果如下:(2)對(duì)-1,2,54,-38,43五個(gè)數(shù)進(jìn)行冒泡排序,運(yùn)行結(jié)果如下(1)當(dāng)輸入不合法時(shí),出現(xiàn)錯(cuò)誤提示:(4)當(dāng)輸入數(shù)據(jù)不足5個(gè)時(shí)程序自動(dòng)補(bǔ)0:六、心得體會(huì) 在本次匯編語言程序設(shè)計(jì)實(shí)驗(yàn)中,我們學(xué)習(xí)了匯編語言的循環(huán)結(jié)構(gòu),并對(duì)冒泡排序法進(jìn)行了匯編程序設(shè)
18、計(jì),我首先編寫了對(duì)給定數(shù)據(jù)進(jìn)行冒泡排序的算法設(shè)計(jì),這有助于我熟悉冒泡排序的邏輯結(jié)構(gòu),理清設(shè)計(jì)思路。匯編語言與C語言相似,然而,在設(shè)計(jì)過程中,我才意識(shí)到,要用匯編語言寫出完整的算法程序并不是一件簡(jiǎn)單的事,一個(gè)微小的錯(cuò)誤就可能導(dǎo)致整個(gè)程序無法正常運(yùn)行。在編程時(shí),出現(xiàn)了各種各樣的錯(cuò)誤,如寫程序時(shí)沒有切換成英式標(biāo)點(diǎn),16進(jìn)制數(shù)未加“H”符號(hào),做字除法運(yùn)算時(shí)忘記將DX清零而導(dǎo)致“Divide Overflow”。這些錯(cuò)誤都在匯編調(diào)試過程中得到改正。 在接下來的上機(jī)課程中,我們按照老師的要求對(duì)改程序進(jìn)行了進(jìn)一步設(shè)計(jì)對(duì)從鍵盤輸入的數(shù)據(jù)進(jìn)行冒泡排序。這個(gè)算法程序較為復(fù)雜,為了使程序能夠更加簡(jiǎn)潔明了,我對(duì)其進(jìn)行了模塊化設(shè)計(jì),將輸入、輸出、冒泡排序等功能分離出來,用子程序一一實(shí)現(xiàn)。由于鍵盤輸入的數(shù)據(jù)并不能簡(jiǎn)單的從位數(shù)來判定輸入輸出,我設(shè)定將Space作為分隔符,而結(jié)束輸入時(shí)按En
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高品質(zhì)居家照顧老人保姆雇傭合同范本
- 心理危機(jī)干預(yù)模式-第2篇-深度研究
- 云技術(shù)對(duì)影視產(chǎn)業(yè)的影響-深度研究
- 作物病蟲害自動(dòng)識(shí)別技術(shù)-深度研究
- 文物三維建模與動(dòng)畫制作-深度研究
- 極地設(shè)施智能監(jiān)控-深度研究
- PHP在社交網(wǎng)絡(luò)廣告投放-深度研究
- 3D重建與虛擬現(xiàn)實(shí)-深度研究
- 人工智能與智能家居融合技術(shù)-深度研究
- 抗生素殘留風(fēng)險(xiǎn)評(píng)估模型-深度研究
- 2024版?zhèn)€人私有房屋購買合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(含答案)
- 作品著作權(quán)獨(dú)家授權(quán)協(xié)議(部分授權(quán))
- 取水泵站施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論