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

📄 aa.asm

📁 通讯录 课程设计 可以进行查询修改删除等功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;message list
dataseg segment
        savebloks dw 32*6 dup (?)
        titstr1   db 'Name    List$'
        titstr2   db 'Phone    List$'
        namcolor  db 1eh           ;name space color
        phcolor   db 1eh           ;phone sapce color
        titcolor  db 01110000b           ;title color
        ibcolor   db 01110000b           ;infobox color
        cmdlcolor db 00100100b           ;command line color
        msgcolor  db 01100111b
        msgadr    dw 3 dup(0)
        handle    dw ?
        showin    db 1

        searchstr   db 30 dup(' ')
        searchphone db 30 dup(' ')
        searchn     db 0

        exactmatch db 0
        lastone    db 0


        inputbuf  db 34
        actlen    db ?
        inputstr  db 34 dup(' ')

 

        infomsg1  db 'Info: Give your command below                $'
        infomsg2  db 'Warning: Unanalysable command,type again     $'
        infomsg3  db 'Info: Input your name below                  $'
        infomsg4  db 'Info: Input your phone number below          $'
        infomsg5  db 'Info: Input the number of item you want below$'

        msgempty  db '<Empty List>$'
        msgeol    db '<End Of List>$'

        msg0      db '       Welcome to use         '
        msg00     db '    G-Adresser  0.9 beta      '
        msg000    db '     Write by Gengyiting      '
        msgblank  db '                                                         ','$'
        pathnam   db 'NAME.DAT',0
        msg10     db 'Press any key to continue.....'
        msg1      db '    Cannot find Name.dat      '
        msg2      db '  Program Will Creat the File '
        msg3      db '        ..\NAME.DAT           '
        msg4      db '    Open File Successfully    '
        msg5      db '       Creat File Fail        '
        msg6      db '      Program Terminate       '
        msg7      db '    Creat File Successfully   '
        msg8      db '    Read file failed,exit     '
        msg9      db '    Write file failed,exit    '
        msgfind   db '   The item you found is:     '
        msgferr   db '    Cannot find the item      '
        msgferr2  db '     Check  your input!       '

        ;in big size
        filebuf   dw   00    
        arraybuf  dw   250 dup(0)
        itemlist  db   250 dup(30 dup(0),20 dup(0))
        teststr1  db  30 dup('1'),20 dup('2')
        teststr2  db  30 dup('5'),20 dup('6')

 

dataseg ends

codeseg segment

        assume cs:codeseg,ds:dataseg,es:dataseg,ss:dataseg

 

main    proc far
        push ds
        xor  ax,ax
        push ax
        mov  ax,dataseg
        mov  ds,ax
        mov  es,ax

        call setscrmode
        call clrscr
        call buildframe
        lea  si,msg0
        mov  msgadr,si
        lea  si,msg00
        mov  msgadr+2,si
        lea  si,msg000
        mov  msgadr+4,si
        call showmsg
        call findfile
        call showitems
        call getcommand                 ;this is the main subprogram

        ret
main    endp

 

setscrmode proc near
        mov  ah,0
        mov  al,3
        int  10h
        ret
setscrmode endp

clrscr  proc near
        mov  ax,0619h
        mov  cx,0
        mov  dx,184fh
        mov  bh,1eh       ;here is color value
        int  10h
        ret
clrscr  endp

gotoxy  proc near
        push ax
        push bx
        mov  ah,2
        mov  bh,0
        int  10h
        pop  bx
        pop  ax
        ret
gotoxy  endp

hidecursor proc near
        mov  ah,3
        mov  bh,0
        int  10h
        or   ch,30h
        mov  ah,1
        int  10h
        ret
hidecursor endp

showcursor proc near
        mov  bh,0
        mov  ah,3
        int  10h
        mov  ah,1
        mov  cx,0607h
        int  10h
        ret
showcursor endp

waitfk  proc near
        mov  ah,0h
        int  16h
        ret
waitfk  endp

showmsg proc near
        call  hidecursor
        lea  si,savebloks       ;save original scr
        mov  cx,0
        mov  dh,8
  l1:
        mov  cl,0
        inc  dh
        mov  dl,23
  l2:
        inc  dl
        call gotoxy
        mov  ah,8
        mov  bh,0
        int  10h
        mov  [si],al
        inc  si
        mov  [si],ah
        inc  si
        inc  cl
        cmp  cl,32
        jne  l2
        inc  ch
        cmp  ch,6
        jne  l1                 ;save scr end here


        mov  ax,0600h           ;creat a window in the scr
        mov  bh,msgcolor        ;msgcolor 
        mov  ch,9
        mov  cl,24
        mov  dh,14
        mov  dl,55
        int  10h
        call drawmsgbox         ;creating  end here
        call waitfk


        lea  si,savebloks
        mov  cx,0
        mov  dh,8
  l11:
        mov  cl,0
        inc  dh
        mov  dl,23
  l21:
        inc  dl
        call gotoxy
        mov  ah,9
        mov  al,[si]
        inc  si
        mov  bl,[si]
        inc  si
        push cx
        mov  cx,1
        mov  bh,0
        int  10h
        pop  cx
        inc  cl
        cmp  cl,32
        jne  l21
        inc  ch
        cmp  ch,6
        jne  l11
        call showcursor
        ret
showmsg endp

drawmsgbox proc near
        mov  cx,0
        mov  dh,9
  mbl1: mov  cl,0
        mov  dl,24
  mbl2:
        inc  dl
        call gotoxy
        mov  ah,0ah
        mov  al,'?
        push  cx
        mov  cx,1
        mov  bh,0
        int  10h
        pop  cx
        inc  cl
        cmp  cl,31
        jne  mbl2
        inc  ch
        add  dh,5
        cmp  ch,2
        jne  mbl1

        mov  cx,0
        mov  dl,24
  mbll1:
        mov  cl,0
        mov  dh,9
  mbll2:
        inc  dh
        call gotoxy
        mov  ah,0ah
        mov  al,'?
        push cx
        mov  bh,0
        mov  cx,1
        int  10h
        pop  cx
        inc  cl
        cmp  cl,5
        jne  mbll2
        inc  ch
        add  dl,31
        cmp  ch,2
        jne  mbll1

        mov  cx,1
        mov  bh,0
        mov  dh,9
        mov  dl,24
        call gotoxy
        mov  ah,0ah
        mov  al,'?
        int  10h
        add  dh,5
        call gotoxy
        mov  al,'?
        int  10h
        add  dl,31
        call gotoxy
        mov  al,'?
        int  10h
        mov  dh,9
        mov  dl,24+31
        call gotoxy
        mov  al,'?
        int  10h

        mov  cx,3
        mov  dh,9
        mov  dl,25
        lea  si,msgadr
  shmsg:
        inc  dh
        mov  bp,[si]
        push cx
        mov  cx,30
        add  si,2
        mov  bl,msgcolor
        mov  bh,0
        mov  al,0
        mov  ah,13h
        int  10h
        pop  cx
        loop shmsg

        

 

        lea  bp,msg10
        mov  cx,30
        mov  dh,13
        mov  dl,25
        mov  bl,msgcolor
        and  bl,0f0h
        or   bl,0fh
        mov  bh,0
        mov  al,0
        mov  ah,13h
        int  10h
        ret
drawmsgbox endp

findfile  proc near                            ;find file ,exist open
        mov  ah,3dh                            ;not exist ,creat
        mov  al,2
        lea  dx,pathnam
        int  21h
        jc   fif                               ;jump when file not exist
        mov  handle,ax
        call readfile
        lea  si,msg4
        mov  msgadr,si
        lea  si,msgblank
        mov  msgadr+2,si
        lea  si,msg3
        mov  msgadr+4,si
        call showmsg
        ret
   fif:
        lea  si,msg1
        mov  msgadr,si
        lea  si,msg2
        mov  msgadr+2,si
        lea  si,msg3
        mov  msgadr+4,si
        call showmsg

        mov  ah,3ch
        mov  al,0
        mov  cx,0
        lea  dx,pathnam
        int  21h
        jc   ffwrong
        mov  handle,ax
        lea  si,msg7            ;creatfile
        mov  msgadr,si
        lea  si,msg3
        mov  msgadr+2,si
        lea  si,msgblank
        mov  msgadr+4,si
        call showmsg
        call fillitem 
        ret
   ffwrong:
        lea  si,msg5
        mov  msgadr,si
        lea  si,msg6
        mov  msgadr+2,si
        lea  si,msgblank
        mov  msgadr+4,si
        call showmsg
        call exitpro            ;exit when creat failed
findfile  endp
        
readfile proc near                      ;read items from file when open
        mov  ah,3fh
        mov  bx,handle
        mov  cx,251*2+50*250
        lea  dx,filebuf
        int  21h
        jnc  rfret
        lea  si,msg8
        mov  msgadr,si
        lea  si,msgblank
        mov  msgadr+2,si
        mov  msgadr+4,si
        call showmsg
        call exitpro
 rfret:
        ret

readfile endp

 


exitpro proc near                       ;exit with err code
        mov  al,1
        mov  ah,4ch
        int  21h
exitpro endp
        

 

fillitem proc near                      ;fill items when creatfile 
        mov  bx,handle
        mov  ah,40h
        mov  cx,50*250+251*2
        lea  dx,filebuf
        int  21h
        jc  fierr
        ret
   fierr:                               ;write file error
        lea  si,msg9
        mov  msgadr,si
        lea  si,msgblank
        mov  msgadr+2,si
        mov  msgadr+4,si
        call showmsg
        call exitpro
                                    
       
fillitem endp


getcommand proc  near
        call showcursor
   gcinput:
        mov  dh,23
        mov  dl,0
        call gotoxy
        lea  dx,infomsg1
        mov  ah,09h
        int  21h
   gcinputerr:
        call clrcmdline
        call clrinputstr
        call gotoxy
        mov  ah,0ah
        lea  dx,inputbuf
        int  21h
        cmp  actlen,0
        ja   getcom
        jmp  gcinput
   getcom:
        lea  si,inputstr
        cmp  byte ptr[si],'/'
        je   gcnext
        mov  dh,23
        mov  dl,0
        call gotoxy
        lea  dx,infomsg2
        mov  ah,09h
        int  21h
        jmp  gcinputerr
                                   ;need coding
 gcnext:
        inc  si
        mov  al,[si]
        cmp  al,'A'
        jne  gc1

        cmp  byte ptr filebuf,250

        jae  gcinput              
        call getname
        call clrcmdline
        call clrinputstr
        call getphone
        call additem
        jmp  gcinput
 gc1:   cmp  al,'D'
        jne  gc2
        call delitem
        jmp  gcinput


 gc2:   cmp  al,'E'
        jne  gc3
        call edititem
        jmp  gcinput


 gc3:   cmp  al,'S'
        jne  gc4
        call getname
        call search

        lea  si,filebuf
        sub  di,si
        shr  di,1
        mov  ax,di
        dec  ax
        mov  bl,50
        mul  bl
        add  si,ax
        add  si,251*2  
        mov  cx,30
        lea  di,searchstr
        cld
        rep  movsb
        mov  cx,20
        lea  di,searchphone
        cld
        rep  movsb
        lea  si,msgfind
        mov  msgadr,si
        lea  si,searchstr
        mov  msgadr+2,si
        lea  si,searchphone
        mov  msgadr+4,si
        call showmsg
        jmp  gcinput

 

 gc4:   cmp  al,'N'
        jne  gc5
        call getsearchn
        cmp  searchn,250
        jbe  startsearch
        mov  al,byte ptr filebuf
        cmp  searchn,al
        jbe  startsearch
   nomatchitem:

        lea  si,msgferr
        mov  msgadr,si
        lea  si,msgblank
        mov  msgadr+2,si
        lea  si,msgferr2
        mov  msgadr+4,si
        call showmsg
        jae  gcinput     
   startsearch:   

        call searchnitem
        cmp  lastone,0ffh
        je   nomatchitem

        lea  si,filebuf
        sub  di,si
        shr  di,1
        mov  ax,di
        dec  ax
        mov  bl,50
        mul  bl
        add  si,ax
        add  si,251*2  
        mov  cx,30
        lea  di,searchstr
        cld
        rep  movsb
        mov  cx,20
        lea  di,searchphone
        cld

⌨️ 快捷键说明

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