📄 huibianshiyan4.asm
字号:
DATE SEGMENT
INPUTNAME DB 21,?,21 DUP(?)
INPUTPHONE DB 9,?,9 DUP(?)
TABLE DB 50 DUP(20 DUP(0),8 DUP(0))
MSG1 DB 'Input name:$'
MSG2 DB 'Input a telephone number:$'
MSG3 DB 'Do you want a telephone number?(Y/N)$'
MSG4 DB 'name?$'
MSG5 DB 'name',16 DUP(0),'tel.',13,10,'$'
TEMP DB 20 DUP(?),8 DUP(?),13,10,'$'
COUNT DB 0
ENTER DB 13,10,'$'
DATE ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATE,ES:DATE
START:
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATE
MOV DS,AX
MOV ES,AX
CLD
MOV BX,0
PART1:
LEA DX,MSG1
MOV AH,09H
INT 21H
CALL INPUT_NAME
CMP INPUTNAME+1,0
JZ PART2
CALL STOR_NAME
LEA DX,MSG2
MOV AH,09H
INT 21H
CALL INPHONE
CMP COUNT,32H
JNZ PART1
PART2:
MOV BP,BX
CALL NAME_SORT
PART3:
LEA DX,MSG3
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
CMP AL,'y'
JZ PART4
CMP AL,'Y'
JZ PART4
CMP AL,'n'
JZ EXIT
CMP AL,'N'
JZ EXIT
LEA DX,ENTER
MOV AH,09H
INT 21H
JMP SHORT PART3
PART4:
MOV BX,BP
LEA DX,ENTER
MOV AH,09H
INT 21H
LEA DX,MSG4
MOV AH,09H
INT 21H
CALL INPUT_NAME
CMP INPUTNAME+1,0
JZ EXIT
LEA DX,MSG5
MOV AH,09H
INT 21H
PART5:
CALL NAME_SEARCH
CMP BX,0FFE4H
JZ PART4
CALL PRINTLINE
JMP SHORT PART5
EXIT:
RET
MAIN ENDP
INPUT_NAME PROC NEAR
LEA DX,INPUTNAME
MOV AH,0CH
MOV AL,0AH
INT 21H
LEA DX,ENTER
MOV AH,09H
INT 21H
RET
INPUT_NAME ENDP
STOR_NAME PROC NEAR
LEA SI,INPUTNAME+2
LEA DI,TABLE[BX]
XOR CX,CX
MOV CL,INPUTNAME+1
REP MOVSB
INC COUNT
ADD BX,14H
RET
STOR_NAME ENDP
INPHONE PROC NEAR
LEA DX,INPUTPHONE
MOV AH,0CH
MOV AL,0AH
INT 21H
LEA DX,ENTER
MOV AH,09H
INT 21H
LEA SI,INPUTPHONE+2
LEA DI,TABLE[BX]
XOR CX,CX
MOV CL,INPUTPHONE+1
REP MOVSB
ADD BX,8H
RET
INPHONE ENDP
NAME_SORT PROC NEAR
CMP COUNT,0H
JZ EXIT1
MOV AX,BX
MOV DL,1CH
DIV DL
XOR CX,CX
MOV CL,AL
DEC CL
LOOP1:
MOV BX,0
PUSH CX
LOOP2:
PUSH CX
LEA SI,TABLE[BX]
ADD BX,1CH
LEA DI,TABLE[BX]
XOR CX,CX
MOV CL,14H
REPZ CMPSB
JBE NEXT2
LEA SI,TABLE[BX]
LEA DI,TEMP
XOR CX,CX
MOV CL,1CH
REP MOVSB
SUB SI,38H
LEA DI,TABLE[BX]
XOR CX,CX
MOV CL,1CH
REP MOVSB
LEA SI,TEMP
SUB DI,38H
XOR CX,CX
MOV CL,1CH
REP MOVSB
NEXT2:
POP CX
LOOP LOOP2
NEXT1:
POP CX
LOOP LOOP1
EXIT1:
RET
NAME_SORT ENDP
NAME_SEARCH PROC NEAR
NEXT:
SUB BX,1CH
CMP BX,0FFE4H
JZ EXIT2
LEA SI,INPUTNAME+2
LEA DI,TABLE[BX]
XOR CX,CX
MOV CL,INPUTNAME+1
REPZ CMPSB
JNZ NEXT
EXIT2:
RET
NAME_SEARCH ENDP
PRINTLINE PROC NEAR
LEA SI,TABLE[BX]
LEA DI,TEMP
MOV CX,001CH
REP MOVSB
LEA DX,TEMP
MOV AH,09H
INT 21H
RET
PRINTLINE ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -