汇编语言:键盘输入20个数据,完成对附加段数据传送并排序,显示最大和最小数值

汇编语言:键盘输入20个数据,完成对附加段数据传送并排序,显示最大和最小数值


输出效果图
在这里插入图片描述

代码部分,汇编语言。

DATAS SEGMENT
mes0 DB 'Please input 20 numbers:',0ah,0dh,'$'
mes1 DB 0ah,0dh,'The sorted numbers in ES:',0ah,0dh,'$'
mes3 DB 0ah,0dh,'The biggest number: ','$'
mes2 DB 0ah,0dh,'The smallest number: ','$'
msr db 20 dup(?)
len equ 20 
ten db 10
count dw 0
DATAS ENDS

mystack SEGMENT stack
  dw 20 dup(?)
mystack ENDS

exda SEGMENT
 msd db 20 dup(?)
exda ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,es:exda
        
START:
     MOV AX,DATAS
     MOV DS,AX
     MOV AX,EXDA
     MOV ES,AX
     
     mov dx,offset mes0
     mov ah,09h
     int 21h
     
;写数据到数据段     
     mov cx,len
     mov di,offset msr
put: mov ah,1
     int 21h
     sub al,30h
     mul ten
     mov dl,al
     mov ah,1
     int 21h
     sub al,30h
     add al,dl
     mov ds:[di],al
     
     MOV AH,2;空格
	 MOV DL,20H
	 INT 21h
	 inc count
     inc di
     dec cx
     jnz put
     
;送数据到附加段
     MOV SI,OFFSET MSR
     MOV DI,OFFSET MSD
     MOV CX,LEN
NEXT:MOV AL,ds:[SI]
     MOV ES:[DI],AL
     INC SI
     INC DI 
     DEC CX
     JNZ NEXT
 
;对es中的数据排序
EXIT:;这是外循环
	DEC COUNT    ;第一次循环应该是N-1,类似冒泡排序法
	MOV cx,COUNT 
	MOV dI,offset msd
			
 ;内循环	
  LP1:	
	 MOV AL,es:[dI]
	 MOV BL,es:[dI+1]
	 CMP AL,BL  
	 JG CHANGE;大于则送change 交换位置,小于等于了不作为,继续循环
	 INC dI
	 LOOP LP1
	
  s0: CMP COUNT,1
	 JZ OVER   ;外循环为1时,跳出循环,已经排好序了
	 JMP EXIT
	
  CHANGE:
	 XCHG AL,BL
	 MOV es:[dI],AL
	 MOV es:[dI+1],BL
	 INC dI		
	 LOOP LP1
	 jmp s0
	
OVER:
    mov dx,offset mes1
    mov ah,09h
    int 21h
    
    
    MOV SI,offset msd
    MOV CX,20;循环20次,输出20个数   
 ;输出附加段排好序的20个数据
 SHUCHU:
     MOV AL,es:[SI]
     call shuc
     mov ah,2
     MOV DL,20H
     INT 21H
     INC SI
     LOOP SHUCHU
  
    ;输出最小值
     mov dx,offset mes2
     mov ah,09h
     int 21h
     mov di,offset msd
     mov al,es:[di]
     call shuc
  
     ;输出最大值 
     mov dx,offset mes3
     mov ah,09h
     int 21h
     mov di,offset msd
     mov al,es:[di+19]
     call shuc
     
     
  KEY: MOV AH,1
       INT 16H
       JZ KEY
     MOV AH,4CH
     INT 21H   
     
shuc proc ;把一个数输出
      mov ah,0
      div ten
      mov dx,ax
      add dx,3030h
      mov ah,2
      int 21h
      mov dl,dh
      int 21h
      ret
      shuc endp

CODES ENDS
    END START

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石去皿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值