📄 2_4.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 + -