⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chengjiguanli.asm

📁 一个自己用汇编写的成绩管理系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.386PF1	    EQU 3B00H;定义常量,下同F2      EQU 3C00HF3      EQU 3D00HF4      EQU 3E00HF5      EQU 3F00HALTX    EQU 2D00HESCKEY  EQU 1BHTRUE    EQU 0FFHFALSE   EQU 0STUDENT STRUC;学生结构定义        RECNO             DW  0	    STUID	          DB  9   DUP (0)        LENID             EQU $-STUID;STUID字段长度的修改不影响程序,下同。	    NA		          DB  10 DUP (0)        LENNAME           EQU    $-NAME	    ASM	              DB  4  DUP (0)        LENDAY            EQU  $-ASM        ZUCHENG           DB  4 DUP (0)        LENZUCHENG        EQU $-ZUCHENG        OS                DB  4  DUP (0)        LENOS             EQU $-OS        SUM               DW 0        LENSUM            EQU $-SUM        RANK              DW  0        RECORDERLEN       EQU $-RECNO STUDENT ENDS                WINDOW  MACRO A,B,C,D;宏定义,下同(本程序中有大量宏定义,一为增加可读性,二为减少代码量);A.B.C.D分别代表屏幕四个角的坐标      HENGXIAN B,D,A,0C4H      HENGXIAN B,D,C,0C4H      SHUXIAN A,C,B,0B3H      SHUXIAN A,C,D,0B3H      FCUR  A,B      WCH   0BAH,7      FCUR  A,D      WCH   0BFH,7      FCUR  C,B      WCH   0C0H,7      FCUR  C,D      WCH   0D9H,7      ENDM      SCROLLUP MACRO NUM,ATTR,TOP,LEFT,BOTTOM,RIGHT;BIOS  INT 10H的6号功能调用清屏或上卷宏。        MOV AH,6        MOV AL,NUM  ;0  清屏,1 上卷        MOV CH,TOP        MOV CL,LEFT        MOV DH,BOTTOM        MOV DL,RIGHT        MOV BH,ATTR        INT 10H        ENDMSETCURSOR MACRO Y,X;设置当前页的光标定位宏,当前为0页。        MOV AH,2        MOV BH,0        MOV DH,Y        MOV DL,X        INT 10H        ENDM        FCUR  MACRO X,Y      MOV AH,2       MOV BH,0      MOV DH,X      MOV DL,Y      INT 10H      ENDM      FIX   MACRO A,B,C,D,E,F,G      MOV A,B      MOV BH,C      MOV D,E      MOV F,G      INT 10H      ENDM      READCURSOR MACRO; 读取当前页的光标位置宏,当?拔?页。          MOV AH,3          MOV BH,0          INT 10H          ENDM          PRINT MACRO ADDRESS		;打?	LEA	DX,ADDRESS	MOV	AH,09H	INT	21H	ENDM	MOVSS MACRO BUFFER1,BUFFER2     XOR CX,CX     MOV CL,[BUFFER2+1]     LEA DI,BUFFER1     LEA SI BUFFER2     ADD SI,2     REP MOVSB     ENDM     WCH   MACRO X,Y      MOV AL,X      MOV BX,Y      MOV CX,1      MOV AH,9      INT 10H      ENDM      HENGXIAN MACRO A,B,C,D      LOCAL HHL      MOV   ROW,C      MOV   COL,AHHL:  FCUR  ROW,COL      WCH  D,7      INC  COL      CMP  COL,B      JLE   HHL      ENDM      SHUXIAN MACRO A,B,C,D      LOCAL VVL      MOV   ROW,A      MOV   COL,CVVL:  FCUR ROW,COL      WCH  D,7      INC  ROW      CMP  ROW,B      JLE  VVL      ENDM      ECHOSTRING MACRO NUM,ATTR,PAGE,VARID,COUNT;ECHO AT CURRENT CURSOR;BIOS  INT 10H的13号功能调用显示字符串宏。        READCURSOR;设置DX。        LEA BP,VARID        MOV AX,SEG VARID        MOV ES,AX;ES:BP为串首地址。        MOV AL,NUM;,NUM为1时,光标移动。        MOV BL,ATTR;属性        MOV BH,PAGE;页号        MOV CX,COUNT;串长        MOV AH,13H        MOV AL,NUM        INT 10H        ENDMFILEOPEN MACRO RW,FILE_ID;DOS  INT 21H的3DH号功能调用打开文件宏。        MOV AX,SEG FILE_ID;FILE_ID为ASCIZ串。        MOV DS,AX        LEA DX,FILE_ID        MOV AL,RW;读写方式        MOV AH,3DH        INT 21HENDMFILEREAD MACRO COUNT,VAR,FILE;DOS  INT 21H的3FH号功能调用读文件宏。        MOV AX,SEG VAR        MOV DS,AX        LEA DX,VAR;DS:DX为读出来的数据送往的首地址。        MOV CX,COUNT        MOV BX,FILE        MOV AH,3FH        INT 21H        ENDMFILEWRITE MACRO COUNT,VAR,FILE;DOS  INT 21H的40H号功能调用写文件宏。        MOV AX,SEG VAR        MOV DS,AX        LEA DX,VAR;把DS:DX为首地址的数据写入文件中。        MOV CX,COUNT        MOV BX,FILE        MOV AH,40H        INT 21H        ENDMFPMOVE MACRO DIRECT,DWEA,FILE;DOS  INT 21H的42H号功能调用移动文件指针宏。        MOV EAX,DWEA;偏移量。        MOV DX,AX        SAR EAX,16        MOV CX,AX        MOV AL,DIRECT;偏移方式。        MOV BX,FILE        MOV AH,42H        INT 21H        ENDMFILECLOSE MACRO FILE;DOS  INT 21H的3EH号功能调用关闭文件宏。        MOV BX,FILE        MOV AH,3EH        INT 21H        ENDMENCRLF MACRO CRLF;换行        MOV AX,SEG CRLF        MOV DS,AX        LEA DX,CRLF        MOV AH,9        INT 21H        ENDM        WIN MACRO OPR1,OPR2,OPR3,OPR4,OPR5,OPR6    ;建立窗口         MOV AH,06H         MOV AL,OPR1         MOV BH,OPR2         MOV CH,OPR3         MOV CL,OPR4         MOV DH,OPR5         MOV DL,OPR6         INT 10H         ENDM         CLEARBUFFER MACRO VARID,COUNT;清缓冲区内容        MOV AX,SEG VARID        MOV ES,AX        LEA DI,VARID        MOV CX,COUNT        MOV AL,0        REP STOSBENDMDATA  SEGMENT  USE16       ROW    DB   0       COL    DB   0       MENU	DB 'LIST(F1)   INSERT(F2)   MODIFY(F3)   DELETE(F4)    SEARCH(F5)   EXIT(ALT+X)$'      FILE                 DW    	?;文件代号      FILE1	      DW     ? ;文件的排序代号      FILETEMP          DW    	?;临时文件代号      CURRECNO       DW             ?;当前记录号      ENTRYPORT        DW 	    0;调用者的标识      CURCURSOR       DW 	    ?;当前光标号      FILEID	     DB 	   ".\zhangbo.txt",0;ASCIZ      NOEXISTFILE      DB 	"FILE IS NOT EXIST!",7,"SYSTEM AUTOMATICALLY CREATE A FILE FOR YOU ,PLEASE INSERT(F2) RECORDER!$"      NULLFILE           DB	"FILE IS NULL!",7,"PLEASE INSERT(F2) RECORDER!$"      APPQUEST        DB 	"DO YOU WANT TO INSERT ANOTHER (Y/N?)"      QUESTLEN     EQU 	$-APPQUEST      ANYKEY           DB 	"PRESS ANY KEY TO CONTINUE,ESC TO EXIT"      ANYKEYLEN  EQU 	$-ANYKEY      TAILQUEST          DB 	"ALREADY REACH FILE`S END,PRESS ANY KEY TO EXIT!"      FILETAILLEN  EQU 	$-TAILQUEST      MODIFYQUEST     DB 	"DO YOU WANT TO MODIFY CURRENT RECORDER(Y),ESC TO EXIT,OTHER TO CONTINUE!"      MODIFYLEN    EQU 	$-MODIFYQUEST      DELETEQUEST       DB  "DO YOU WANT TO DELETE CURRENT RECORDER(Y),ESC TO EXIT,OTHER TO CONTINUE!"      DELETELEN     EQU 	$-DELETEQUEST      SEARCHOPERATEEA            DB 	"+++++++++++SEARCH BY STUNAME+++++++++++++"      OSEALEN          EQU 	$-SEARCHOPERATEEA      MODDELQUEST     DB 	"PRESS M TO MODIFY,D TO DELETE ,ESC TO EXIT,OTHER TO CONTINUE!"      MDLEN             EQU 	$-MODDELQUEST      SEARCHTAILQUEST     DB "ALREADY REACH FILE`S END, DO YOU SEARCH AGAIN(Y),ESC TO EXIT!"      SEARCHTAILLEN  EQU 	$-SEARCHTAILQUEST      F2SELECT            DB 	"FILE IS NULL!",7,"YOU MUST SELECT F2!"      F2LEN              EQU 	$-F2SELECT      HEAD                 DB     "======================STUDENT`S ARCHIVE MANAGE SYSTEM "                              DB "===================="      HEADLEN         EQU 	$-HEAD      VRECNO            DB 	"RECNO:"      RECNOLEN      EQU 	$-VRECNO      VSTUID         DB 	"STUID:"      IDLEN        EQU 	$-VSTUID      BSTUID         DB  	9,?,9 DUP(?);控制输入的长度,为DOS 21H的9号功能调用,下同。      VNAME                DB 	"NAME:"      NAMELEN           EQU 	$-VNAME      BNAME                DB  	12,?,12 DUP(?)      VASM         DB 	"ASM:"      ASMLEN           EQU 	$-VASM      BASM          DB  	4,?,4 DUP(?)      VZUCHENG             DB 	"ZUCHENG:"      ZUCHENGLEN     EQU 	$-VZUCHENG      BZUCHENG             DB  	4,?,4 DUP(?)      VOS                  DB 	"OS:"      OSLEN             EQU 	$-VOS      BOS                  DB  	4,?,4 DUP(?)      VSUM        DB  	"SUM:"      SUMLEN   EQU 	$-VSUM      BSUM         DB  	4,?,4 DUP(?)      BRANK       DB    4,?,4 DUP (?)      F1KEY                DB 	"  F1--DISPLAY"      F1KEYLEN        EQU 	$-F1KEY      F2KEY                DB 	"F2--INSERT"      F2KEYLEN        EQU 	$-F2KEY      F3KEY                DB 	"F3--MODIFY"      F3KEYLEN        EQU 	$-F3KEY      F4KEY               DB 	"F4--DELETE"      F4KEYLEN        EQU 	$-F4KEY      F5KEY                DB 	"F5--SEARCH"      F5KEYLEN        EQU 	$-F5KEY      ALTXKEY          DB 	"ALT X--EXIT",0DH,0AH      ALTXKEYLEN   EQU 	$-ALTXKEY      BLANK   DB '    $'      CRLF                    DB            0DH,0AH,'$'      BUFFER1            STUDENT <> ;      BUFFER2               STUDENT   <>   ;      BUFFER             STUDENT   <>   ;自定义的变量,作为缓冲数据之用。      BTODBUFFER         DB  	5 DUP(?),'$';转换记录号为十进制数      SEARCHSTUNA      DB  	10,?,10 DUP(?);查询方式      FINSTRLEN           DW 	?;保存要查询的内容      COUNT                 DW 	0;作为显示次数之用      FLAG                 DW  ?      FLAG1                DW ?       MENU1            DB   '  RECNO      ID       NAME     ASM     ZUCHENG        OS      SCORE    RANK','$'      MENU1LEN      EQU  $-MENU      BLANK1    DB  ' $'      BIN1 DW ?      BLANK2    DB  '1','$'      BIN2 DW ?      BIN3 DW ?      RSLTHI DW 0      RSLTLO DW 0 RECORDERLEN1 DD 0      ASC_OUT DB 5 DUP(0)DATA ENDSSTACK  SEGMENT  USE16      DW    512    DUP  (?)      TOP   LABEL  WORDSTACK  ENDSCODE SEGMENT USE16MAIN PROC FAR      ASSUME  CS:CODE , DS:DATA , SS:STACK START:	MOV    AX ,  STACK        MOV    SS ,  AX        MOV    SP ,  OFFSET TOP        MOV    AX ,  DATA        MOV    DS ,  AX        MOV    ES ,  AX;=========================================	FILEOPEN 2,FILEID        JC ERRORNO;文件不存在。        MOV FILE,AX	MOV FILE1,AX        MOV FILETEMP,AX        MOV BX,AX        FILEREAD RECORDERLEN,BUFFER,FILE        CMP AX,0        JZ ERRORNU;文件存在,但内容为空。        FPMOVE 0,0,FILE;MOVE TO HEAD;文件指针回到头。        JMP ENTRYERRORNO:        LEA DX,NOEXISTFILE	    MOV AH,9        INT 21H	   LEA DX,FILEID        MOV CX,0        MOV AH,3CH;建立新文件。        INT 21H        MOV FILE,AX	MOV FILETEMP,0FFH        JMP ENTRYERRORNU:        MOV FILETEMP,0FFH;标识文件存在,但内容为空。ENTRY:        MOV AH,0        MOV AL,3        INT 10H;80*25的文本方式	    SCROLLUP 0,3FH,0,0,0,79;        FCUR 0,3      PRINT MENU              	  WINDOW 1,0,24,79	  SCROLLUP 0,1FH,2,1,23,78; 	  SCROLLUP  0,1FH,11,1,23,78      HENGXIAN 1,78,11,0C4H 	  SETCURSOR 12,1	  PRINT MENU1	  SHUXIAN 12,23,8,0B3H      SHUXIAN 12,23,19,0B3H	  SHUXIAN 12,23,31,0B3H	  SHUXIAN 12,23,37,0B3H	  SHUXIAN 12,23,49,0B3H	  SHUXIAN 12,23,62,0B3H	  SHUXIAN 12,23,70,0B3H	            	SELECT:;只能按下F1~F5、ALT X键,否则发出警声        MOV AH,0        INT 16H        CMP AX,F1        JZ F1DISPLAY                 CMP AX,F2	   JZ F2INSERT        CMP AX,F3        JZ F3MODIFY        CMP AX,F4        JZ F4DELETE        CMP AX,F5        JZ F5SEARCH        CMP AX,ALTX        JZ EXIT        MOV DL,7        MOV AH,6        INT 21H        JMP SELECT        F1DISPLAY:        CMP FILETEMP ,0FFH;文件为空时,必须追加记录后才能执行,下同。        JNZ EXECALL1        FCUR 4,1        ECHOSTRING 1,1CH,0,F2SELECT,F2LEN        JMP SELECTEXECALL1:        CALL DISPLAYALL;调用显示记录子程序。        CMP EAX,0;返回码,非常重要,复杂的程序往往需要返回码值,下同。        JZ SELECTF2INSERT:        CALL INSERT;调用追加记录子程序。        CMP EAX,0        JZ SELECTF3MODIFY:        CMP FILETEMP ,0FFH        JNZ EXECALL3       FCUR 4,1        ECHOSTRING 1,1CH,0,F2SELECT,F2LEN        JMP SELECTEXECALL3:        CALL MODIFY;调用修改记录子程序。        CMP EAX,0        JZ  SELECTF4DELETE:        CMP FILETEMP ,0FFH        JNZ EXECALL4        FCUR 4,1        ECHOSTRING 1,1CH,0,F2SELECT,F2LEN        JMP SELECTEXECALL4:        CALL DELETE;调用删除记录子程序。        CMP EAX,0        JZ  SELECTF5SEARCH:        CMP FILETEMP ,0FFH        JNZ EXECALL5        FCUR 4,1        ECHOSTRING 1,1CH,0,F2SELECT,F2LEN        JMP SELECTEXECALL5:        CALL SEARCH;调用查询记录子程序。        CMP EAX,0        JZ SELECT;=========================================EXIT:        MOV BX,FILE        MOV AH,3EH        INT 21H;关闭打开的文件,以清文件缓冲区。        SCROLLUP 0,0FH,1,1,23,78;清屏。        SETCURSOR 0,0        MOV AX,4C00H        INT 21HMAIN ENDPDISPLAYALL PROC NEAR	  SCROLLUP  0,1FH,11,1,23,78	  HENGXIAN 1,78,11,0C4H	  SETCURSOR 12,1	  PRINT MENU1	  SHUXIAN 12,23,8,0B3H      SHUXIAN 12,23,19,0B3H	  SHUXIAN 12,23,31,0B3H	  SHUXIAN 12,23,37,0B3H	  SHUXIAN 12,23,49,0B3H	  SHUXIAN 12,23,62,0B3H	  SHUXIAN 12,23,70,0B3H	  SETCURSOR 14,1	  CALL RANKALL1	  ECHOAGAIN: 	;显示、修改、删除、查询子程序时显示记录的入口。        FILEREAD RECORDERLEN,BUFFER,FILE;把文件的当前记录读到缓冲区。        CMP AX,0;文件指针到达尾部?        JZ TAIL        CMP BUFFER.RECNO,0        JZ ECHOAGAIN;逻辑删除者不显示出来。        INC COUNT ;        LEA BX,BTODBUFFER        MOV AX,BUFFER.RECNO        MOV CURRECNO,AX        CALL BTOD;把WORD型的记录号转化为字符型。        CLD        MOV AL,'0'        LEA DI,BTODBUFFER        REPZ SCASB        DEC DI        PUSH DI        POP DI        PRINT BLANK1        PRINT BLANK1        MOV AH,9        MOV DX,DI        INT 21H        READCURSOR	    MOV ROW, DH	    FCUR ROW, 10	    ECHOSTRING  1,1FH,0,BUFFER.STUID,LENID;:内容显示,下同。        FCUR  ROW,20     	ECHOSTRING  1,1FH,0,BUFFER.NA,10        FCUR  ROW,32        ECHOSTRING  1,1FH,0,BUFFER.ASM,4        FCUR  ROW,42        ECHOSTRING  1,1FH,0,BUFFER.ZUCHENG,4        FCUR   ROW,56        ECHOSTRING  1,1FH,0,BUFFER.OS,4        FCUR  ROW,65        MOV AX,BUFFER.SUM        LEA BX,BTODBUFFER        CALL BTOD        CLD        MOV AL,'0'        LEA DI,BTODBUFFER        REPZ SCASB        DEC DI        MOV AH,09H        MOV DX,DI        INT 21H	    FCUR  ROW,71        LEA BX,BTODBUFFER        MOV AX,BUFFER.RANK        CALL BTOD        CLD         MOV AL,'0'        LEA DI,BTODBUFFER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -