(精選)匯編語言實現(xiàn)冒泡排序(一)Word版_第1頁
(精選)匯編語言實現(xiàn)冒泡排序(一)Word版_第2頁
(精選)匯編語言實現(xiàn)冒泡排序(一)Word版_第3頁
(精選)匯編語言實現(xiàn)冒泡排序(一)Word版_第4頁
(精選)匯編語言實現(xiàn)冒泡排序(一)Word版_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、;用匯編語言實現(xiàn)實現(xiàn)冒泡排序,并將排序后的數(shù)輸出DATAS SEGMENT A dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A ;計算數(shù)字所占的字節(jié)數(shù)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART:MOV AX,DATAS MOV DS,AX MOV SI,0;SI遍歷數(shù)字;前一個數(shù)的地址 MOV CX,N/2-1;設(shè)置循環(huán)次數(shù),M(M=N/2)個數(shù)需要,循環(huán)M-1次 CALL BUBBLE;調(diào)用BUBBLE將原來的數(shù)排序;輸出排序后的數(shù) MOV CX,N/

2、2;循環(huán)M次輸出排序后的M個數(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;由于將要進行16位除需要置高16位為0 MOV AX,SI ;低16位為排序后的數(shù) CALL DTOC ;調(diào)用DTOC將十進制數(shù)轉(zhuǎn)換為字符串 CALL SHOW_STR ;調(diào)用SHOW_STR將一個數(shù)轉(zhuǎn)化得到的字符串輸出 ADD SI,2;下一個數(shù) POP CX;循環(huán)次數(shù)出棧棧 LOOP SHOW MOV AH,4CH INT 21H;冒泡排序 BUBBLE PROC

3、L1:PUSH CX;將循環(huán)次數(shù)入棧LEA SI,A;SI遍歷DATAS數(shù)據(jù)段的數(shù)字L2: MOV AX,ASI;將前一個數(shù)存于AXCMP AX,ASI+2;比較前后兩個數(shù)JBE NEXT;如果前一個數(shù)小于或等于后一個數(shù)則繼續(xù)本輪的比較XCHG AX,ASI+2;否則,交換前后兩個數(shù)的位置MOV ASI,AXNEXT:ADD SI,2;下一個數(shù) LOOP L2;注意內(nèi)層循環(huán)的次數(shù)已經(jīng)確定了 POP CX;將循環(huán)次數(shù)出棧 LOOP L1;下一輪比較 RETBUBBLE ENDP; 將十進制數(shù)轉(zhuǎn)換為字符串并儲存起來 DTOC PROC S:MOV CX,10 ;將除數(shù)10,放入CX中 CALL D

4、IVDW ;調(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_STRJMP S BACK:POP AX ;為了得到正確的IP值,需要出棧一次 RET DTOC ENDP;子程序定義開始,功能是分離被除數(shù)的各個位的數(shù)字;公式:X/N=int(H/N)

5、*65536+rem(H/N)*65536+L/N DIVDW PROC PUSH AX ;低16位入棧 MOV AX,DX ;將高16位寫入AX, MOV DX,0 ;將高16位置零 DIV CX ;將新的數(shù)除10, MOV BX,AX ;將商int(H/N)轉(zhuǎn)移到BX,默認余數(shù)rem(H/N)在DX POP AX ;將低16位出棧, DIV CX ;將rem(H/N)*65536+L除10,默認余數(shù)在DX MOV CX,DX ;將余數(shù)轉(zhuǎn)移到CX MOV DX,BX ;將商int(H/N)轉(zhuǎn)移到dx,相當于int(H/N)*65536 RET ;子程序定義結(jié)束 DIVDW ENDP ;實現(xiàn)字

6、符串的輸出 SHOW_STR PROCS2:MOV AH,2;輸出數(shù)字轉(zhuǎn)化后的字符串 MOV DL,DS:BP INT 21H INC BP;順序輸出 DEC DI;數(shù)字的位數(shù)減一 JZ OK;字符串輸出完了就結(jié)束 JMP S2;否則繼續(xù)輸出OK:MOV AH,2;輸出空格 MOV DL,0 INT 21H RETSHOW_STR ENDP CODES ENDSEND START;實現(xiàn)冒泡排序,并將排序后的數(shù)輸出DATAS SEGMENT A dw 100,344,3435,43433,3438,343,134,80,8,1000,65535,54,45 N=$-A ;計算數(shù)字所占的字節(jié)數(shù)DA

7、TAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART:MOV AX,DATAS MOV DS,AX MOV SI,0;SI遍歷數(shù)字;前一個數(shù)的地址 MOV CX,N/2-1;設(shè)置循環(huán)次數(shù),M(M=N/2)個數(shù)需要,循環(huán)M-1次 CALL BUBBLE;調(diào)用BUBBLE將原來的數(shù)排序;輸出排序后的數(shù) MOV CX,N/2;循環(huán)M次輸出排序后的M個數(shù) MOV 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;由于將

8、要進行16位除需要置高16位為0 MOV AX,SI ;低16位為排序后的數(shù) CALL DTOC;調(diào)用DTOC將十進制數(shù)轉(zhuǎn)換為字符串 CALL SHOW_STR ;調(diào)用SHOW_STR將一個數(shù)轉(zhuǎn)化得到的字符串輸出 ADD SI,2;下一個數(shù) POP CX;循環(huán)次數(shù)出棧棧 LOOP SHOW MOV AH,4CH INT 21H BUBBLE PROCL1:PUSH CX;將循環(huán)次數(shù)入棧LEA SI,A;SI遍歷DATAS數(shù)據(jù)段的數(shù)字L2: MOV AX,ASI;將前一個數(shù)存于AXCMP AX,ASI+2;比較前后兩個數(shù)JBE NEXT;如果前一個數(shù)小于或等于后一個數(shù)則繼續(xù)本輪的比較XCHG A

9、X,ASI+2;否則,交換前后兩個數(shù)的位置MOV ASI,AXNEXT:ADD SI,2;下一個數(shù) LOOP L2;注意內(nèi)層循環(huán)的次數(shù)已經(jīng)確定了 POP CX;將循環(huán)次數(shù)出棧 LOOP L1;下一輪比較 RETBUBBLE ENDP;將十進制數(shù)轉(zhuǎn)換為字符串并儲存起來DTOC PROC S: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 ;將高位與

10、低位相加,接著判斷是否已經(jīng)除盡 JZ BACK ;除盡后返回調(diào)用處 POP AX;將低16位出棧 DEC BP ;逆序存放轉(zhuǎn)化后的字符,便于主程序調(diào)用SHOW_STR JMP S BACK:POP AX ;為了得到正確的IP值,需要出棧一次 RET DTOC ENDP;子程序定義開始,功能是分離被除數(shù)的各個位的數(shù)字;公式:X/N=int(H/N)*65536+rem(H/N)*65536+L/N DIVDW PROC PUSH AX ;低16位入棧 MOV AX,DX ;將高16位寫入AX, MOV DX,0 ;將高16位置零 DIV CX ;將新的數(shù)除10, MOV BX,AX ;將商int(H/N)轉(zhuǎn)移到BX,默認余數(shù)rem(H/N)在DX POP AX ;將低16位出棧, DIV CX ;將rem(H/N)*65536+L除10,默認余數(shù)在DX MOV CX,DX ;將余數(shù)轉(zhuǎn)移到CX MOV DX,BX ;將商int(H/N)轉(zhuǎn)移到dx,相當于int(H/N)*65536 RET ;子程序定義結(jié)束 DIVDW ENDP ;實現(xiàn)字符串的輸出 SHOW_STR PROCS2:MOV AH,2;輸出數(shù)字轉(zhuǎn)化后的字符串 MOV DL,

溫馨提示

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

評論

0/150

提交評論