汇编基础练习题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给点鼓励总是好的)嘻嘻

猜你喜欢

转载自blog.csdn.net/qq_36931762/article/details/85346185