📄 sortname.asm
字号:
;NAME_SORT-EXE6_11#
;***************************************************************
.model small
.stack 40h
;***************************************************************
.data ;define data segment
namepar label byte ;name parameter list:
maxnlen db 21 ;max. length
namelen db ? ;no. chars entered
namefld db 21 dup(?) ;name
crlf db 13,10,'$'
endaddr dw ?
messg1 db 'Name?','$'
messg2 db 'Sort Name:',13,10,'$'
namectr db 0
nametab db 30 dup(20 dup(' ')) ;name table
namesav db 20 dup(?),13,10,'$'
swapped db 0
;***************************************************************
.code ;define code segment
;---------------------------------------------------------------
begin proc far ;main part of programe
;set DS and ES register to current data segment
mov ax,@data ;data segment addr
mov ds,ax ; into DS register
mov es,ax ; and ES register
;MAIN PART OF PROGRAM GOES HERE
cld
lea di,nametab
a20loop:
call b10read
cmp namelen,0
jz a30
cmp namectr,30
je a30
call d10stor
jmp a20loop
a30:
cmp namectr,1
jbe a40
call g10sort
call k10disp
a40:
mov ax,4c00h
int 21h
begin endp
;--------------------------------------------------------------------
; Accept name as input:
b10read proc near
mov ah,09
lea dx,messg1
int 21h
mov ah,0ah
lea dx,namepar
int 21h
mov ah,9
lea dx,crlf
int 21h
;
mov bh,0
mov bl,namelen
mov cx,21
sub cx,bx
b20: mov namefld[bx],20h
inc bx
loop b20
ret
b10read endp
;--------------------------------------------------------------------
; Store name in table:
d10stor proc near
inc namectr
cld
lea si,namefld
mov cx,10
rep movsw
ret
d10stor endp
;--------------------------------------------------------------------
; Sort name in table
g10sort proc near
sub di,40
mov endaddr,di
g20: mov swapped,0
lea si,nametab
g30: mov cx,20
mov di,si
add di,20
mov ax,di
mov bx,si
repe cmpsb
jbe g40
call h10xchg
g40: mov si,ax
cmp si,endaddr
jbe g30
cmp swapped,0
jnz g20
ret
g10sort endp
;---------------------------------------------------------------------
; Excheange table entries
h10xchg proc near
mov cx,10
lea di,namesav
mov si,dx
rep movsw
;
mov cx,10
mov di,bx
rep movsw
;
mov cx,10
lea si,namesav
rep movsw
mov swapped,1
ret
h10xchg endp
;-----------------------------------------------------------------------
; Display sorted name:
k10disp proc near
mov ah,09
lea dx,messg2
int 21h
lea si,nametab
k20: lea di,namesav
mov cx,10
rep movsw
mov ah,09
lea dx,namesav
int 21h
dec namectr
jnz k20
ret
k10disp endp
;-----------------------------------------------------------------------
;***********************************************************************
end begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -