1. 程式人生 > >彙編基礎練習題14: 編寫排序子程式,把資料區中的N個數進行排序(資料區中可能有多個類似13題中a1的變數:a2,a3。。。那麼該子程式應該有幾個入口引數?),然後在主程式中驗證。

彙編基礎練習題14: 編寫排序子程式,把資料區中的N個數進行排序(資料區中可能有多個類似13題中a1的變數:a2,a3。。。那麼該子程式應該有幾個入口引數?),然後在主程式中驗證。

彙編基礎練習題14:

編寫排序子程式,把資料區中的N個數進行排序(資料區中可能有多個類似13題中a1的變數:a2,a3。。。那麼該子程式應該有幾個入口引數?),然後在主程式中驗證。

編譯工具:Masm for Windows 整合實驗環境2012.5
(附帶一個工具下載地址https://download.csdn.net/download/qq_36931762/10825773
有需要可以去下載)
程式碼思路:
思想利用的是氣泡排序
---------------------------------------可愛的程式碼區別線----------------------------------

DATAS SEGMENT
     A1 DW 123
     A2 DW 10
     A3 DW 200
     A4 DW 1
     A5 DW 600
DATAS ENDS

STACKS SEGMENT
    ;此處輸入堆疊段程式碼
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV BP,OFFSET A1
    MOV SI,OFFSET A1
    MOV DI,10;數字個數
    CALL SORT
    MOV BX,0
ML:
    CMP BX,DI
    JE MEN
    MOV AX,[A1+BX]
    CALL PRINTAX
    ;回車換行
    MOV AH,02H
	MOV DL,0DH
	INT 21H
	MOV AH,02H
	MOV DL,0AH
	INT 21H
	
    ADD BX,2
    JMP ML
  
MEN:
    MOV AH,4CH
    INT 21H
   
SORT PROC
	PUSH SI
	PUSH BP
	PUSH DI
	PUSH DX
	PUSH CX
	PUSH BX
	SUB DI,2
	
SL1:
	CMP BP,DI
	JE SEN
	MOV AX,DI
	SUB AX,BP
	MOV BX,0
SL2:
	CMP BX,AX
	JE SSEN
	MOV CX,[SI+BX]
	MOV DX,[SI+BX+2]
	CMP CX,DX
	JNA SSSEN
	MOV [SI+BX],DX
	MOV [SI+BX+2],CX
	ADD BX,2
	JMP SL2
	
SSSEN:
	ADD BX,2
	JMP SL2
	
SSEN:
	ADD BP,2
	JMP SL1
	
SEN:	
	POP BX
	POP CX
	POP DX 
	POP DI
	POP BP
	POP SI
	RET
	
SORT ENDP   

    
PRINTAX PROC
	
	PUSH BX
	PUSH CX
	PUSH DX
	
    MOV BL,10
    MOV CL,0
    CMP AX,10
    JB PRINTF
W:    
    DIV BL
    PUSH AX
    INC CL
    MOV AH,0
    CMP AX,0
    JA W 
p:
	POP DX
	DEC CL
	MOV DL,DH
	ADD DL,48
	MOV AH,2
	INT 21H
	CMP CL,0
	JNE P
	
	POP DX
	POP CX
	POP BX
	
    RET
    
PRINTF:
	MOV DL,AL
	ADD DL,48
	MOV AH,2
	INT 21H

	POP DX
	POP CX
	POP BX
	
    RET
PRINTAX ENDP    
    
    
CODES ENDS
    END START
   --------------------------------------------程式碼區別線----------------------------------

輸出結果:

看不懂歡迎提問啦,也歡迎提出我程式碼中的問題和提出程式碼優化方案,大家一起學習嘛。
原創看過隨手點個贊吧!(雖然我也不太知道點贊有啥用emmm給點鼓勵總是好的)嘻嘻