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