汇编基础练习题17:
综合以上子函数,完成如下操作:
(1)用提示信息提示用户输入8个数,每个数输入后换行,在下一行输入下一个数;
(2)输入后在新的一行显示这8个数;
(3)然后对这8个数排序;
(4)在新的一行显示排序后的8个数。
Please input 8 number:
23a
46c
。。。
Before sort,the 8 nunber is: 23,46,…
After sort,the 8 nunber is: …
编译工具:Masm for Windows 集成实验环境2012.5
(附带一个工具下载地址https://download.csdn.net/download/qq_36931762/10825773
有需要可以去下载)
代码思路:
---------------------------------------可爱的代码区别线----------------------------------
DATAS SEGMENT
NUM DW 8 DUP(0)
SINPUT DB 'Please input 8 number:$'
SOUT1 DB 'Before sort,the 8 nunber is:$'
SOUT2 DB 'After sort,the 8 nunber is:$'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV SI,OFFSET SINPUT
CALL COUTSTRING
CALL COUTENTER
MOV BX,0
ML:
CMP BX,16
JE MEN
CALL PIN
MOV SI,OFFSET NUM
MOV [SI+BX],AX
CALL COUTENTER
ADD BX,2
JMP ML
MEN:
MOV SI,OFFSET SOUT1
CALL COUTSTRING
MOV BX,0
ML2:
CMP BX,16
JE MEN2
MOV SI,OFFSET NUM
MOV AX,[SI+BX]
CALL PRINTAX
CMP BX,14
JE NODOUHAO1
MOV DL,','
MOV AH,2
INT 21H
NODOUHAO1:
ADD BX,2
JMP ML2
MEN2:
CALL COUTENTER
MOV SI,OFFSET SOUT2
CALL COUTSTRING
MOV BP,OFFSET NUM
MOV SI,OFFSET NUM
MOV DI,16;数字个数
CALL SORT
MOV BX,0
ML3:
CMP BX,DI
JE MEN3
MOV AX,[NUM+BX]
CALL PRINTAX
CMP BX,14
JE NODOUHAO2
MOV DL,','
MOV AH,2
INT 21H
NODOUHAO2:
ADD BX,2
JMP ML3
MEN3:
MOV AH,4CH
INT 21H
COUTSTRING PROC
PUSH DX
COUTL:
MOV DL,[SI]
CMP DL,'$'
JE COUTEN
MOV AH,2
INT 21H
ADD SI,1
JMP COUTL
COUTEN:
POP DX
RET
COUTSTRING ENDP
PIN PROC
PUSH BX
PUSH CX
PUSH DX
MOV CX,0
MOV DL,10
CIN:
MOV AH,1
INT 21H
SUB AL,48
MOV AH,0
MOV BX,AX
MOV AX,CX
CMP BX,9
JA EN
CMP BX,0
JB EN
MUL DL
ADD AX,BX
MOV CX,AX
JMP CIN
EN:
POP DX
POP CX
POP BX
RET
PIN 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
COUTENTER PROC
PUSH AX
PUSH DX
;回车换行
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
COUTENTER ENDP
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
CODES ENDS
END START
--------------------------------------------代码区别线----------------------------------
输出结果:
看不懂欢迎提问啦,也欢迎提出我代码中的问题和提出代码优化方案,大家一起学习嘛。
原创看过随手点个赞吧!(虽然我也不太知道点赞有啥用emmm给点鼓励总是好的)嘻嘻