存n个数据(n<=100),如果多了的话会把后面的数据篡改(比如a2),如果想改可以直接在数据段代码这里进行修改
🎈🎈🎈
DATAS SEGMENT
;此处输入数据段代码
a1 word 100 dup(?);这是存n个元素
a2 byte 'Please input five number:!'
a3 byte 'The number before sorting is:!'
a4 byte 'The number after sorting is:!'
a5 byte 'please input a number:!'
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;这个用来写排序函数的通用函数
;第一行输入要排序元素的个数
;第二行输入要排序的元素
;第三行输入原排序的元素
;第四行输入排序完成的元素
;输入字符串a5
mov si,offset a5
call outputstr
;输入要排序的个数
call inputnum;出口参数di
call wrap
;输出字符串a2
mov si,offset a2
call outputstr
;输入n个数
mov si,offset a1
call inputn
call wrap;换行
;输出字符串a3
mov si,offset a3
call outputstr
;输出原顺序
mov si,offset a1
call outputn
call wrap
;排序
mov si,offset a1
call paixu
;输出字符串a4
mov si,offset a4
call outputstr
;输出排序后的
mov si,offset a1
call outputn
MOV AH,4CH
INT 21H
inputn proc;输入n个数,入口参数应该是di
push ax
push bx
push cx
push dx
mov cl,0
ifn1:
cmp cx,di
je ifnover
call input
mov [si],bx
add si,2
add cl,1
jmp ifn1
ifnover:
pop dx
pop cx
pop bx
pop ax
ret
inputn endp
input proc;输入函数
push ax
push cx
push dx
mov bx,0
mov dh,10
jmp i0
i0:
mov ah,1
int 21h
sub al,48
cmp al,0
jb i8
je i2
i2:
cmp al,9
ja i8
jb i3
i3:
mov cl,al
mov ch,0
mov ax,bx
mul dh
add cx,ax
mov bx,cx
jmp i0
i8:
pop dx
pop cx
pop ax
ret
input endp
outputn proc;输出n个数,di为入口参数
push ax
push bx
push cx
push dx
mov bx,0
ofn1:
cmp bx,di
je ofnover
mov ax,[si]
call output
add si,2
add bl,1
jmp ofn1
ofnover:
pop dx
pop cx
pop bx
pop ax
ret
outputn endp
output proc;输出函数
push bx
push cx
push dx
mov bh,0
mov cl,10
div cl
cmp al,0
ja o1
je o2
o1:
push ax
add bh,1
mov ah,0
div cl
cmp al,0
ja o1
je o2
o2:
mov dl,ah
add dl,48
mov ah,2
int 21h
cmp bh,0
ja o3
je o4
o3:
pop ax
sub bh,1
jmp o2
o4:
pop dx
pop cx
pop bx
ret ;返回
output endp;结束
paixu proc;排序函数,si,di为入口参数
push ax
push bx
push cx
push dx
mov bx,di;用bx存一下di的值一会用
mov di,si;用di存si
mov al,0;遍历参数1
mov cl,bl
p1:
inc al
mov bl,cl
cmp al,bl
jnb pover
mov si,di
mov ah,0;遍历参数2
sub bl,al
sub si,2
p2:
inc ah
add si,2
cmp ah,bl
ja p1
mov dh,[si]
mov dl,[si+2]
cmp dh,dl
ja pswap
jmp p2
pswap:
mov [si],dl
mov [si+2],dh
jmp p2
pover:
mov ch,0
mov di,cx;cx的值存着di的值一直没变
pop dx
pop cx
pop bx
pop ax
ret
paixu endp
outputstr proc;字符串输出函数
push ax
push dx
oscontinue:
mov dl,[si]
cmp dl,'!'
je osover
mov ah,2
int 21h
add si,1
jmp oscontinue
osover:
pop dx
pop ax
ret
outputstr endp
wrap proc;换行函数
push dx
push ax
mov dx,13
mov ah,2
int 21h
mov dx,10
mov ah,2
int 21h
pop ax
pop dx
ret
wrap endp
inputnum proc;输入元素个数函数
;出口参数di
push ax
push dx
push bx
call input
mov di,bx
pop bx
pop dx
pop ax
ret
inputnum endp
CODES ENDS
END START
如有问题请私聊
qq3543998195