发布网友 发布时间:2022-04-23 09:59
共1个回答
热心网友 时间:2023-08-05 02:28
datas segment
buffer db 3 p(0) ;存放输入数据的缓冲区
pr1 db 0ah,0dh,"Input a numbers:$";输入提示
pr2 db 0ah,0dh,"Sort:$" ;输出提示
datas ends
codes segment
assume cs:codes,ds:datas
start: mov ax,datas
mov ds,ax ;ds←数据段段地址值
call input ;调用输入过程
mov si,offset buffer ;si←缓冲首偏移地址
mov al,[si] ;al←缓冲区中的第一个数码
mov bl,[si+1] ;bl←缓冲区中的第二个数码
mov cl,[si+2] ;cl←缓冲区中的第三个数码
cmp al,bl
jae next1
xchg al,bl ;大数存入al,小数存bl
next1: cmp al,cl
jae next2
xchg al,cl ;大数存入al,小数存入cl
next2: cmp bl,cl
jae next3
xchg bl,cl ;大数存入bl,小数存入cl
next3: mov [si],al ;把数码按从大到小的顺序存入缓冲区
mov [si+1],bl
mov [si+2],cl
call display ;调用显示过程
mov ah,4ch
int 21h
input proc ;输入操作过程
mov cx,3 ;cx←循环次数=输入的数码个数
lea si,buffer ;si←缓冲区首地址
lp:lea dx,pr1 ;dx←输入提示信息首地址
mov ah,09h ;显示输入提示信息
int 21h
mov ah,01h ;输入一个数码到al
int 21h
mov [si],al ;输入的数码存入缓冲区
inc si ;si指向缓冲区的下一个字节单元
loop lp ;输入操作没有结束,返回lp输入下一个数码
ret
input endp
display proc ;显示输出过程
lea dx,pr2 ;显示输出提示信息
mov ah,09h
int 21h
lea si,buffer ;si指向缓冲区的首地址
mov cx,3 ;cx←循环输出显示的数码个数
lp1: mov dl,[si] ;dl←缓冲区中的数码
mov ah,02h ;显示数码
int 21h
mov dl,20h ;显示空格
mov ah,02h
int 21h
inc si ;si指向下一个数码
loop lp1
ret
display endp
codes ends
end start