查找电话号码

来源:互联网 发布:杜兰特2017季后赛数据 编辑:程序博客网 时间:2024/04/28 02:34
;查找电话号码
;建立一个可存放50项的电话号码表,每项包括人名(20个字符)及电话号码(8个字符)两部分
;程序可接收输入人名及相应的电话号码,并把它们加入电话号码表中
;凡有新的输入后,程序应按人名对电话号码表重新排序
;程序可接收需要查找电话号码的人名,并从电话号码表中查出其电话号码,再在屏幕上以如下格式显示出来。
;name        tel.
;XXXX        XXXXX
;编写程序如下
D_SEG   SEGMENT
        tel_tab      DB 50 DUP (20 DUP(?),8 DUP(?)) ;电话号码,人名记录
        tel_tabtemp  DB 50 DUP (20 DUP(?),8 DUP(?)) ;转移实现电话号码,人名记录排序
 STRINTRU     DB 'Welcome to use!'
              db 'you can continue to input your tel. NO. by input character I.',0dh,0ah
              DB 'IF you want to find a NO. you can input character Y to do.',0dh,0ah
       DB 'IF you want to exit ,please input character N.','$'
        STRINPUT     DB 0dh,0ah,'Input name:',0dh,0ah,'$'  
        STRINPHONE   DB 'Input a telephone number:',0dh,0ah,'$'
        STRYN        DB 'Do you want a telephone number?(Y/N/I)','$'
        STRNAME      DB 0dh,0ah,'name?',0dh,0ah,'$'
        STRPRINT     DB 'name                tel.',0dh,0ah,'$'
        ACPNAME      DB 21,?,21 DUP(?) ;接收人名
 nth1          db 3 dup(?)
        ACPTEL       DB 9,?,9 DUP(?)    ;接收电话号码
 nth2          db 3 dup(?)
        TEMP_TEL     DB 0               ;临时存储TEL_TAB当前的偏移地址
        TEMP_TELTEMP DB 0               ;临时存储TEL_TABTEMP当前的偏移地址
 FINDNAME     DB 20 DUP(?)       ;要查找的人名
        FINDTEL      DB 8 DUP(?) ,0dh,0ah,'$'       ;查找到的电话号码
D_SEG   ENDS
;
PROG    SEGMENT
      ASSUME  CS:PROG ,DS:D_SEG,ES:D_SEG
     START:
        MAIN  PROC  FAR
          ;
          PUSH      DS
          XOR      AX,AX
          PUSH      AX
          ;
          MOV       AX,D_SEG
          MOV       DS,AX
   mov       es,ax
          ;
          ;显示初始信息
          LEA     DX,STRINTRU
          MOV       Ah,09H
          INT       21H
          CALL      input_name  ;调用子程序INPUT_NAME接收人名
          RET
       MAIN ENDP
       ;***********************************
       ;接收人名子程序
       input_name  PROC  NEAR
     AGAIN:
          ;显示输入人名的提示信息
          LEA     DX,STRINPUT
          MOV       Ah,09H
          INT       21H
          ;
          ;接收人名
          LEA       DX,ACPNAME
          MOV       Ah,0AH
          INT       21H
          ;
          SUB       CH,CH       ;清零
          MOV       CL,ACPNAME+1 ;实际字符数
   LEA       SI,ACPNAME+2 ;赋给人名字符首地址
          ;
          SUB       BH,BH
          MOV       Bx,OFFSET TEL_TAB
          ADD       Bx,word ptr TEMP_TEL
          ;
          MOV       DI,BX        ;当前TEL_TAB中的人名首地址
          REP       MOVSB
          ;每输入一个名字,偏移地址往后移20
          MOV       AX,WORD PTR TEMP_TEL
          ADD       AX,20
          MOV       WORD PTR TEMP_TEL, AX
          ;显示输入电话号码的提示信息
          LEA       DX,STRINPHONE
          MOV       AH,09H
          INT       21H
          ;接收电话号码
          LEA       DX,ACPTEL
          MOV       AH,0AH
          INT       21H
          ;
          SUB       CH,CH
          MOV       CL,ACPTEL+1  ;实际字符数
          lea       SI,ACPTEL+2  ;接收的电话号码的首地址
          ;
          SUB       BH,BH
          MOV       BX,OFFSET TEL_TAB  ;TEL_TAB的首地质
          ADD       BX,WORD PTR TEMP_TEL        ;当前的偏移地址
          ;
          MOV       DI,BX              ;目标串的首地址
          REP       MOVSB
          ;每输入一个电话号码,偏移地址往后移8
          MOV       AX,WORD PTR TEMP_TEL
          ADD       AX,8
          MOV       WORD PTR TEMP_TEL, AX
          ;
          ;调用NAME_SORT子程序对电话号码表按人名排序
          ;CALL      STOR_NAME
  FIND_AGAIN:       
          ;显示提示是否查找信息
          LEA       DX,STRYN
          MOV       AH,09H
          INT       21H
          ;
  GET_KEY:
          MOV       AH,01H
          INT       21H
          CMP       AL,'Y'
          JE        YES      ;如果输入的是'Y',就跳转到YES
          CMP       AL,'N'
          JE        NO       ;如果输入的是'N',就跳转到NO
   CMP       AL,'I'   ;如果输入的是'I',就继续输入电话号码
   JE        AGAIN
          JNE       GET_KEY  ;如果输入的都不是,等到输入了Y或者N为止
      YES:
          ;调用查找程序
          CALL      NAME_SEARCH
          JMP       FIND_AGAIN  ;继续查找下一个号码
          ;输出输入NAME信息
          ;LEA       DX,STRNAME 
          ;MOV       AH,09H
          ;INT       21H
          ;调用INPUT_NAME子程序接收人名
          ;JMP      AGAIN    ;继续输入
      NO:
          RET
       input_name  ENDP
       ;************************************
       ;保存人名子程序
       stor_name   PROC  NEAR
         
       STOR_NAME   ENDP
       ;************************************
       ;接收电话号码并保存电话号码子程序
       INPHONE     PROC  NEAR
       INPHONE     ENDP
       ;***********************************
       ;电话号码表按人名排序子程序
       NAME_SORT   PROC  NEAR
       NAME_SORT   ENDP
       ;***********************************
       ;电话号码查找子程序
       NAME_SEARCH PROC  NEAR
          ;输出输入NAME信息
          MOV       BX,0
          LEA       DX,STRNAME 
          MOV       AH,09H
          INT       21H
          ;接收人名
          LEA       DX,ACPNAME
          MOV       AH,0AH
          INT       21H
          ;
          SUB       CH,CH       ;清零
          MOV       CL,ACPNAME+1 ;实际字符数
   LEA       SI,ACPNAME+2 ;赋给人名字符首地址
          ;
          LEA       DI,FINDNAME       
          REP       MOVSB
     NEXT: 
          MOV       CX,19
          ;---------------------------------
          SUB       AH,AH
          MOV       AX,OFFSET TEL_TAB
          ADD       AX,BX
          ;---------------------------------
          LEA       SI,FINDNAME
          MOV       dI,AX
   CLD
          REPZ      CMPSB
   JE        a10
          ADD       BX,28
          CMP       BX,1400
          JGE       EXIT
          JMP       NEXT
       a10:
          MOV       CX,8
          ADD       BX,20                 ;当前找到人的电话号码的首地址
          ;--------------------------------
          SUB       AH,AH
          MOV       AX,OFFSET TEL_TAB
          ADD       AX,BX
          ;--------------------------------
          LEA       DI,FINDTEL
          MOV       SI,AX
          REP       MOVSB
          ;调用格式打印查找到的
          CALL      PRINTLINE
     EXIT:
          RET      
       NAME_SEARCH ENDP
       ;******************************
       ;显示人名及电话号码子程序
       PRINTLINE   PROC  NEAR
          ;显示打印格式
          LEA       DX,STRPRINT
          MOV       AH,09H
          INT       21H
          ;输出人名, 输出电话号码
          LEA       DX,FINDNAME
          MOV       AH,09H
          INT       21H
          ret
       PRINTLINE   ENDP
       ;******************************
         PROG ENDS
                END START
原创粉丝点击