人名排序程序实现

来源:互联网 发布:mac 暴风影音 加载srt 编辑:程序博客网 时间:2024/04/29 00:10

;Name_store
;人名排序程序实现
;author:野渡无人
;create date:2007-12-15
;*************************************************
   .model small
   .stack 40h
;*************************************************
   .data
      namepar  label byte
      maxnlen  db  21
      namelen  db  ?
      namefld  db  21 dup(?)
      crlf     db  13,10,'$'
      endaddr  dw  ?
      messg1   db  'Name?','$'
      messg2   db  'Sorted names:',13,10,'$'
      namectr  db  0
      nametab  db  10 dup(20 dup(' '))
      namesav  db  20 dup(?),13,10,'$'
      swapped  db  0
;************************************************
    .code
begin proc far
         mov  ax,@data
         mov  ds,ax
         mov  es,ax

         cld
         lea  di,nametab
a20loop:
         call b10read
  cmp  namelen,0
  jz   a30
         cmp  namectr,10
  je   a30
  call d10stor
  jmp  a20loop
a30:
         cmp  namectr,1
  jbe  a40
  call g10sort
  call k10disp
a40:
         mov  ax,4c00h
  int  21h
begin    endp
;--------------------------------------------------
b10read  proc near
         mov  ah,09
  lea  dx,messg1
  int  21h
  mov  ah,0ah
  lea  dx,namepar
  int  21h
  mov  ah,09
  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
;--------------------------------------------------
d10stor proc near
        inc  namectr
 cld
 lea  si,namefld
 mov  cx,10
 rep  movsw
      
        ret

d10stor endp
;--------------------------------------------------
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
;---------------------------------------------------
h10xchg proc near
        mov  cx,10
 lea  di,namesav
 mov  si,bx
 rep  movsw

 mov  cx,10
 mov  di,bx
 rep  movsw

 mov  cx,10
 lea  si,namesav
 rep  movsw
 mov  swapped,1

 ret

h10xchg endp
;-----------------------------------------------------
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,9
 lea  dx,namesav
 int  21h
 dec  namectr
 jnz  k20

 ret

k10disp endp
;---------------------------------------------------------
;*********************************************************
       end begin