?? address.asm
字號:
DATA SEGMENT
BOOK0 DB '*****************************************************$'
BOOK1 DB '* STUDENT ADDRESS BOOK SYSTEM *',0AH,0DH,'$'
BOOK11 DB '*****************************************************$'
BOOK2 DB '* PLEASE CHOICE THE OPERITION ',0AH,0DH,'$'
BOOK3 DB '* INSERT (I) * PLEASE INPUT:',0AH,0DH,'$'
BOOK4 DB '* UERY (Q) * NUM :',0AH,0DH,'$'
BOOK5 DB '* ELETE (D) * NAME :',0AH,0DH,'$'
BOOK6 DB '* LIST (L) * ADDRESS :',0AH,0DH,'$'
BOOK7 DB '* EXIT (E)',0AH,0DH,'*$'
BOOK8 DB '*****************************************************$'
BOOK9 DB 'NUM NAME ADDRESS',0AH,0DH,'$'
BOOK10 DB '************$'
WRONG DB 'YOU PUT THE WRONG NUM OR THERE IS NOT THIS STUDENT$'
FNAME DB "E:\ADDRESS\ADDRESS.TXT"
BUF1 DB 67 DUP(?)
BUF DB 0AH,0DH,'$'
BUF2 DB 65 DUP(?)
ZERO DW ?
DELET DB 65 DUP('0')
DATA ENDS
;------------------------------------
STUDENT STRUC
NUM DB 0,0
NAME DB 15 DUP(?)
ADDRESS DB 50 DUP(?)
STUDENT ENDS
;------------------------------------
SHOW MACRO ADDRESS
LEA DX,ADDRESS
MOV AH,9
INT 21H
ENDM
;------------------------------------
LIGHT_M1 MACRO A
MOV AH,2
MOV DH,A
MOV DL,35
MOV BH,0
INT 10H
ENDM
LIGHT_M2 MACRO
MOV AH,2
MOV DH,11
MOV DL,0
MOV BH,0
INT 10H
ENDM
LIGHT_M3 MACRO
MOV AH,2
MOV DH,3
MOV DL,35
MOV BH,0
INT 10H
ENDM
;------------------------------------
CLEAR MACRO
MOV AL,0
MOV CL,0
MOV CH,0
MOV DH,25
MOV DL,100
MOV BH,7
MOV AH,6
INT 10H
ENDM
CLEAR1 MACRO
MOV AL,0
MOV BH,7
MOV CH,6
MOV CL,36
MOV DH,9
MOV DL,100
MOV AH,6
INT 10H
ENDM
CLEAR2 MACRO
MOV AL,0
MOV BH,7
MOV CH,12
MOV CL,0
MOV DH,24
MOV DL,100
INT 10H
ENDM
;------------------------------------
AGAIN_1 MACRO
MOV DL,' '
MOV AH,2
INT 21H
MOV DL,' '
MOV AH,2
INT 21H
MOV DL,' '
MOV AH,2
INT 21H
ENDM
;------------------------------------
NEWLINE MACRO
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
ENDM
;------------------------------------
SHOW_ITEM MACRO ADDRESS
LOCAL NEXT1,NEXT2
PUSH BX
MOV BX,0
MOV DL,ADDRESS[BX]
MOV AH,2
INT 21H
INC BX
MOV DL,ADDRESS[BX]
MOV AH,2
INT 21H
INC BX
AGAIN_1
NEXT1: MOV DL,ADDRESS[BX]
MOV AH,2
INT 21H
INC BX
CMP BX,17
JL NEXT1
AGAIN_1
NEXT2: MOV DL,ADDRESS[BX]
MOV AH,2
INT 21H
INC BX
CMP BX,67
JL NEXT2
NEWLINE
POP BX
ENDM
;------------------------------------
GETIN MACRO ADDRESS,COUNT
LOCAL LP1,LP2,INPUT_END,EXIT
PUSH BX
PUSH AX
MOV BX,0
LP1: MOV ADDRESS[BX],' '
INC BX
CMP BX,COUNT
JL LP1
MOV BX,0
LP2: MOV AH,1
INT 21H
CMP AL,0AH
JZ INPUT_END
CMP AL,0DH
JZ INPUT_END
MOV ADDRESS[BX],AL
INC BX
CMP BX,COUNT
JL LP2
INPUT_END: CMP AL,0DH
JZ EXIT
CMP AL,0AH
JZ EXIT
MOV AH,7
INT 21H
JMP INPUT_END
EXIT: POP AX
POP BX
ENDM
;------------------------------------
CODE SEGMENT ;CODE
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
;------------------------------------
START:
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,3
INT 10H
CLEAR
SHOW BOOK0
NEWLINE
SHOW BOOK1
SHOW BOOK11
NEWLINE
SHOW BOOK2
SHOW BOOK3
SHOW BOOK4
SHOW BOOK5
SHOW BOOK6
SHOW BOOK7
NEWLINE
SHOW BOOK8
LIGHT_M3
;------------------------------------
W: MOV AH,7
INT 21H
CMP AL,'I'
JNZ N1
CALL INSERT
JMP W
N1: CMP AL,'D'
JNZ N2
CALL DELETE
JMP W
N2: CMP AL,'Q'
JNZ N3
CALL QUERY
JMP W
N3: CMP AL,'L'
JNZ N4
CALL LIST
JMP W
N4: CMP AL,'E'
JZ EXITF
JMP W
EXITF:MOV AH,4CH
INT 21H
RET
MAIN ENDP
;------------------------------------
INSERT PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
CLEAR1
LIGHT_M1 5
CALL GET_REC
MOV CX,0
MOV DX,0
MOV AL,2
MOV AH,42H
INT 21H
FLOC: CMP AX,0
JZ TRAN
SUB AX,67
MOV CX,DX
MOV DX,AX
MOV AL,0
MOV AH,42H
INT 21H
PUSH AX
PUSH DX
MOV DX,OFFSET BUF2
MOV CX,67
MOV AH,3FH
INT 21H
MOV CX,2
MOV SI,0
JMP CONT
TRAN: MOV CX,DX
MOV DX,AX
MOV AL,0
MOV AH,42H
INT 21H
JMP LP67
CONT: MOV AL,BUF2[SI]
CMP BUF1[SI],AL
JA LP67
CMP BUF1[SI],AL
JB NEXT
INC SI
LOOP CONT
JMP ERROR
NEXT: MOV DX,OFFSET BUF2
MOV CX,67
MOV AH,40H
INT 21H
POP DX
POP AX
JMP FLOC
ERROR: MOV DX,OFFSET WRONG
MOV AH,9H
INT 21H
JMP OVER
LP67: MOV DX,OFFSET BUF1
MOV CX,67
MOV AH,40H
INT 21H
OVER: MOV AH,3EH
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
INSERT ENDP
;------------------------------------
GET_REC PROC NEAR
PUSH AX
PUSH BX
MOV BX,0
GETIN BUF2,2
MOV AL,BUF2
MOV BUF1[BX],AL
INC BX
MOV AL,BUF2+1
MOV BUF1[BX],AL
INC BX
LIGHT_M1 6
GETIN BUF2,15
MOV CX,15
MOV SI,0
LP11: MOV AL,BUF2[SI]
MOV BUF1[BX],AL
INC BX
INC SI
LOOP LP11
LIGHT_M1 7
GETIN BUF2,50
MOV CX,50
MOV SI,0
LP12: MOV AL,BUF2[SI]
MOV BUF1[BX],AL
INC BX
INC SI
LOOP LP12
POP BX
POP AX
RET
GET_REC ENDP
;------------------------------------
QUERY PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CLEAR1
CLEAR2
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
LIGHT_M2
GETIN BUF1,2
NEWLINE
LEA DX,BOOK10
MOV AH,9
INT 21H
NEWLINE
LEA DX,BOOK9
MOV AH,9
INT 21H
LP3: MOV AH,3FH
MOV CX,67
MOV DX,OFFSET BUF2
INT 21H
LEA SI,BUF2
LEA DI,BUF1
MOV CX,2
LP4: MOV AL,BYTE PTR[SI]
CMP AL,BYTE PTR[DI]
JNZ LP3
INC SI
INC DI
LOOP LP4
MOV [BUF2+67],'$'
SHOW_ITEM BUF2
MOV AH,3EH
INT 21H
POP DX
POP CX
POP BX
POP AX
RET
QUERY ENDP
;------------------------------------
DELETE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CLEAR1
LIGHT_M1 5
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
MOV ZERO,AX
GETIN BUF1,2
LP5: MOV DX,OFFSET BUF2
MOV CX,67
MOV AH,3FH
INT 21H
LEA SI,BUF2
LEA DI,BUF1
MOV CX,2
LP6: MOV DL,BYTE PTR[SI]
CMP DL,BYTE PTR[DI]
JNZ LP5
INC SI
INC DI
LOOP LP6
MOV BX,ZERO
MOV AH,42H
MOV AL,1
MOV CX,0FFFFH
MOV DX,-65
INT 21H
MOV CX,65
MOV DX,OFFSET DELET
MOV AH,40H
INT 21H
MOV AH,3EH
INT 21H
JMP EXIT6
EXIT5: LIGHT_M2
SHOW WRONG
EXIT6: LIGHT_M3
POP DX
POP CX
POP BX
POP AX
RET
DELETE ENDP
;------------------------------------
LIST PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CLEAR1
CLEAR2
LIGHT_M2
SHOW BOOK9
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
AGAIN: MOV DX,OFFSET BUF1
MOV CX,67
MOV AH,3FH
INT 21H
CMP AX,0
JZ P
SHOW_ITEM BUF1
JMP AGAIN
P: MOV AH,3EH
INT 21H
LIGHT_M3
POP DX
POP CX
POP BX
POP AX
RET
LIST ENDP
;------------------------------------
CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -