📄 fuc.asm
字号:
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;huyisong 20053449 12110502
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
INCLUDE CONTROL.lib
INCLUDE screen.lib
INCLUDE doc.lib
PUBLIC INPUT,SAVEFILE,PROSUM,PROLIST,PROOPEN,PRODELETE,PROQUERY,PROMODIFY,PROCREATE
STACK SEGMENT STACK 'S'
DW 64 DUP('S')
STACK ENDS
DATA SEGMENT
GRADE STRUC
sno DB 11
DB ?
DB 11 DUP(?)
NAM DB 7
DB ?
DB 7 DUP(?)
math DB 4
DB ?
DB 4 DUP(?)
chin DB 4
DB ?
DB 4 DUP(?)
phy DB 4
DB ?
DB 4 DUP(?)
eng DB 4
DB ?
DB 4 DUP(?)
sum DB 3 DUP(?)
DB '$'
bindatasum DW 0
order DB 3 DUP(?)
DB '$'
bindataorder DW 1
GRADE ENDS
strinsertno DB 'what is the NO of the student :','$'
strinsertname DB 'what is the name of the student :','$'
strinsertmath DB 'please input the math score:','$'
strinsertchi DB 'please input the chinese score:','$'
strinsertphy DB 'please input the physics score:','$'
strinserteng DB 'please input the english score:','$'
strsno DB 'No','$'
strNAME DB 'Name','$'
strmath DB 'math','$'
strchin DB 'chi','$'
strphy DB 'phy','$'
strENG DB 'eng','$'
strsum DB 'SUM','$'
strorder DB 'Order','$'
filewOK DB 'Write COMPLETE!',0DH,0AH,'$'
filewERR DB 'Write Error!',0DH,0AH,'$'
fileoOK DB 'Open COMPLETE!',0DH,0AH,'$'
fileoERR DB 'Open Error!PLEASE CREATE HU.DAT FIRST !',0DH,0AH,'$'
filecOK DB 'Close COMPLETE!',0DH,0AH,'$'
filecERR DB 'Close Error!',0DH,0AH,'$'
STU GRADE 30 DUP(<>)
CT EQU $-STU
P EQU CT/30
ROW DB 0
CT1 EQU 1
CRLF DB 0DH,0AH,'$'
NUMBER DB '00','$'
STU_NUMBER DB 'ROW','$'
filerOK DB 'Read COMPLETE!',0DH,0AH,'$'
filerERR DB 'Read Error!',0DH,0AH,'$'
creat_ok DB 'create file ok',0DH,0AH,'$'
creat_err DB 'create file error',0DH,0AH,'$'
strinsertok DB 'Input COMPLETE!','$'
MSG0 DB 'Press any key to continue!','$'
strlistnull DB 'There is NULL!','$'
strdelget DB 'what row do you want to delete(1_30):','$'
strdelERR DB 'CAN NOT FIND',0DH,0AH
DB 'Press any key to continue!','$'
strdelok DB 'Delete COMPLETE!',0DH,0AH
DB 'Press any key to continue!','$'
strproopen DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strproopen1 DB '<< <<',0DH,0AH,'$'
strproopen2 DB '<< NOW this PROGRAM WILL OPEN the C:\HU.DAT !! <<',0DH,0AH,'$'
strprosave DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strprosave1 DB '<< <<',0DH,0AH,'$'
strprosave2 DB '<<NOW this PROGRAM WILL SAVE DATA into C:\HU.DAT !! <<',0DH,0AH,'$'
strproinsert DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strproinsert1 DB '<< <<',0DH,0AH,'$'
strproinsert2 DB '<< NOW this PROGRAM is INSERT PRO !! <<',0DH,0AH,'$'
strprodel DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strprodel1 DB '<< <<',0DH,0AH,'$'
strprodel2 DB '<< NOW this PROGRAM is DELETE PRO !! <<',0DH,0AH,'$'
strpromodify DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strpromodify1 DB '<< <<',0DH,0AH,'$'
strpromodify2 DB '<< NOW this PROGRAM is MODIFY PRO !! <<',0DH,0AH,'$'
strsearchinput DB 'please input the name of the student you want to search:','$'
strsearchnull DB 'CAN NOT FIND','$'
strsearchget DB 'This is the student record which you want to search:','$'
BUFsearch DB 7
DB ?
DB 7 DUP(?)
FILEHANDLE DW -1
NAME1 DB 'C:\HU.DAT',0
BUFdel DB 3
DB ?
DB 3 DUP(?)
datmath DB 0
datchin DB 0
datphy DB 0
dateng DB 0
datsum DW 0
CHAR DB ?
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
strprocreate DB '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',0DH,0AH,'$'
strprocreate1 DB '<< <<',0DH,0AH,'$'
strprocreate2 DB '<< NOW this PROGRAM WILL CREATE the C:\HU.DAT ! <<',0DH,0AH,'$'
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
strmodifynull DB 'CAN NOT FIND','$'
strmodifyget DB 'Input new data overwrite the old','$'
strmodifyok DB 'Update COMPLETE!','$'
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
PROCREATE PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRcreate
PUTS 0,0,strprocreate
PUTS 1,0,strprocreate1
PUTS 2,0,strprocreate1
PUTS 3,0,strprocreate1
PUTS 4,0,strprocreate1
PUTS 5,0,strprocreate2
PUTS 6,0,strprocreate1
PUTS 7,0,strprocreate1
PUTS 8,0,strprocreate1
PUTS 9,0,strprocreate1
PUTS 10,0,strprocreate
NEWFILE NAME1,FILEHANDLE,creat_err
CMP AL,0
JZ createexit_0
PUTS 13,10,creat_ok
createexit_0: RETURN
PROCREATE ENDP
PROOPEN PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRopen
PUTS 0,0,strproopen
PUTS 1,0,strproopen1
PUTS 2,0,strproopen1
PUTS 3,0,strproopen1
PUTS 4,0,strproopen1
PUTS 5,0,strproopen2
PUTS 6,0,strproopen1
PUTS 7,0,strproopen1
PUTS 8,0,strproopen1
PUTS 9,0,strproopen1
PUTS 10,0,strproopen
OPENFILE NAME1,FILEHANDLE
CMP AL,0
JZ O_L0
JMP O_EXIT0
O_L0: PUTS 13,10,fileoOK
READFILE CT,STU,FILEHANDLE
READFILE CT1,ROW,FILEHANDLE
CMP AL,0
JZ O_L10
JMP O_EXIT10
O_L10: PUTS 14,10,filerOK
CLOSEFILE FILEHANDLE
CMP AL,0
JNZ O_EXIT20
PUTS 15,10,filecOK
PUTS 16,10,MSG0
JMP O_EXIT30
O_EXIT0: PUTS 12,10,fileoERR
JMP O_EXIT30
O_EXIT10: PUTS 12,10,filerERR
JMP O_EXIT30
O_EXIT20: PUTS 12,10,filecERR
O_EXIT30: RETURN
PROOPEN ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
SAVEFILE PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRsave
PUTS 0,0,strprosave
PUTS 1,0,strprosave1
PUTS 2,0,strprosave1
PUTS 3,0,strprosave1
PUTS 4,0,strprosave1
PUTS 5,0,strprosave2
PUTS 6,0,strprosave1
PUTS 7,0,strprosave1
PUTS 8,0,strprosave1
PUTS 9,0,strprosave1
PUTS 10,0,strprosave
OPENFILE NAME1,FILEHANDLE
CMP AL,0
JZ S_L0
JMP S_EXIT0
S_L0: PUTS 13,10,fileoOK
WRITEFILE CT,STU,FILEHANDLE
WRITEFILE CT1,ROW,FILEHANDLE
CMP AL,0
JZ S_L10
JMP S_EXIT10
S_L10: PUTS 14,10,filewOK
CLOSEFILE FILEHANDLE
CMP AL,0
JNZ S_EXIT20
PUTS 15,10,filecOK
PUTS 16,10,MSG0
JMP S_EXIT30
S_EXIT0: PUTS 13,10,fileoERR
JMP S_EXIT30
S_EXIT10: PUTS 13,10,filewERR
JMP S_EXIT30
S_EXIT20: PUTS 13,10,filecERR
S_EXIT30: RETURN
SAVEFILE ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
INPUT PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRinsert
PUTS 0,0,strproinsert
PUTS 1,0,strproinsert1
PUTS 2,0,strproinsert1
PUTS 3,0,strproinsert1
PUTS 4,0,strproinsert1
PUTS 5,0,strproinsert2
PUTS 6,0,strproinsert1
PUTS 7,0,strproinsert1
PUTS 8,0,strproinsert1
PUTS 9,0,strproinsert
PUTS 10,0,strinsertno
GETS P,ROW,STU.sno
PUTS 11,0,strinsertname
GETS P,ROW,STU.NAM
PUTS 12,0,strinsertmath
GETS P,ROW,STU.math
PUTS 13,0,strinsertchi
GETS P,ROW,STU.chin
PUTS 14,0,strinsertphy
GETS P,ROW,STU.phy
PUTS 15,0,strinserteng
GETS P,ROW,STU.eng
INC ROW
CALL PROSUM
CALL PROSORT
PUTS 16,0,strinsertok
PUTS 17,0,MSG0
RETURN
INPUT ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PRODELETE PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRdelete
PUTS 0,0,strprodel
PUTS 1,0,strprodel1
PUTS 2,0,strprodel1
PUTS 3,0,strprodel1
PUTS 4,0,strprodel1
PUTS 5,0,strprodel2
PUTS 6,0,strprodel1
PUTS 7,0,strprodel1
PUTS 8,0,strprodel1
PUTS 9,0,strprodel
PUTS 10,0,strdelget
MOV AH,0AH
LEA DX,BUFdel
INT 21H
MOV CL,BUFdel+1
XOR CH,CH
CMP CX,1
JZ ADD_1
MOV AL,BUFdel+2
XOR AH,AH
SUB AL,30H
MOV DL,10
MUL DL
MOV BL,BUFdel+3
SUB BL,30H
ADD AL,BL
XOR AH,AH
JMP ADD_2
ADD_1: MOV AL,BUFdel+2
XOR AH,AH
SUB AL,30H
XOR AH,AH
ADD_2: MOV CX,AX
SUB AX,1
MOV DX,P
MUL DX
MOV BX,AX
MOV AX,CX
MOV DL,ROW
XOR DH,DH
CMP AX,DX
JA END_DELETE_ERROR
JZ END_DELETE
CMP AX,0
JNA END_DELETE_ERROR
DELETE_LOOP:
MOV BP,BX
ADD BP,P
LEA DI,STU
LEA SI,STU
ADD DI,BX
ADD SI,BP
MOV CX,P
PUSH AX
IN_LOOP: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
LOOP IN_LOOP
POP AX
ADD BX,P
ADD AX,1
CMP AX,DX
JZ END_DELETE
JMP DELETE_LOOP
END_DELETE:
DEC ROW
PUTS 11,0,strdelok
RETURN
END_DELETE_ERROR:
PUTS 11,0,strdelERR
RETURN
PRODELETE ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PROSUM PROC
ASSUME CS:CODE,DS:DATA
LOADDS DATA
funcasctobin datmath,STU.math,ROW
funcasctobin datchin,STU.chin,ROW
funcasctobin datphy,STU.phy,ROW
funcasctobin dateng,STU.eng,ROW
XOR AX,AX
MOV AL,datmath
XOR AH,AH
XOR BX,BX
MOV BL,datchin
XOR BH,BH
ADD AX,BX
XOR BX,BX
MOV BL,datphy
XOR BH,BH
ADD AX,BX
XOR BX,BX
MOV BL,dateng
XOR BH,BH
ADD AX,BX
MOV datsum,AX
MOV AL,ROW
SUB AL,1
XOR AH,AH
MOV BL,P
MUL BL
LEA BX,STU.bindatasum
ADD BX,AX
PUSH AX
MOV AX,datsum
MOV [BX],AX
POP AX
LEA BX,STU.sum
ADD BX,AX
MOV AX,datsum
MOV DL,100
DIV DL
MOV [BX],AL
ADD BYTE PTR [BX],30H
MOV AL,AH
XOR AH,AH
MOV DL,10
DIV DL
MOV [BX+1],AL
ADD BYTE PTR [BX+1],30H
MOV [BX+2],AH
ADD BYTE PTR [BX+2],30H
RETURN
PROSUM ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PROSORT PROC
ASSUME CS:CODE,DS:DATA
LOADDS DATA
MOV CL,ROW
XOR CH,CH
CMP CX,0
JZ END_SORT
LEA BP,STU.bindataorder
SET_ONE:MOV WORD PTR DS:[BP],1
ADD BP,P
LOOP SET_ONE
MOV CL,ROW
XOR CH,CH
SUB CX,1
LEA BX,STU.bindatasum
LEA BP,STU.bindataorder
CMP CX,0
JZ END_SORT1
SORT_OUT_LOOP: PUSH CX
MOV SI,BX
MOV DI,BP
SORT_IN_LOOP: ADD SI,P
ADD DI,P
MOV DX,[BX]
MOV AX,[SI]
CMP DX,AX
JG GREAT
JE EQUAL
INC WORD PTR DS:[BP]
JMP EQUAL
GREAT: INC WORD PTR [DI]
EQUAL:
LOOP SORT_IN_LOOP
POP CX
ADD BX,P
ADD BP,P
LOOP SORT_OUT_LOOP
END_SORT1: MOV CL,ROW
XOR CH,CH
LEA SI,STU.bindataorder
LEA BX,STU.order
SORT_LOOP: MOV AX,[SI]
MOV BYTE PTR [BX],'0'
MOV DL,10
DIV DL
ADD AH,30H
ADD AL,30H
MOV [BX+1],AL
MOV [BX+2],AH
ADD SI,P
ADD BX,P
LOOP SORT_LOOP
END_SORT: ;CLRSCR
RETURN
PROSORT ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PROQUERY PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
MOV AH,0AH
LEA DX,BUFsearch
INT 21H
MOV AX,SEG STU
MOV DS,AX
MOV ES,AX
LEA SI,BUFsearch+2
LEA DI,STU+15
MOV AL,0
SUB DI,P
MOV BX,DI
SEARCH_LOOP:
LEA SI,BUFsearch+2
MOV DI,BX
ADD DI,P
MOV BX,DI
CMP AL,ROW
JZ END_SEARCH_NO
ADD AL,1
MOV CL,BUFsearch[1]
CMP CL,[DI-1]
JNZ SEARCH_LOOP
MOV CL,[SI-1]
XOR CH,CH
CLD
REPZ CMPSB
JZ END_SEARCH_YES
JNZ SEARCH_LOOP
END_SEARCH_NO:
CLRSCR
PUTS 10,0,strsearchnull
PUTS 11,0,MSG0
JMP END_SEARCH
END_SEARCH_YES:
CLRSCR
PUTS 10,0,strsearchget
SUB AL,1
funclistonerow AL
PUTS 12,0,MSG0
JMP END_SEARCH
END_SEARCH:
RETURN
PROQUERY ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PROMODIFY PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
MOV AH,0AH
LEA DX,BUFsearch
INT 21H
MOV AX,SEG STU
MOV DS,AX
MOV ES,AX
LEA SI,BUFsearch+2
LEA DI,STU+15
MOV AL,0
SUB DI,P
MOV BX,DI
UPDATE_LOOP:
LEA SI,BUFsearch+2
MOV DI,BX
ADD DI,P
MOV BX,DI
CMP AL,ROW
JZ END_UPDATE_NO
ADD AL,1
MOV CL,[SI-1]
CMP CL,[DI-1]
JNZ UPDATE_LOOP
MOV CL,[SI-1]
CLD
REPE CMPSB
JZ END_UPDATE_YES
JNZ UPDATE_LOOP
END_UPDATE_NO:
CLRSCR
PUTS 0,0,strpromodify
PUTS 1,0,strpromodify1
PUTS 2,0,strpromodify1
PUTS 3,0,strpromodify1
PUTS 4,0,strpromodify1
PUTS 5,0,strpromodify2
PUTS 6,0,strpromodify1
PUTS 7,0,strpromodify1
PUTS 8,0,strpromodify1
PUTS 9,0,strpromodify
PUTS 10,0,strmodifynull
PUTS 11,0,MSG0
JMP END_UPDATE
END_UPDATE_YES:
CLRSCR
SUB AL,1
funclistonerow AL
MOV CL,AL
PUTS 13,0,strinsertno
GETS P,CL,STU.sno
PUTS 14,0,strinsertname
GETS P,CL,STU.NAM
PUTS 15,0,strinsertmath
GETS P,CL,STU.math
PUTS 16,0,strinsertchi
GETS P,CL,STU.chin
PUTS 17,0,strinsertphy
GETS P,CL,STU.phy
PUTS 18,0,strinserteng
GETS P,CL,STU.eng
PUTS 19,0,strmodifyok
PUTS 20,0,MSG0
MOV AL,ROW
XOR AH,AH
PUSH AX
ADD CL,1
MOV ROW,CL
CALL PROSUM
POP AX
MOV ROW,AL
CALL PROSORT
JMP END_UPDATE
END_UPDATE:
RETURN
PROMODIFY ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
PROLIST PROC FAR
ASSUME CS:CODE,DS:DATA
LOADDS DATA
CLRSCRlist
MOV AL,0
CMP AL,ROW
JB D1
PUTS 10,0,strlistnull
PUTS 11,0,MSG0
RETURN
D1: funclistsomerow ROW
PUTS 24,0,MSG0
RETURN
PROLIST ENDP
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
MAIN ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -