?? ben24.asm
字號:
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!',0dh,0ah
DB 'Input your telephone number by input "I".',0dh,0ah
DB 'To find a telephone number, input "Y" .',0dh,0ah
DB 'To exit the program, please input "N".$'
STRINPUT DB 0dh,0ah,'Input a name:',0dh,0ah,'$'
STRINPHONE DB 'Input a telephone number:',0dh,0ah,'$'
STRYN DB 'Do you want a telephone number?(Y)Or do you want to exit?(N)Or do you want to input? (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
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
;保存人名子程序
STORE_NAME PROC NEAR
STORE_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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -