版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、; 用匯編語言實(shí)現(xiàn)實(shí)現(xiàn)冒泡排序,并將排序后的數(shù)輸出DATAS SEGMENTA dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N =$-A ; 計(jì)算數(shù)字所占的字節(jié)數(shù)DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART :MOV AX,DATASMOV DS,AXMOV SI,0 ;SI 遍歷數(shù)字 ; 前一個(gè)數(shù)的地址MOV CX,N/2-1 ; 設(shè)置循環(huán)次數(shù), M(M=N/2個(gè)數(shù)需要,循環(huán) M-1次 CALL BUBBLE ; 調(diào)用 BUBBLE 將原來的數(shù)排序; 輸出排序后的
2、數(shù)MOV CX,N/2 ; 循環(huán) M 次輸出排序后的 M 個(gè)數(shù)MOV SI,0 ;SI 遍歷排序后的數(shù)MOV DI,0 ; 用 DI 記錄數(shù)字的位數(shù)MOV BP,N+5 ;BP 用于遍歷存儲的轉(zhuǎn)化后的字符的位置SHOW: PUSH CX ; 循環(huán)次數(shù)入棧MOV DX,0 ; 由于將要進(jìn)行 16位除需要置高 16位為 0MOV AX,SI ; 低 16位為排序后的數(shù)CALL DTOC ; 調(diào)用 DTOC 將十進(jìn)制數(shù)轉(zhuǎn)換為字符串CALL SHOW_STR ; 調(diào)用 SHOW_STR將一個(gè)數(shù)轉(zhuǎn)化得到的字符串輸出 ADD SI,2 ; 下一個(gè)數(shù)POP CX ; 循環(huán)次數(shù)出棧棧LOOP SHOWMOV
3、AH,4CHINT 21H; 冒泡排序BUBBLE PROCL1: PUSH CX ; 將循環(huán)次數(shù)入棧LEA SI,A ;SI 遍歷 DATAS 數(shù)據(jù)段的數(shù)字L2: MOV AX,ASI ; 將前一個(gè)數(shù)存于 AXCMP AX,ASI+2 ; 比較前后兩個(gè)數(shù)JBE NEXT ; 如果前一個(gè)數(shù)小于或等于后一個(gè)數(shù)則繼續(xù)本輪的比較 XCHG AX,ASI+2 ; 否則,交換前后兩個(gè)數(shù)的位置MOV ASI,AXNEXT:ADD SI,2 ; 下一個(gè)數(shù)LOOP L2 ; 注意內(nèi)層循環(huán)的次數(shù)已經(jīng)確定了POP CX ; 將循環(huán)次數(shù)出棧LOOP L1 ; 下一輪比較RETBUBBLE ENDP; 將十進(jìn)制數(shù)轉(zhuǎn)換
4、為字符串并儲存起來DTOC PROCS:MOV CX,10 ; 將除數(shù) 10,放入 CX 中CALL DIVDW ; 調(diào)用 DIVDW 程序ADD CL,30H ; 把數(shù)字轉(zhuǎn)換為 ASCII 碼,這樣就能顯示了MOV DS:BP,CL ; 把 ASCII 碼放到內(nèi)存中INC DI ; 用 DI 記錄循環(huán)的次數(shù)PUSH AX ; 將低 16位入棧ADD AX,DX ; 將高位與低位相加,接著判斷是否已經(jīng)除盡JZ BACK ; 除盡后返回調(diào)用處POP AX ; 將低 16位出棧DEC BP ; 逆序存放轉(zhuǎn)化后的字符,便于主程序調(diào)用 SHOW_STR JMP SBACK:POP AX ; 為了得到正
5、確的 IP 值,需要出棧一次RETDTOC ENDP; 子程序定義開始 , 功能是分離被除數(shù)的各個(gè)位的數(shù)字; 公式:X/N=int(H/N*65536+rem(H/N*65536+L/NDIVDW PROCPUSH AX ; 低 16位入棧MOV AX,DX ; 將高 16位寫入 AX,MOV DX,0 ; 將高 16位置零DIV CX ; 將新的數(shù)除 10,MOV BX,AX ; 將商 int(H/N轉(zhuǎn)移到 BX ,默認(rèn)余數(shù) rem(H/N在 DX POP AX ; 將低 16位出棧,DIV CX ; 將 rem(H/N*65536+L除 10, 默認(rèn)余數(shù)在 DXMOV CX,DX ; 將余
6、數(shù)轉(zhuǎn)移到 CXMOV DX,BX ; 將商 int(H/N轉(zhuǎn)移到 dx, 相當(dāng)于 int(H/N*65536RET ; 子程序定義結(jié)束DIVDW ENDP; 實(shí)現(xiàn)字符串的輸出SHOW_STR PROCS2:MOV AH,2 ; 輸出數(shù)字轉(zhuǎn)化后的字符串MOV DL,DS:BPINT 21HINC BP ; 順序輸出DEC DI ; 數(shù)字的位數(shù)減一JZ OK ; 字符串輸出完了就結(jié)束JMP S2 ; 否則繼續(xù)輸出OK:MOV AH,2 ; 輸出空格MOV DL,0INT 21HRETSHOW_STR ENDPCODES ENDSEND START; 實(shí)現(xiàn)冒泡排序,并將排序后的數(shù)輸出DATAS SE
7、GMENTA dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A ; 計(jì)算數(shù)字所占的字節(jié)數(shù)DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART :MOV AX,DATASMOV DS,AXMOV SI,0 ;SI 遍歷數(shù)字 ; 前一個(gè)數(shù)的地址MOV CX,N/2-1 ; 設(shè)置循環(huán)次數(shù), M(M=N/2個(gè)數(shù)需要,循環(huán) M-1次 CALL BUBBLE ; 調(diào)用 BUBBLE 將原來的數(shù)排序; 輸出排序后的數(shù)MOV CX,N/2 ; 循環(huán) M 次輸出排序后的 M 個(gè)數(shù)MOV
8、 SI,0 ;SI 遍歷排序后的數(shù)MOV DI,0 ; 用 DI 記錄數(shù)字的位數(shù)MOV BP,N+5 ; 用于遍歷存儲的轉(zhuǎn)化后的字符的位置SHOW: PUSH CX ; 循環(huán)次數(shù)入棧MOV DX,0 ; 由于將要進(jìn)行 16位除需要置高 16位為 0MOV AX,SI ; 低 16位為排序后的數(shù)CALL DTOC ; 調(diào)用 DTOC 將十進(jìn)制數(shù)轉(zhuǎn)換為字符串CALL SHOW_STR ; 調(diào)用 SHOW_STR將一個(gè)數(shù)轉(zhuǎn)化得到的字符串輸出 ADD SI,2 ; 下一個(gè)數(shù)POP CX ; 循環(huán)次數(shù)出棧棧LOOP SHOWMOV AH,4CHINT 21HBUBBLE PROCL1: PUSH CX
9、; 將循環(huán)次數(shù)入棧LEA SI,A ;SI 遍歷 DATAS 數(shù)據(jù)段的數(shù)字L2: MOV AX,ASI ; 將前一個(gè)數(shù)存于 AXCMP AX,ASI+2 ; 比較前后兩個(gè)數(shù)JBE NEXT ; 如果前一個(gè)數(shù)小于或等于后一個(gè)數(shù)則繼續(xù)本輪的比較XCHG AX,ASI+2 ; 否則,交換前后兩個(gè)數(shù)的位置MOV ASI,AXNEXT:ADD SI,2 ; 下一個(gè)數(shù)LOOP L2 ; 注意內(nèi)層循環(huán)的次數(shù)已經(jīng)確定了POP CX ; 將循環(huán)次數(shù)出棧LOOP L1 ; 下一輪比較RETBUBBLE ENDP; 將十進(jìn)制數(shù)轉(zhuǎn)換為字符串并儲存起來DTOC PROCS:MOV CX,10 ; 將除數(shù) 10,放入 C
10、X 中CALL DIVDW ; 調(diào)用 DIVDW 程序ADD CL,30H ; 把數(shù)字轉(zhuǎn)換為 ASCII 碼,這樣就能顯示了MOV DS:BP,CL ; 把 ASCII 碼放到內(nèi)存中INC DI ; 用 DI 記錄循環(huán)的次數(shù)PUSH AX ; 將低 16位入棧ADD AX,DX ; 將高位與低位相加,接著判斷是否已經(jīng)除盡 JZ BACK ; 除盡后返回調(diào)用處POP AX ; 將低 16位出棧DEC BP ; 逆序存放轉(zhuǎn)化后的字符,便于主程序調(diào)用 SHOW_STR JMP SBACK:POP AX ; 為了得到正確的 IP 值,需要出棧一次RETDTOC ENDP; 子程序定義開始 , 功能是分
11、離被除數(shù)的各個(gè)位的數(shù)字; 公式:X/N=int(H/N*65536+rem(H/N*65536+L/NDIVDW PROCPUSH AX ; 低 16位入棧MOV AX,DX ; 將高 16位寫入 AX,MOV DX,0 ; 將高 16位置零DIV CX ; 將新的數(shù)除 10,MOV BX,AX ; 將商 int(H/N轉(zhuǎn)移到 BX ,默認(rèn)余數(shù) rem(H/N在 DX POP AX ; 將低 16位出棧,DIV CX ; 將 rem(H/N*65536+L除 10, 默認(rèn)余數(shù)在 DX MOV CX,DX ; 將余數(shù)轉(zhuǎn)移到 CXMOV DX,BX ; 將商 int(H/N轉(zhuǎn)移到 dx, 相當(dāng)于 int(H/N*65536 RET ; 子程序定義結(jié)束DIVDW ENDP; 實(shí)現(xiàn)字符串的輸出SHOW_STR PROC
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【2021屆備考】2021屆全國名校生物試題分類解析匯編第七期(12月)-I單元-植物的激素調(diào)節(jié)
- 二零二五年度互聯(lián)網(wǎng)企業(yè)品牌形象設(shè)計(jì)合同協(xié)議書
- 2024年版簡易勞動(dòng)協(xié)議樣本版B版
- 2024年零售店面合作經(jīng)營承包協(xié)議模板版B版
- 2025年度IT項(xiàng)目承攬保密協(xié)議及知識產(chǎn)權(quán)歸屬合同3篇
- 【同步備課】2020年高中物理教學(xué)設(shè)計(jì)(新人教必修二)7.3《功率》4
- 二零二五年度個(gè)人承包公司設(shè)備租賃合同協(xié)議3篇
- 2025年小學(xué)語文四年級下冊名師教案語文園地八
- 教科版高中信息技術(shù)必修說課稿-4.1.2 字處理軟件
- 2025版智能庫房租賃與倉儲信息化管理系統(tǒng)合同3篇
- 應(yīng)收帳款管理辦法
- 水利水電工程驗(yàn)收實(shí)施細(xì)則模版(3篇)
- 齊魯名家 談方論藥智慧樹知到期末考試答案2024年
- 小學(xué)六年級數(shù)學(xué)100道題解分?jǐn)?shù)方程
- 南京工業(yè)大學(xué)橋梁工程課程設(shè)計(jì)
- 《眼睛結(jié)構(gòu)與功能》PPT課件.ppt
- 村委會實(shí)虛線信紙.
- GB∕T 39757-2021 建筑施工機(jī)械與設(shè)備 混凝土泵和泵車安全使用規(guī)程
- 電梯公司安全生產(chǎn)管理制度匯編.doc
- 閥門檢測報(bào)告
- 最新童話知識競賽試題(答案)合集
評論
0/150
提交評論