📄 sort.asm
字号:
data segment para
buffer db 100
db ?
db 100 dup(?)
string_start db 1000 dup(?)
string_now dw offset string_start
string_list dw offset string_start
dw 100 dup(?)
string_num dw 0
string1 db "input words",'$'
string2 db 0dh,0ah,'$'
data ends
stack segment para stack
dw 100 dup(?)
stack ends
code segment para
assume cs:code,ds:data,ss:stack
main proc far
;intput
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
xor ax,ax
mov ah,9
mov dx,offset string1
int 21h
mov ah,9
mov dx,offset string2
int 21h
inp: mov dx,offset buffer
mov ah,0ah
int 21h
mov ah,9
mov dx,offset string2
int 21h
cmp buffer+1,0
jz dip
jmp lod
return: mov ax,4c00h
int 21h
lod: push ds;将buffer中的单词copy到string_start中并调整好指针
pop es
mov si,offset buffer
inc si
inc si
mov di,string_now
xor cx,cx
mov cl,buffer+1
add string_now,cx
inc string_now;下一个单词地址
cld
rep movsb
mov [di],'$'
inc string_num;改单词数目
mov ax,string_num;置单词指针
push cx
mov cx,2
mul cx
pop cx
mov si,ax
mov bx,string_now;下一个单词的指针
mov string_list[si],bx
mov cx,string_num;调整本单词指针
cmp cx,1
jz inp;不必调整
dec cx;最多调整cx-1次
mov ax,cx
push cx
mov cx,2
mul cx
pop cx
mov bx,ax
sort: ;插入排序
mov di,string_list[bx]
dec bx
dec bx
mov si,string_list[bx]
cm: mov al,[si];较字符串
inc si
mov ah,[di]
inc di
cmp al,ah
ja cha;交换
jb inp
cmp al,'$'
jz inp
jmp cm
cha: mov ax,string_list[bx];交换字符串指针
xchg string_list[bx+2],ax
xchg string_list[bx],ax
loop sort
jmp inp;接着输入
dip: mov cx,string_num
xor si,si
d1: mov dx,string_list[si]
mov ah,9
int 21h
inc si
inc si
mov ah,9
mov dx,offset string2
int 21h
loop d1
jmp return
main endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -