📄 tempfile.asm
字号:
;---------清屏,设置颜色
CLRSRC MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AX,0600H
MOV BH,0AH
XOR CX,CX
MOV DX,184FH
INT 10H
POP DX
POP CX
POP BX
POP AX
ENDM
CURSOR MACRO ROW,COL ;置光标row+1行,col+1列
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,2
MOV BH,0
MOV DH,ROW
MOV DL,COL
INT 10H
POP DX
POP CX
POP BX
POP AX
ENDM
PUTS MACRO S ;显示字符串
PUSH DX
PUSH AX
MOV AH,9
LEA DX,S
INT 21H
POP AX
POP DX
ENDM
OPENFILE MACRO PNAME,FILEHANDLE,O_ERR ;打开文件
LOCAL O_ERROR,O_QUIT
PUSH DX
MOV AH,3DH
LEA DX,PNAME
MOV AL,2
INT 21H
JC O_ERROR
MOV FILEHANDLE,AX
MOV AL,1
JMP O_QUIT
O_ERROR:
PUTS O_ERR
MOV AL,0
O_QUIT:
POP DX
ENDM
WRITEFILE MACRO LENGTH,BUF,FLIEHANDLE,W_ERR ;写文件
LOCAL W_ERROR,W_QUIT
PUSH BX
PUSH CX
PUSH DX
MOV BX,FILEHANDLE
MOV CX,LENGTH
MOV AH,40H
LEA DX,BUF
INT 21H
JC W_ERROR
MOV AL,1
JMP W_QUIT
W_ERROR:
PUTS W_ERR
MOV AL,0
W_QUIT:
POP DX
POP CX
POP BX
ENDM
READFILE MACRO LENGTH,BUF,FILEHANDLE,R_ERR ;读文件
LOCAL R_ERROR,R_QUIT
PUSH BX
PUSH CX
PUSH DX
LEA DX,BUF
MOV AH,3FH
MOV BX,FILEHANDLE
MOV CX ,LENGTH
INT 21H
JC R_ERROR
; MOV AL,1
JMP R_QUIT
R_ERROR:
PUTS R_ERR
; MOV AL,0
R_QUIT:
POP DX
POP CX
POP BX
ENDM
CLOSEFILE MACRO FILEHANDLE,C_ERR
LOCAL C_ERROR,C_QUIT
PUSH BX
PUSH CX
PUSH DX
MOV AH,3EH
MOV BX,FILEHANDLE
INT 21H
JC C_ERROR
MOV AL,1
JMP C_QUIT
C_ERROR:
PUTS C_ERROR
MOV AL,0
C_QUIT:
POP DX
POP CX
POP BX
ENDM
MOVCUR MACRO A,D,FILEHANDLE ;移动文件指针
MOV AL,A
MOV DX,D
MOV CX,0
MOV BX,FILEHANDLE
MOV AH,42H
INT 21H
ENDM
CLEAR MACRO ;清屏
MOV AL,0
MOV CL,0
MOV CH,0
MOV DH,24
MOV DL,79
MOV BH,7
MOV AH,6
INT 21H
ENDM
ZEROIT MACRO BUF ;清零缓冲区
PUSH BX
PUSH CX
PUSH DX
MOV BX,0
MOV CX,39
LOPN: MOV BUF[BX],' '
INC BX
LOOP LOPN
POP DX
POP CX
POP BX
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
DATA SEGMENT
MSG0 DB 'Open file error!','$'
MSG1 DB 'Read file error!','$'
MSG3 DB 'Write file error!','$'
MSG4 DB 'Close file error!','$'
MSG5 DB '---------MAIN MENU----------',0AH,0DH,'$'
MSG6 DB' INSERT(I) ',0AH,0DH,'$'
MSG7 DB' MODIFY(M) ',0AH,0DH,'$'
MSG8 DB' DELETE(D) ',0AH,0DH,'$'
MSG9 DB' QUERY (Q) ',0AH,0DH,'$'
MSG10 DB' COUNT (C) ',0AH,0DH,'$'
MSG11 DB' PRINT (P) ',0AH,0DH,'$'
MSG12 DB' EXIT (E) ',0AH,0DH,'$'
MSG13 DB' LIST (L) ',0AH,0DH,'$'
MSG14 DB '----------------------------',0AH,0DH,'$'
MSG15 DB'Please select the option:','$'
MESS14 DB'ID NAME PRI AMO TOTAL MIN',0AH,0DH,'$'
MESS15 DB'ID:',0AH,0DH,'$'
MESS16 DB'NAME:',0AH,0DH,'$'
MESS17 DB'PRICE:',0AH,0DH,'$'
MESS18 DB'AMOUNT:',0AH,0DH,'$'
MESS19 DB'TOTAL:',0AH,0DH,'$'
MESS20 DB'MIN:',0AH,0DH,'$'
MESS21 DB'INSERT SUCCESSFUL!',0AH,0DH,'$'
MESS22 DB'ANY KEY TO CONTINUE',0AH,0DH,'$'
MESS23 DB'CAN NOT FIND THIS RECORDER',0AH,0DH,'$'
MESS24 DB'MODIFY SUCCESSFUL!',0AH,0DH,'$'
O_ERR DB'FILE OPEN WRONG$'
W_ERR DB'FILE WRITE WRONG$'
R_ERR DB'FILE READ WRONG$'
C_ERR DB'FILE CLOSE WRONG$'
FNAME DB"F:\MASM\SCORE.TXT"
BUFFER1 DB 39 DUP(?)
BUFFER2 DB 39 DUP(?)
DB '$'
FILEHANDLE DW ?
LENG DW 39
DATA ENDS
ASSEC STRUC
ID DB 3 DUP('')
NAMES DB 12 DUP('')
PRICE DB ?
AMOUNT DB ?
TOTAL DW ?
MIN DB ?
ASSEC ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA
MOV AX,DATA
MOV DS,AX
START:
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,3
INT 10H
CLEAR
CLRSRC
PUTS MSG5
PUTS MSG6
PUTS MSG7
PUTS MSG8
PUTS MSG9
PUTS MSG10
PUTS MSG11
PUTS MSG12
PUTS MSG13
NEWLINE
PUTS MSG14
NEWLINE
PUTS MSG15
CURSOR 12,25
W:
MOV AH,1
INT 21H
CMP AL,'I'
JNZ N1
CALL INSERT
JMP W
N1: CMP AL,'M'
JNZ N2
CALL MODIFY
JMP W
N2: CMP AL,'D'
JNZ N3
CALL DELETE
JMP W
N3: CMP AL,'Q'
JNZ N4
CALL QUERY
JMP W
N4: CMP AL,'C'
JNZ N5
CALL COUN
JMP W
N5: CMP AL,'P'
JNZ N6
CALL PRINT
JMP W
N6: CMP AL,'L'
JNZ N7
CALL LIST
JMP W
N7: CMP AL,'E'
JZ EXITF
MOV AH,14 ;警告
MOV AL,7
MOV BH,0
INT 10H
JMP START
EXITF:
MOV AH,4CH
INT 21H
RET
MAIN ENDP
INSERT PROC NEAR
CURSOR 13,0
PUSH AX
PUSH BX
PUSH CX
PUSH DX
ZEROIT BUFFER1
PUTS MESS15 ;id输入缓冲区
CURSOR 13,3
MOV BX,0
LOP2: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE1
CMP AL,0DH
JZ CONTINUE1
MOV BUFFER1[BX],AL
INC BX
CMP BX,3
JZ CONTINUE1
JMP LOP2
CONTINUE1: ;NAME输入缓冲区
NEWLINE
PUTS MESS16
CURSOR 14,5
MOV BX,5
LOP3: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE2
CMP AL,0DH
JZ CONTINUE2
MOV BUFFER1[BX],AL
INC BX
CMP BX,17
JZ CONTINUE2
JMP LOP3
CONTINUE2: ;PRICE输入
NEWLINE
PUTS MESS17
CURSOR 15,6
MOV BX,19
LOP4: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE3
CMP AL,0DH
JZ CONTINUE3
MOV BUFFER1[BX],AL
INC BX
CMP BX,22
JZ CONTINUE3
JMP LOP4
CONTINUE3: ;amount输入
NEWLINE
PUTS MESS18
CURSOR 16,7
MOV BX,24
LOP5: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE4
CMP AL,0DH
JZ CONTINUE4
MOV BUFFER1[BX],AL
INC BX
CMP BX,27
JZ CONTINUE4
JMP LOP5
CONTINUE4: ;TOTAL输入
NEWLINE
PUTS MESS19
CURSOR 17,6
MOV BX,29
LOP6: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE5
CMP AL,0DH
JZ CONTINUE5
MOV BUFFER1[BX],AL
INC BX
CMP BX,34
JZ CONTINUE5
JMP LOP6
CONTINUE5: ;MIN输入
NEWLINE
PUTS MESS20
CURSOR 18,4
MOV BX,36
LOP7: MOV AH,1
INT 21H
CMP AL,0AH
JZ CONTINUE6
CMP AL,0DH
JZ CONTINUE6
MOV BUFFER1[BX],AL
INC BX
CMP BX,39
JZ CONTINUE6
JMP LOP7
CONTINUE6:
OPENFILE FNAME,FILEHANDLE,O_ERR
MOVCUR 2,0,FILEHANDLE ;移动文件指针至文件尾
WRITEFILE 39,BUFFER1,FILEHANDLE,W_ERR
PUTS MESS21
PUTS MESS22
CLOSEFILE FILEHANDLE,C_ERR
MOV AH,07 ;任意键返回
INT 21H
POP DX
POP CX
POP BX
POP AX
JMP START
INSERT ENDP
LIST PROC NEAR
NEWLINE
PUTS MESS14
;ZEROIT BUFFER2
MOV BX,0
MOV CX,39
LLOP1: MOV BUFFER2[BX],' '
INC BX
LOOP LLOP1
OPENFILE FNAME,FILEHANDLE,O_ERR
MOVCUR 0,0,FILEHANDLE ;移动文件指针至文件首
LIST1: READFILE 39,BUFFER2,FILEHANDLE,R_ERR
CMP AX,0 ;判断文件是否结束
JE LIST2
PUTS BUFFER2
NEWLINE
JMP LIST1
LIST2:
CLOSEFILE FILEHANDLE,C_ERR
PUTS MESS22
MOV AH,7
INT 21H
JMP START
LIST ENDP
QUERY PROC NEAR
NEWLINE
PUTS MESS15
CURSOR 13,3
MOV BX,0
MOV CX,39
QLOP1: MOV BUFFER1[BX],' '
INC BX
LOOP QLOP1
MOV BX,0
Q1: MOV AH,1
INT 21H
CMP AL,0AH
JZ Q2
CMP AL,0DH
JZ Q2
MOV BUFFER1[BX],AL
INC BX
CMP BX,3
JZ Q2
JMP Q1
Q2:
OPENFILE FNAME,FILEHANDLE,O_ERR
MOVCUR 0,0,FILEHANDLE
; ZEROIT BUFFER2
MOV BX,0
MOV CX,39
QLOP2: MOV BUFFER2[BX],' '
INC BX
LOOP QLOP2
Q3: READFILE 39,BUFFER2,FILEHANDLE,R_ERR
MOV DI,0
MOV SI,0
MOV CX,3
Q4: CMP AX,0 ;判断文件是否结束
JE Q5
MOV DL,BUFFER1[DI]
CMP DL,BUFFER2[DI] ;判断相符
JNZ Q3
INC DI
LOOP Q4
MOV SI,1
NEWLINE
PUTS MESS14
PUTS BUFFER2
Q5: CLOSEFILE FILEHANDLE,C_ERR
CMP SI,1 ;未发现相同项
JZ Q6
PUTS MESS23
Q6: NEWLINE
PUTS MESS22
MOV AH,7
INT 21H
JMP START
QUERY ENDP
MODIFY PROC NEAR
RET
MODIFY ENDP
DELETE PROC NEAR
RET
DELETE ENDP
COUN PROC NEAR
RET
COUN ENDP
PRINT PROC NEAR
RET
PRINT ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -