📄 main.asm
字号:
;;;;;;;;;;;;;;;;;;; MACRO ;;;;;;;;;;;;;;;;;;;;;;;;;;
INCLUDE screen.txt
INCLUDE file.txt
;;;;;;;;;;;;;;;;;;; STACKSG SEGMENT ;;;;;;;;;;;;;;;;;;;;;;;;;;
STACKSG SEGMENT STACK 'STK'
DW 64 DUP('S')
STACKSG ENDS
;;;;;;;;;;;;;;;;;;; DATA SEGMENT ;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
MESS1 DB '+*****| Score Database Management System |*****+',0DH,0AH
DB '|--------------------File:---------------------|',0DH,0AH
DB '| |',0DH,0AH
DB '| 1 : CREATE 2 : OPEN |',0DH,0AH
DB '+--------------------Edit:---------------------+',0DH,0AH
DB '| |',0DH,0AH
DB '| 3 : INSERT 4 : DELETE 5 : DISPLAY |',0DH,0AH
DB '+-------------------Others:--------------------+',0DH,0AH
DB '| |',0DH,0AH
DB '| 6 : QUIT |',0DH,0AH
DB '+----------------------------------------------+',0DH,0AH
DB ' ',0DH,0AH
DB 'Please input your choise : < >',0DH,0AH,'$'
MESS2 DB ' ',0DH,0AH
DB ' ',0DH,0AH
DB ' Students_ID :',0DH,0AH
DB ' Name :',0DH,0AH
DB ' ASM Score :',0DH,0AH
DB ' PCO Score :',0DH,0AH
DB ' OS Score :',0DH,0AH,'$'
MESS3 DB 'STUDENTID NAME ASM PCO OS TOTAL',0AH,0DH,'$'
MESS4 DB ' THERE IS NO THIS STUDENT$'
MESS5 DB 'Create a file!$'
MESS6 DB 'Open a file!$'
FNAME DB 'D:\score.txt',0
N_OK DB 'CREATE FILE OK!',0DH,0AH,'$'
N_ERR DB 'CREATE FILE ERROR!',0DH,0AH,'$'
O_OK DB 'OPEN FILE OK!',0dh,0ah,'$'
O_ERR DB 'OPEN FILE ERROR!',0dh,0ah,'$'
D_OK DB 'DELETE FILE OK!',0dh,0ah,'$'
BUFFER1 DB 25 DUP(?)
BUFFEER DB 0AH,0DH,'$'
BUFFER2 DB 30 DUP(?)
HANDLE DW ?
DEL DB 8 DUP('0')
DATA ENDS
SCORE STRUC
SID DB 10 DUP(' ')
NAM DB 6 DUP(' ')
ASM DB 3 DUP(' ')
PCO DB 3 DUP(' ')
OS DB 3 DUP(' ')
TOTAL DB 3 DUP(' ')
SCORE ENDS
;;;;;;;;;;;;;;;;;;; CODE SEGMENT ;;;;;;;;;;;;;;;;;;;;;;;;;;
CODE SEGMENT
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 MESS1
ENTER_KEY
CURSOR_ORIGINAL
MENU_C: MOV AH,7
INT 21H
CMP AL,'1'
JNZ CHOOSE1
CALL CREATE
JMP MENU_C
CHOOSE1: CMP AL,'2'
JNZ CHOOSE2
CALL OPEN
JMP MENU_C
CHOOSE2: CMP AL,'3'
JNZ CHOOSE3
CALL INSERT
JMP MENU_C
CHOOSE3: CMP AL,'4'
JNZ CHOOSE4
CALL DELETE
JMP MENU_C
CHOOSE4: CMP AL,'5'
JNZ CHOOSE5
CALL DISPLAY
JMP MENU_C
CHOOSE5: CMP AL,'6'
JZ EXITF
JMP MENU_C
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
SHOW MESS2
SET_P1 14
CALL GET_REC
MOV CX,0 ;MOVE FILE POINTER TO END
MOV DX,0
MOV AL,2
MOV AH,42H
INT 21H
MOV CX,25 ;WRITE FILE
MOV DX,OFFSET BUFFER1
MOV AH,40H
INT 21H
MOV AH,3EH
INT 21H
CURSOR_ORIGINAL
POP DX
POP CX
POP BX
POP AX
RET
INSERT ENDP
GET_REC PROC NEAR
PUSH AX
PUSH BX
PUT BUFFER2,10
MOV BX,0
MOV CX,10
CONTINUE:
MOV AL,BUFFER2[BX]
MOV BUFFER1[BX],AL
INC BX
LOOP CONTINUE
SET_P1 15
PUT BUFFER2,6
MOV AL,BUFFER2
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+1
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+2
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+3
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+4
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+5
MOV BUFFER1[BX],AL
INC BX
SET_P1 16
PUT BUFFER2,3
MOV AL,BUFFER2
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+1
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+2
MOV BUFFER1[BX],AL
INC BX
SET_P1 17
PUT BUFFER2,3
MOV AL,BUFFER2
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+1
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+2
MOV BUFFER1[BX],AL
INC BX
SET_P1 18
PUT BUFFER2,3
MOV AL,BUFFER2
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+1
MOV BUFFER1[BX],AL
INC BX
MOV AL,BUFFER2+2
MOV BUFFER1[BX],AL
INC BX
POP BX
POP AX
RET
GET_REC ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CREATE:
SET_P3 4,50
SHOW MESS5
SET_P3 6,50
NEWFILE FNAME,HANDLE ;创建文件
CLOSEFILE HANDLE ;关闭文件
CURSOR_ORIGINAL
RET
OPEN: SET_P3 9,50
SHOW MESS6
SET_P3 11,50
OPENFILE FNAME,HANDLE ;打开文件
CURSOR_ORIGINAL
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELETE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CLEAR2
SET_P3 15,0
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
MOV HANDLE,AX
PUT BUFFER1,15 ; CONTACT IS IN BUFFER1
READ5:
MOV DX,OFFSET BUFFER2
MOV CX,23
MOV AH,3FH
INT 21H
LEA SI,BUFFER2
LEA DI,BUFFER1
MOV CX,15
C6:
MOV DL,BYTE PTR[SI]
CMP DL,BYTE PTR[DI]
JNZ READ5
INC SI
INC DI
LOOP C6
MOV BX,HANDLE
MOV AH,42H
MOV AL,1
MOV CX,0FFFFH
MOV DX,-8
INT 21H
MOV CX,8
MOV DX,OFFSET DEL
MOV AH,40H
INT 21H
MOV AH,3EH
INT 21H
SHOW D_OK
JMP EXIT6
EXIT5:
SET_P2
SHOW MESS4
EXIT6:
CURSOR_ORIGINAL
POP DX
POP CX
POP BX
POP AX
RET
DELETE ENDP
DISPLAY PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CLEAR3
CLEAR2
SET_P3 14,0 ; cursor
SHOW MESS3
SET_P3 15,0 ; cursor
MOV DX,OFFSET FNAME
MOV AL,2
MOV AH,3DH
INT 21H
MOV BX,AX
AGAIN:
MOV DX,OFFSET BUFFER1
MOV CX,25
MOV AH,3FH
INT 21H
CMP AX,0
JZ P
SHOW_ITEM BUFFER1
JMP AGAIN
P:
MOV AH,3EH
INT 21H
CURSOR_ORIGINAL
POP DX
POP CX
POP BX
POP AX
RET
DISPLAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -