史上最牛最完整的匯編語言冒泡排序程序參考模板_第1頁
史上最牛最完整的匯編語言冒泡排序程序參考模板_第2頁
史上最牛最完整的匯編語言冒泡排序程序參考模板_第3頁
史上最牛最完整的匯編語言冒泡排序程序參考模板_第4頁
史上最牛最完整的匯編語言冒泡排序程序參考模板_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、;題目:編制一個完整的匯編語言程序,從鍵盤上讀入若干個(可以超過十個)十進制數(shù)(正數(shù)),排序后在屏幕上輸出。 ;采用冒泡法排序,綜合運用子程序和宏匯編,使程序模塊化。 ;程序代碼 M_DIRECT MACRO STRING ;定義一個宏,調用09號DOS功能在屏幕上顯示一個字符串 MOV DX,OFFSET STRING MOV AH,09 INT 21H ENDM DATA SEGMENT DIR1 DB 'count of numbers to sort:$ ' ;提示輸入要排序的數(shù)據(jù)的個數(shù) DIR2 DB 'please input sorting numbers

2、:$ '提示輸入要排序的數(shù)據(jù) DIR3 DB 'sorting result:$ ' ;在屏幕上提示排好續(xù)的數(shù)據(jù) DIR4 DB '*$ ' DIR5 DB 'please choose u(up)ord(down):$ ' DIR6 DB 'input error$ ' COUNT = 100 WTEMP DW ? ARRAY DW COUNT DUP(?) ;用來保存輸入的數(shù)據(jù) CRLF DB 13,10, '$ ' ;實現(xiàn)回車換行的功能,130DH,回車;100AH,換行 LEN DW ? ;保存實際

3、輸入的數(shù)據(jù)的個數(shù) DATA ENDS ; ; CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START: PUSH DS SUB AX,AX ;置AX為0 PUSH AX 1 / 7 MOV AX,DATA ;將數(shù)據(jù)段的地址送到DX中 MOV DS,AX READ: M_DIRECT DIR1 ;宏調用,在屏幕上提示輸入要輸入的數(shù)據(jù)的個數(shù) CALL P_GETNEW ;調用子程序P-GETNEW,輸入要輸入的數(shù)據(jù)的個數(shù) MOV CX,AX MOV LEN,AX LEA BX,ARRAY MOV AH,09 ;調用09號功能,實現(xiàn)回車換行 L

4、EA DX,CRLF INT 21H ;屏幕提示輸入要排序的數(shù)據(jù) M_DIRECT DIR2 GETNUMBER: CALL P_GETNEW ;輸入數(shù)據(jù)并保存到ARRAY中 MOV BX,AX ADD BX ,2 LOOP GETNUMBER SORT: MOV CX,LEN ;排序程序部分 DEC CX MOV AH,09H LEA DX,CRLF INT 21H M_DIRECT DIR5 COMPARE:MOV AH,01H INT 21H CMP AL, 'U' ;判斷是升序排序還是降序排序 JZ UP ;輸入的字符是U或u跳轉到升序排序程序 CMP AL, '

5、;u' JZ UP CMP AL, 'D' ;輸入的字符是D或d跳轉到降敘排序程序 JZ DOWN CMP AL, 'd' JZ DOWN UP: MOV DI,CX ;升序排序程序 MOV BX,0 LOOP1: MOV AX,ARRAYBX CMP AX,ARRAYBX+2 JNGE CONTINUE1 XCHG AX,ARRAYBX+2 MOV ARRAYBX,AX CONTINUE1: ADD BX,2 LOOP LOOP1 MOV CX,DI LOOP UP JMP OUTPUT ;排序完后跳轉到輸出程序部分 DOWN: MOV DI,CX ;

6、降序排序程序 MOV BX,0 LOOP2: MOV AX,ARRAYBX CMP AX,ARRAYBX+2 JGE CONTINUE2 XCHG AX,ARRAYBX+2 MOV ARRAYBX,AX CONTINUE2: ADD BX,2 LOOP LOOP2 MOV CX,DI LOOP DOWN JMP OUTPUT ;排序完后跳轉到輸出程序部分 OUTPUT: MOV AH,09 ;回車換行 LEA DX,CRLF INT 21H M_DIRECT DIR3 MOV CX,LEN ;為輸出程序設置好入口參數(shù) MOV BX,OFFSET ARRAY WRITE: MOV AX,BX ;

7、輸出排好序的數(shù)據(jù) MOV WTEMP,AX ;將入口參數(shù)存放到共享變量中 CALL P_OUTPUT ADD BX,2 MOV DL,20H ;顯示空格,將兩個輸出的數(shù)據(jù)分開 MOV AH,02H INT 21H LOOP WRITE MOV AH,09 ;隔離兩次輸入排序輸出的作用 LEA DX,CRLF INT 21H M_DIRECT DIR4 MOV AH,09 ;實現(xiàn)循環(huán)輸入數(shù)據(jù)并排序輸出 LEA DX,CRLF INT 21H LOOP READ RET MAIN ENDP ; ;從鍵盤上輸入一個數(shù)據(jù)的子程序 ; P_GETNEW PROC PUSH BX ;出口參數(shù):AX=補碼表

8、示的二進制數(shù) PUSH CX ;說明:負數(shù)用“-”引導,數(shù)據(jù)范圍是+32767-32768 PUSH DX XOR BX,BX ;BX保存結果 XOR CX,CX ;CX為正負標志,0為正,-1為負 MOV AH,1 ;輸入一個字符 INT 21H CMP AL, '+' ;是“+”,繼續(xù)輸入字符 JZ READ1 CMP AL, '-' ;是“,設置-1標志 JNZ READ2 MOV CX,-1 READ1: MOV AH,1 ;繼續(xù)輸入字符 INT 21H READ2: CMP AL, '0' ;不是09之間的字符,則輸入數(shù)據(jù)結束 JB R

9、EAD3 CMP AL, '9' JA READ3 SUB AL,30H ;是09之間的字符,則轉換為二進制數(shù) ;利用移位指令,實現(xiàn)數(shù)值乘10:BXBX*10 SHL BX,1 MOV DX,BX SHL BX,1 SHL BX,1 ADD BX,DX MOV AH,0 ADD BX,AX ;已輸入數(shù)值乘10后,與新輸入的數(shù)值相加 JMP READ1 ;繼續(xù)輸入字符 READ3: CMP CX,0 ;是負數(shù),進行求補 JZ READ4 NEG BX READ4: MOV AX,BX ;設置出口參數(shù) POP DX POP CX POP BX RET ;子程序返回 P_GETNEW

10、 ENDP ; ;用冒泡法排序的子程序(從大到?。?; ;P_SORT PROC ;RET ;子程序返回 ;P_SORT ENDP ; ;數(shù)據(jù)輸出子程序 ; P_OUTPUT PROC PUSH AX ;入口參數(shù):共享變量WTEMP PUSH BX PUSH DX MOV AX,WTEMP ;取出顯示的數(shù)據(jù) TEST AX,AX ;判斷數(shù)據(jù)是零、正書還是負數(shù) JNZ WRITE1 MOV DL, '0' ;是0,顯示0后退出 MOV AH,2 INT 21H JMP WRITE5 WRITE1: JNS WRITE2 ;是負數(shù),顯示“-” MOV BX,AX ;AX數(shù)據(jù)暫存于BX MOV DL, '-' MOV AH,2 INT 21H MOV AX,BX NEG AX ;數(shù)據(jù)求補(絕對值) WRITE2: MOV BX,10 PUSH BX ;10壓入堆棧,做為推退出標志 WRITE3: CMP AX,0 ;數(shù)據(jù)(商)為零,轉向顯示 JZ WRITE4 SUB DX,DX ;擴展被除數(shù)DX.AX DIV BX ;數(shù)據(jù)除以10 ADD DL,30H ;余數(shù)(09)轉換為ASC碼 PUSH DX ;數(shù)據(jù)各位先低位后高位壓入堆棧 JMP WRITE3 WRITE4: POP DX ;數(shù)據(jù)各位先高位后低位彈出堆棧

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論