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

📄 2_4.asm

📁 (1)要求程序建立一个可存放50项的电话号码表
💻 ASM
字号:
DATA SEGMENT
 MESS1         DB   'Input name:$'
 MESS2         DB   'Input a telephone number:$'
 MESS3         DB   'Do you continue to input the name and number?(Y/N)$'
 MESS4         DB   'Do you want a telephone number?(Y/N)$'
 MESS5         DB   'name?$'
 MESS6         DB   'Not found!$'

 MESS_ERROR    DB   'ERROR!$'
 MESS_PRINTNAME   DB 20 dup(?),'$'
 MESS_PRINTSPACE  DB '| $'
 MESS_PRINTSPACE2 DB '                     |',13,10,'$' 
 MESS_JIEMIAN     DB 13,10,54 DUP('-'),13,10,'$'       
 MESS_PRINTNUMBER DB 8 dup(?),'$'
 MESS_LINE        DB '|        NAME         |             ','NUMBER           |$'
 MESS_WINDOWS     DB 30 DUP(' '),' Software  Class(4) ',13,10 
                  DB 30 DUP(' '),'    Li ChengLian    ',13,10
                  DB 30 DUP(' '),'     3104007103     ',13,10,'$'
 COUNT         DB      0
 COUNT_SEARCH  DB      0


 name_tab    label   byte
 max_name      db      21
 act_name      db      ?
 name1         db      21 dup(?)

 number_tab  label   byte
 max_number    db      9
 act_number    db      ?
 number1       db      9 dup(?)

 tel_tab        db     50 dup(28 dup(' ')),'$'
DATA ENDS

;*****************************************  
CODE   SEGMENT
       ASSUME  CS:CODE,DS:DATA,ES:DATA
MAIN PROC FAR
START:
   MOV AX,DATA
   MOV DS,AX
   MOV ES,AX

   call clear_screen   

   LEA DX,MESS_WINDOWS
   MOV AH,09H
   INT 21H


   LEA DI,TEL_TAB
AA: 
   CALL INPUT_NAME
   CALL CRLF
   CALL INPUT_NUMBER
   CALL STOR_NAME
   CALL STOR_NUMBER
   
   INC COUNT
   CALL CRLF
LCL:
   LEA DX,MESS3
   MOV AH,09H
   INT 21H
  
   
   MOV AH,01
   INT 21H
   
   CMP AL,'Y'
   JZ BB 
   CMP AL,'y'
   JZ BB
   CMP AL,'N'
   JZ CC 
   CMP AL,'n'   
   JZ CC
    
   CALL CRLF
   LEA DX,MESS_ERROR
   MOV AH,09H
   INT 21H
   CALL CRLF
   JMP LCL 
BB:
   CALL CRLF
   JMP AA
CC:
   CALL CRLF
   call crlf
   
   call clear_screen
   call name_sort
   call print_tab
   call crlf
QSF:
   lea dx,mess4
   mov ah,09h
   int 21h
  
   mov ah,01h
   int 21h

   CMP AL,'Y'
   JZ EE 
   CMP AL,'y'
   JZ EE
   CMP AL,'N'
   JZ EXIT 
   CMP AL,'n'   
   JZ EXIT
   
   CALL CRLF
   LEA DX,MESS_ERROR
   MOV AH,09H
   INT 21H
   CALL CRLF
   JMP QSF 
EE:
   CALL CRLF
   LEA DX,MESS5
   MOV AH,09H
   INT 21H
   CALL CRLF
   CALL INPUT_NAME
   CALL CRLF
   call clear_screen
   CALL NAME_SEARCH
   CALL CRLF
   JMP QSF
exit:
   mov ah,4ch
   int 21h

;****************************


INPUT_NAME PROC NEAR
     push ax
     push bx
     push cx
     push dx
     lea dx,mess1
     mov ah,09h
     int 21h
     
     lea dx,name_tab
     mov ah,0ah
     int 21h
    
     mov bh,0
     mov bl,act_name
     mov cx,21
     sub cx,bx 
     je out1
loop1: 
     mov byte ptr name1[bx],20h 
     inc bx 
     loop loop1 
out1:
     pop dx
     pop cx
     pop bx
     pop ax
     ret
 INPUT_NAME ENDP
;*****************************************
INPUT_NUMBER PROC NEAR
     push ax
     push bx
     push cx
     push dx
     lea dx,mess2
     mov ah,09h
     int 21h
     
     lea dx,number_tab
     mov ah,0ah
     int 21h
    
     mov bh,0
     mov bl,act_number
     mov cx,9
     sub cx,bx 
     je out2
loop2: 
     mov byte ptr number1[bx],20h 
     inc bx 
     loop loop2 
out2:
     pop dx
     pop cx
     pop bx
     pop ax
     ret
 INPUT_NUMBER ENDP
;*****************************************
STOR_NAME PROC NEAR
     push ax
     push bx
     push cx
     push dx
     lea si,name1
     cld
     mov cx,20
     rep movsb
     pop dx
     pop cx
     pop bx
     pop ax
     ret
STOR_NAME ENDP
;*****************************************
STOR_NUMBER PROC NEAR
     push ax
     push bx
     push cx
     push dx
     lea si,number1
     cld
     mov cx,8
     rep movsb
     pop dx
     pop cx
     pop bx
     pop ax
     ret
STOR_NUMBER ENDP
;*****************************************
NAME_SORT PROC NEAR
     push ax
     push bx
     push cx
     push dx
     
     
     cmp count,1
     je out_sort
     mov bh,count
     dec bh
sort4: 
     lea si,tel_tab   
     mov ch,count
     dec ch
sort2:
     mov ax,si
     mov cl,20
sort1:
     mov bl,[si]
     cmp bl,[si+28]
     ja change
     jb next1
     inc si
     dec cl
     jnz sort1 
next1:
     mov si,ax
     add si,28
     dec ch
     jnz sort2
     jmp www
change:
     mov si,ax
     mov dl,28
sort3:
     mov bl,[si]
     xchg bl,[si+28]
     mov [si],bl
     inc si
     dec dl
     jnz sort3

     mov si,ax
     add si,28
     dec ch
     jnz sort2
www:
    dec bh
    jnz sort4
    
out_sort:
     pop dx
     pop cx
     pop bx
     pop ax
     ret
NAME_SORT ENDP
;*****************************************
PRINT_TAB PROC NEAR
     lea si,tel_tab
     
     mov ah,09h
     LEA DX,MESS_JIEMIAN
     INT 21H
     lea dx,mess_line
     int 21h 
     call crlf
     LEA DX,MESS_JIEMIAN
     INT 21H

     mov bl,count
print1:
     lea di,mess_printname
     mov cx,20
     cld
     rep movsb
     lea di,mess_printnumber
     mov cx,8
     cld
     rep movsb
    
     mov ah,09h
     lea dx,mess_printspace
     int 21h
     lea dx,mess_printname
     int 21h 
     lea dx,mess_printspace
     int 21h
     lea dx,mess_printnumber
     int 21h
     lea dx,mess_printspace2
     int 21h
     LEA DX,MESS_JIEMIAN
     INT 21H
     call crlf
     dec bl
    jnz print1
     ret
PRINT_TAB ENDP
;*****************************************
NAME_SEARCH PROC NEAR
    mov count_search,0
    LEA SI,TEL_TAB
    MOV CH,COUNT
SEARCH1:
    PUSH SI
    LEA DI,NAME1
    MOV CL,20
SEARCH2:
    MOV BL,[SI]
    CMP BL,[DI]
    JNE SEARCH3
    INC SI
    INC DI
    DEC CL
    JNZ SEARCH2
    JMP search4
SEARCH3:
    pop si
    ADD SI,28

    DEC CH
    JNZ SEARCH1 
    cmp count_search,0
    jne exit_search
    LEA DX,MESS6
    mov ah,09h
    int 21h
    jmp exit_search
   

   
search4:
    pop si
    push si
    call crlf
    inc count_search
    cmp count_search,1
    jnz search5
    mov ah,09h
    lea dx,mess_jiemian
    int 21h
    lea dx,mess_line
    int 21h 
    lea dx,mess_jiemian
    int 21h
    call crlf
search5: 
    CALL PRINTLINE
    
    jmp search3
    

exit_search:
     ret
NAME_SEARCH ENDP
;***************************
PRINTLINE PROC NEAR


     lea di,mess_printname
     mov cx,20
     cld
     rep movsb
     lea di,mess_printnumber
     mov cx,8
     cld
     rep movsb
    
     mov ah,09h
     lea dx,mess_printspace
     int 21h
     lea dx,mess_printname
     int 21h 
     lea dx,mess_printspace
     int 21h
     lea dx,mess_printnumber
     int 21h
     lea dx,mess_printspace2
     int 21h
     lea dx,mess_jiemian
     int 21h
      ret
PRINTLINE ENDP
;***************************
clear_screen proc near
    mov ah,06h          
    mov al,00h
    mov bh,07h
    mov ch,00d
    mov cl,00d
    mov dh,24d
    mov dl,79d
    int 10h
    mov ah,02h
    mov bh,00h
    mov dh,00h
    mov dl,00h
    int 10h
clear_screen endp
;***************************
CRLF PROC NEAR
   PUSH AX
   PUSH BX
   PUSH CX
   PUSH DX
  mov ah,2
   mov dl,0dh
   int 21h
   mov dl,0ah
   int 21h
   POP DX
   POP CX
   POP BX
   POP AX
   RET
CRLF ENDP
;***************************
   
 CODE  ENDS
      END MAIN

⌨️ 快捷键说明

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