前言
输入十个数对他们进行排序以后再输出排序后的数字
一、程序
DATAS SEGMENT
a0 dw 12 dup(?)
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 a0
mov bl,0
;比较10和bl相等跳到L2,否则调用input函数,把输入的数存到a0中
L3:
cmp bl,10
je L2
call input
mov [si],cx
add bl,1
add si,2
jmp L3
;初始化
L2:
mov di,offset a0
mov cl,10
;调用sort函数进行排序
call sort
;初始化
mov si,offset a0
mov bl,0
;比较bl和10相等跳到L1结束,否则就调用output函数输出数据
L0:
cmp bl,10
je L1
mov ax,[si]
call output
add bl,1
mov dl,' '
mov ah,2
int 21h
add si,2
jmp L0
L1:
MOV AH,4CH
INT 21H
input proc ;cx为出口参数
push ax
push bx
push dx
;初始化
mov bl,10
mov cx,0
;输入数字
input2:
mov ah,1
int 21h
cmp al,'0'
jb input1
cmp al,'9'
ja input1
sub al,48
mov dl,al
mov al,cl
mul bl
add al,dl
mov cx,ax
jmp input2
input1:
pop dx
pop bx
pop ax
ret
input endp
output proc ;ax为入口参数
push ax
push bx
push cx
push dx
;初始化
mov cl,10
mov bl,0
;输出数字
output2:
cmp al,0
je output1
div cl
push ax
add bl,1
mov ah,0
jmp output2
output1:
cmp bl,0
je output3
pop cx
sub bl,1
mov dl,ch
add dl,48
mov ah,2
int 21h
jmp output1
output3:
pop dx
pop cx
pop bx
pop ax
ret
output endp
;冒泡排序算法
sort proc
push ax
push bx
push dx
mov bx,0
sub cl,1
;初始化
toindex:
mov si,di
mov al,0
;取数字比较,比较bx和cx,小于跳到toBigover
toBig:
push bx
push cx
mov bx,[si]
add si,2
mov cx,[si]
add al,1
;否则就调换两者的位置
cmp bx,cx
jb toBigOver
mov [si],bx
sub si,2
mov [si],cx
add si,2
toBigOver:
pop cx
pop bx
;比较al和cl,相等就跳到toindexend
cmp al,cl
je toindexend
jmp toBig
;循环
toindexend:
sub cl,1
cmp cl,0
je over
jmp toindex
over:
pop dx
pop bx
pop ax
ret
sort endp
CODES ENDS
END START