汇编基础练习题17:综合以上子函数,完成输入八个数并排序重新输出

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值