⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24.asm

📁 汇编语言的一些源码,全部都运行通过.课程设计的时候搞的.
💻 ASM
字号:
data  segment
     tel_tab      db      1800 dup(' ')
     tel_tab_num  db      0
     line1   db      '--------------------------------------------------------------------------------$'
     message0     db    'Press "1" to add a new record $'
     message1     db    'press "2" to find record $'
     message2     db    'press "3" to show all the records $'
     message3     db    'press other keys to exit $'
     line2        db     '--------------------------------------------------------------------------------$'
     inputn       db    'please input a name:','$'
     inputp       db    'please input a telephone number:','$'
     cmd          db    2,0,2 dup(?)
     printf       db    'name                  telphone$'
     putname      db    21,0,21 dup(' ')
     noname       db    'The name you inputed is not exist!$'
     yorn         db    'n'    
data  ends

prognam segment

main  proc   far
   assume cs:prognam,ds:data
start:
        mov    ax,data
        mov    ds,ax

addnew:                        
        lea    dx,inputn	
        mov    ah,09h
        int    21h

        call   stor_name 
        call   crlf			
        lea    dx,inputp	
        mov    ah,09h
        int    21h

        call   inphone		
        inc    tel_tab_num
        call   name_sort 	 
again:
        call   crlf			
        lea    dx,line1	
        mov    ah,09h
        int    21h   
      
        lea    dx,message0
        mov    ah,09h
        int    21h
        
        call   crlf
        lea    dx,message1
        mov    ah,09h
        int    21h

        call   crlf
        lea    dx,message2
        mov    ah,09h
        int    21h

        call   crlf
        lea    dx,message3
        mov    ah,09h
        int    21h

        call   crlf			
        lea    dx,line2	
        mov    ah,09h
        int    21h 


        lea    dx,cmd		
        mov    ah,0ah
        int    21h
        mov    bx,dx
   


        mov    dx,[bx+2]
        and    dx,00ffh
        cmp    dl,31h		
        jz     addnew
        cmp    dl,32h		
        jz     search
        cmp    dl,33h		
        jz     showall
        jmp    prognam_exit	
showall:					      
        lea    dx,printf	   
        mov    ah,09h
        int    21h
        call   crlf				
        call   print_all		
        jmp    again			
search:  					      
        lea    dx,inputn		
        mov    ah,09h		
        int    21h


        mov    cx,20			
        mov    si,0
setspace:					      ;
        mov    putname[si+2],' '
        inc    si
        loop   setspace
              
  
        lea    dx,putname		
        mov    ah,0ah
        int    21h


        xor    bx,bx
        mov    bl,putname[1]
        mov    putname[bx+2],'$'

        call   search_name	


 
        jmp    again		 
prognam_exit:					  
        mov    ah,4ch
        int    21h

stor_name  proc  near      
        mov    al,tel_tab_num  			
        mov    bl,36    
        mul    bl
        mov    si,ax

        call   crlf
        mov    tel_tab[si+0],21
        lea    dx,tel_tab[si+0]
        mov    ah,0ah
        int    21h
 
        xor    bx,bx
        mov    bl,tel_tab[si+1]
        mov    tel_tab[si+bx+2],'$'
        
        jmp    stor_exit
        call   crlf
        mov    ah,09h
        lea    dx,tel_tab[si+2]
        int    21h

        call   crlf
        mov    ah,02h
        mov    dl,tel_tab[si+2]
        int    21h
stor_exit:
         
        ret

stor_name  endp

inphone   proc  near       
        mov    al,tel_tab_num  
        mov    bl,36    
        mul    bl
        mov    si,ax

        call   crlf
        mov    tel_tab[si+24],9
        lea    dx,tel_tab[si+24]
        mov    ah,0ah
        int    21h
 
        xor    bx,bx
        mov    bl,tel_tab[si+25]
        mov    tel_tab[si+bx+26],'$'
    
        jmp    inph_exit
 
        call   crlf
        mov    ah,09h
        lea    dx,tel_tab[si+26]
        int    21h

        call   crlf
        mov    ah,02h
        mov    dl,tel_tab[si+26]
        int    21h
inph_exit:

        ret
inphone endp


name_sort  proc  near        
       xor    cx,cx
       mov    cl,tel_tab_num
       dec    cx
       cmp    cx,0
       jz     sort_exit_jmp
       jmp    loop1
sort_exit_jmp:
       jmp    sort_exit
loop1: mov    di,cx
       mov    bx,0
loop2: mov    al,tel_tab[bx+2]
       cmp    al,tel_tab[bx+38]


       jl     cotinue
       jz     equare
       jmp    great
equare:  
       mov    bp,cx
       mov    cx,20
       mov    dx,bx

next:  inc    bx
       mov    al,tel_tab[bx+2]
       cmp    al,tel_tab[bx+38] 
       jl     nochange
       jg     yeschange
       loop   next
 
       jmp    nochange
yeschange:
       mov    cx,bp
       mov    bx,dx
great:

       mov    bp,cx
       mov    cx,36
       mov    si,bx
xchange:

       mov    al,tel_tab[si]
       xchg   al,tel_tab[si+36]
       mov    tel_tab[si],al
       inc    si
       loop   xchange
       mov    cx,bp
       jmp    cotinue
nochange:
       mov    cx,bp
       mov    bx,dx
cotinue:
       add    bx,36
       loop   loop2
 
       mov    cx,di

       loop   loop1




sort_exit: 
       ret
name_sort  endp


print_all  proc  near
        xor    cx,cx
        mov    cl,tel_tab_num
        mov    dl,0
print_next:
        mov    al,dl
        mov    bl,36    
        mul    bl
        mov    si,ax

        mov    bl,dl
       
        mov    ah,09h
        lea    dx,tel_tab[si+2]
        int    21h
        mov    bp,cx
        xor    cx,cx
        mov    cl,25
        sub    cl,tel_tab[si+1]
space_in:
        mov    ah,02h
        mov    dl,' '
        int    21h
        loop space_in
        
        mov    ah,09h
        lea    dx,tel_tab[si+26]
        int    21h 

        call   crlf
 
        mov    dl,bl
        inc    dl

        mov    cx,bp
        loop   print_next
        ret

print_all    endp

search_name   proc   near
        mov    yorn,'n'

                
        xor    cx,cx
        mov    cl,tel_tab_num
        mov    bx,0
n_nmcmp:
        mov    si,0
        mov    dx,cx
        mov    cx,20
namecmp:
        mov    al,putname[si+2] 
        cmp    al,tel_tab[bx+si+2]
        jnz    not_equare
        inc    si
        loop   namecmp
        jmp    name_equare
not_equare:
        mov    cx,dx
        add    bx,36
        loop   n_nmcmp
        jmp    name_match_exit1
name_equare:

        mov    di,dx

        mov    al,yorn
        cmp    al,'y'
        jz     lop
        call   crlf
        mov    ah,09h
        lea    dx,printf
        int    21h

        mov    yorn,'y'

lop:
        call   crlf
        mov    ah,09h
        lea    dx,tel_tab[bx+2]
        int    21h
        mov    bp,cx
        xor    cx,cx
        mov    cl,25
        sub    cl,tel_tab[bx+1]
space_in2:
        mov    ah,02h
        mov    dl,' '
        int    21h
        loop space_in2
        
        mov    ah,09h
        lea    dx,tel_tab[bx+26]
        int    21h 
        

        mov    dx,di
        jmp    not_equare
name_match_exit1:
        mov    al,yorn
        cmp    al,'y'
 
        jz     name_match_exit2
        call   crlf
        mov    ah,09h
        lea    dx,noname
        int    21h
name_match_exit2:
        ret
        

search_name   endp


crlf    proc    near      
   mov   dl,13
   mov   ah,02h
   int   21h
   mov   dl,10
   mov   ah,02h
   int   21h
   ret
crlf  endp

main   endp
prognam  ends
end start    


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -