8086汇编 排序输入输出

 

(1)排序 对输入的多个数字进行排序。

要求:

(a)所有数字从键盘输入;

(b)数字中至少包含一个大于 10 的数字;

(c)排好序的数字以十进制形式在屏幕显示

DATA SEGMENT
FLAG DB 0
COUNT DB 0
SAVE DW 20 DUP(0)
INPUTWARN DB 'INPUT YOUR NUMBERS,SEPARATE WITH /,END WITH ENTER','$'
OUTPUTWARN DB 'SORTED RESULTS','$'
ERRORWARN DB 'INPUT ERROR!','$'
DATA ENDS

STACK SEGMENT   
DW 100 DUP(0)  
STACK ENDS 

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK  
MOV SS,AX

LEA SI,SAVE
LEA DX,INPUTWARN
MOV AH,9H
INT 21H

L0:;对输入字符进行检查
MOV AH,1H
INT 21H
CMP AL,2FH
JZ L1;输入为'/',将上一组输入字符存为数字
CMP AL,0DH
JZ L2;输入回车,输入过程结束
CMP AL,30H
JB L3;不是数字字符提示输入错误
CMP AL,39H
JA L3
JMP L4;输入为数字字符

L1:
MOV FLAG,0
MOV [SI],BX
INC SI
INC SI
INC COUNT
JMP L0

L2:
MOV [SI],BX;保存最后一个数字
INC COUNT
MOV DL,0AH;以下三行未知
MOV AH,02H
INT 21H
JMP L6

L3:
LEA DX,ERRORWARN
MOV AH, 9H
INT 21H
JMP OVER

L4:
CMP FLAG,1
JZ L5;是两位数
SUB AL,30H
MOV BL,AL
MOV BH,0
ADD FLAG,1;FLAG为1说明已经输入一个数字
JMP L0

L5:
MOV FLAG,0
SUB AL,30H
MOV BH,BL
MOV BL,AL;以BCD码形式存储在BX中
JMP L0

L6:;接下来对SAVE中的BCD码数进行冒泡排序,见课本96页
MOV AL,COUNT
DEC AL
MOV AH,0
MOV CX,AX;循环次数
ADD AX,AX
LEA SI,SAVE
ADD SI, AX      

L7:
PUSH CX
PUSH SI

L8:
MOV AX,[SI]
CMP AX,[SI-2]
JAE L9
XCHG AX,[SI-2]
MOV [SI],AX

L9:
DEC SI
DEC SI
LOOP L8
POP SI
POP CX
LOOP L7

LEA DX,OUTPUTWARN
MOV AH,9H
INT 21H

MOV AL,COUNT 
MOV BL,AL;BL控制最后一个数字后无/符号
MOV AH,0
MOV CX,AX
LEA SI,SAVE
L10:;将BCD码转换为ASCII码输出
MOV DL,[SI+1];十位
ADD DL,30H
MOV AH,02H
INT 21H

MOV DL,[SI];个位
ADD DL,30H
MOV AH,02H
INT 21H

CMP BL,1;间隔/符号
JZ OVER
MOV DL,2FH
MOV AH,02H
INT 21H
INC SI
INC SI
DEC BL
LOOP L10   

OVER:
CODE ENDS
END START

结果:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值