📄 sort.asm
字号:
data segment
a dw 20 dup(?)
string1 db 'please input integer,separated by semicolon,end with space:$'
string2 db 'the following is the list of numbers in right order:$'
num dw ?
data ends
stack1 segment
dw 20h dup(?)
stack1 ends
;**********************************************
code segment
assume cs:code,ds:data,ss:stack1
start:
mov ax,data
mov ds,ax
lea si,a
mov bx,0
mov cx,0
lea dx,string1;输出提示语句
mov ah,9h
int 21h
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;换行
mov ah,2
int 21h
;----------------------------------------------
input:
mov ah,1h;输入数据 eg:12;23;(任意键结束)
int 21h
cbw
sub ax,30h
cmp ax,0
jb error
cmp ax,9
ja error
xchg bx,ax
mov dx,10
mul dx
xchg bx,ax
add bx,ax
jmp input
error:
mov dx,ax
add dx,30h
cmp dx,003bh
jnz end_input
mov [si],bx
mov bx,0
add si,2
inc cx
mov num,cx
jmp input
;-------------------------------------------------
;开始排序
end_input:
mov bx,0
dec cx
jz end_order
push cx
lea di,a
lp1:
mov ax,[di]
cmp ax,[di+2]
jae lp2
xchg ax,[di+2]
mov [di],ax
mov bx,1
lp2:
add di,2
loop lp1
pop cx
cmp bx,1
jz end_input
;-------------------------------------------------
;输出部分
end_order:
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;换行
mov ah,2
int 21h
lea dx,string2;输出提示语
mov ah,9h
int 21h
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;换行
mov ah,2
int 21h
lea si,a
mov cx,num
begain:
push cx
mov ax,[si]
mov cx,0
continue: ;将数据的各位数字从高到低依次进栈
inc cx
mov bl,10
div bl
mov bl,al;保护al
add ah,30h
mov al,ah
cbw
push ax
mov al,bl;还原al
mov ah,0
cmp al,0
jnz continue
output: ;将数据的各位数字从高到低依次出栈
pop dx
mov ah,2h
int 21h
loop output
jnz output
mov dl,';';每个数据输出时用';'隔开
mov ah,2h
int 21h
add si,2
pop cx
loop begain
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -