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

📄 chengjiguanli.asm

📁 一个自己用汇编写的成绩管理系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        REPZ SCASB         DEC DI        PUSH DI        POP DI        PRINT BLANK1        PRINT BLANK1        MOV AH,9        MOV DX,DI        INT 21H          INC ROW        FCUR ROW,1	    CMP COUNT,10	    JAE ESCINPUT        JMP ECHOAGAINESCINPUT:        CMP ENTRYPORT ,2;转移到调用者那里,下同。	    JE  RETURNMODIFY        CMP ENTRYPORT ,3        JE  RETURNDELETE        CMP ENTRYPORT ,4        JAE  RETURNSEARCH        MOV AH,0        INT 16H        CMP AL,ESCKEY        JZ ENDDINAMEIT        MOV COUNT,0         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        JMP ECHOAGAINTAIL:          ;文件指针到尾。        MOV AH,0        INT 16HENDDINAMEIT:        MOV COUNT,0;恢复初值,下同。        MOV ENTRYPORT ,0        FPMOVE 0,0,FILE;MOVE TO HEAD        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	             MOV EAX,0;返回码。        RETDISPLAYALL ENDP     INSERT PROC NEAR        SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        CMP FILETEMP,0FFH;空文件时,必须追加记录。        JNZ ACCINSERT;文件不为空时,累积追加        PUSH FILE        POP FILETEMP;有记录内容时,恢复文件号。        MOV AX,1;空文件时追加的第一条记录,记录号为1。        MOV  CURRECNO,AXCONAPP:;继续追加或者删除、修改的子程序的入口。         SCROLLUP 0,1FH,2,1,10,78;         SETCURSOR 2,1        CLEARBUFFER BUFFER,RECORDERLEN        CMP ENTRYPORT ,3;当删除调用这个子程序时,文件中的记录内容清全部0。        JE  DEL        CMP ENTRYPORT, 5;查询时选择删除时同上。        JE  DEL        CLD;以下是置BUFFER缓冲区的内容,这些内容要写到文件中去。        LEA BX,BTODBUFFER        MOV AX,CURRECNO        CALL BTOD        MOV AL,'0'        LEA DI,BTODBUFFER        REPZ SCASB        DEC DI        PUSH DI        ECHOSTRING  1,1DH,0,VRECNO,RECNOLEN        POP DI        MOV AH,9        MOV DX,DI        INT 21H        MOV AX,CURRECNO        MOV BUFFER.RECNO,AX        READCURSOR	   MOV ROW, DH        INC ROW	    FCUR ROW,1        ECHOSTRING  1,1DH,0,VSTUID,IDLEN        LEA DX,BSTUID        MOV AH,0AH        INT 21H        XOR CX,CX        MOV CL,[BSTUID+1]        LEA DI,BUFFER.STUID        LEA SI,BSTUID        ADD SI,2        REP MOVSB         READCURSOR	   MOV ROW, DH        INC ROW	    FCUR ROW,1        ECHOSTRING  1,1DH,0,VNAME,NAMELEN        LEA DX,BNAME        MOV AH,0AH        INT 21H        XOR CX,CX        MOV CL,[BNAME+1]	    LEA DI,BUFFER.NA        LEA SI,BNAME        ADD SI,2        REP MOVSB        READCURSOR	MOV ROW, DH        INC ROW	FCUR ROW,1        ECHOSTRING  1,1DH,0,VASM,ASMLEN        LEA DX,BASM        MOV AH,0AH        INT 21H     	LEA SI, BASM+1        CALL ASC_BIN        MOV BIN1,AX        XOR CX,CX        MOV CL,[BASM+1]        LEA DI,BUFFER.ASM        LEA SI,BASM        ADD SI,2        REP MOVSB        READCURSOR	   MOV ROW, DH        INC ROW	    FCUR ROW,1        ECHOSTRING  1,1DH,0,VZUCHENG,ZUCHENGLEN        LEA DX,BZUCHENG        MOV AH,0AH        INT 21H	LEA SI, BZUCHENG+1        CALL ASC_BIN        MOV BIN2,AX        XOR CX,CX        MOV CL,[BZUCHENG+1]        LEA DI,BUFFER.ZUCHENG        LEA SI,BZUCHENG        ADD SI,2        REP MOVSB        READCURSOR	    MOV ROW, DH        INC ROW	    FCUR ROW,1        ECHOSTRING  1,1DH,0,VOS,OSLEN        LEA DX,BOS        MOV AH,0AH        INT 21H	    LEA SI,BOS+1        CALL ASC_BIN        MOV BIN3,AX        XOR CX,CX        MOV CL,[BOS+1]        LEA DI,BUFFER.OS        LEA SI,BOS        ADD SI,2        REP MOVSB        READCURSOR	    MOV ROW, DH        INC ROW	    FCUR ROW,1	    XOR AX,AX	    MOV AX,BIN1	    ADD AX,BIN2	    ADD AX,BIN3        MOV BUFFER.SUM,AX	DEL:        CMP ENTRYPORT,2        JB RETCURRENTPOT        FPMOVE 1,-RECORDERLEN,FILE;如果是由修改、删除、查询子程序调用的话,恢复文件指针于当前记录上。RETCURRENTPOT:           MOV BX,FILE        MOV CX,RECORDERLEN        LEA DX,BUFFER        MOV AH,40H        INT 21H        CMP ENTRYPORT,2;返回到各调用点。        JZ MODIFY        CMP ENTRYPORT,3        JZ DELETE        CMP ENTRYPORT,4        JAE SEARCHAGAIN;转移到查询子程序中。        ECHOSTRING  1,1DH,0,APPQUEST,QUESTLEN        READCURSOR        MOV CURCURSOR,DXYNINPUT:        SETCURSOR DH,DL        MOV AH,1        INT 21H        CMP AL,'Y'        JZ ANOTHER;接着追加记录。        CMP AL,'Y'        JZ ANOTHER        CMP AL,'N'        JZ ENDAPPEXIT        CMP AL,'N'        JZ ENDAPPEXIT        MOV DL,7        MOV AH,6        INT 21H        MOV DX,CURCURSOR	    JMP YNINPUTANOTHER:         SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        JAE SCROLL        ENCRLF CRLF        JMP ACCINSERTSCROLL:        SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1ACCINSERT:;文件不为空时,累积追加的入口。        FPMOVE 2,-RECORDERLEN,FILE;文件指针指向最后一条记录。        FILEREAD RECORDERLEN,BUFFER,FILENOEFFECT:        CMP BUFFER.RECNO,0        JNZ EFFECTRECNO        FPMOVE 1,-RECORDERLEN,FILE        FILEREAD RECORDERLEN,BUFFER,FILE        CMP BUFFER.RECNO,0        JNZ EFFECTRECNO        FPMOVE 1,-RECORDERLEN,FILE;最后一条记录如是逻辑删除,则必须要后退到正确的记录号上来。        JMP NOEFFECTEFFECTRECNO:        MOV AX,BUFFER.RECNO        INC AX        MOV  CURRECNO,AX        JMP CONAPPENDAPPEXIT:        MOV COUNT,0        MOV ENTRYPORT ,0        FPMOVE 0,0,FILE;MOVE TO HEAD        SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        MOV EAX,0        RETINSERT ENDPMODIFY PROC NEAR        SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1          MOV ENTRYPORT, 2        MOV COUNT ,9        JMP NEAR PTR ECHOAGAINRETURNMODIFY:        ECHOSTRING  1,0DH,0,MODIFYQUEST,MODIFYLEN        ENCRLF CRLF        MOV AH,0        INT 16H        CMP AL,'Y'         SETCURSOR 2,1;        JZ CONAPP        CMP AL,'Y'        SETCURSOR 2,1;        JZ CONAPP        CMP AL,ESCKEY        JZ ENDMODIFYEXIT        MOV COUNT,9       SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        JMP ECHOAGAINENDMODIFYEXIT:        MOV COUNT,0        MOV ENTRYPORT ,0        FPMOVE 0,0,FILE;MOVE TO HEAD         SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        MOV EAX,0        RETMODIFY ENDPDELETE PROC NEAR;逻辑删除。       SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1           MOV ENTRYPORT, 3        MOV COUNT ,9        JMP NEAR PTR ECHOAGAINRETURNDELETE:        ECHOSTRING  1,0DH,0,DELETEQUEST,DELETELEN        ENCRLF CRLF        MOV AH,0        INT 16H        CMP AL,'Y'        JZ CONAPP        CMP AL,'Y'        JZ CONAPP        CMP AL,ESCKEY        JZ ENDDELETEEXIT        MOV COUNT,9      SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1          JMP ECHOAGAINENDDELETEEXIT:        MOV COUNT,0        MOV ENTRYPORT ,0        FPMOVE 0,0,FILE;MOVE TO HEAD         SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        MOV EAX,0        RETDELETE ENDPCREATWIN PROC NEAR                               ;创建窗口子程序         WIN 0,3EH,1,0,24,79                 ;定义窗口背景         WIN 0,2FH,0,0,0,79         WIN 0,2FH,24,0,24,79SHOW:			                     ;显示菜单位置及内容         SETCURSOR 0,1			          MOV AH,9         LEA DX,MENU         INT 21H         CREATWIN ENDP         SEARCH PROC NEAR        FPMOVE 0,0,FILE;MOVE TO HEAD        SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1            MOV COUNT ,10  ;因为名字是10个字节        MOV ENTRYPORT, 4        ECHOSTRING  1,1DH,0,SEARCHOPERATEEA,OSEALEN;查询方式提示。        READCURSOR	     MOV ROW, DH        INC ROW	    FCUR ROW,1                ECHOSTRING  1,1DH,0,VNAME,NAMELEN;查询内容。        LEA DX,SEARCHSTUNA        MOV AH,0AH        INT 21H        XOR CX,CX        MOV CL,[SEARCHSTUNA+1]        MOV BX,CX        MOV BYTE PTR [SEARCHSTUNA+2][BX],0;在输入的查询内容最后置0,以保证与BUFFER.STUID内容的绝对匹配。        INC CX        MOV FINSTRLEN,CX;多比较一个0值。SEARCHAGAIN:;查询是否有相同的内容。        CLEARBUFFER BUFFER,RECORDERLEN        SCROLLUP 0,1FH,5,1,10,78        SETCURSOR 5,1            MOV COUNT ,10        MOV ENTRYPORT, 4        FILEREAD RECORDERLEN,BUFFER,FILE        CMP AX,0        JZ SEARCHTAIL        MOV AX,BUFFER.RECNO        MOV CURRECNO,AX        LEA SI,SEARCHSTUNA+2        LEA DI,BUFFER.NA        MOV CX,FINSTRLENCOMPARE:        MOV AL,[SI]        CMP AL,[DI]        JNE SEARCHAGAIN;不匹配时,立即转移,读一下条记录。        INC SI        INC DI        LOOP COMPARE        FPMOVE 1,-RECORDERLEN,FILE;文件指针返回到查询命中的记录上。        JMP ECHOAGAINRETURNSEARCH:        ECHOSTRING  1,1DH,0,MODDELQUEST,MDLEN        READCURSOR	     MOV ROW, DH        INC ROW	    FCUR ROW,1        MOV AH,0        INT 16H        CMP AL,'M'        JZ CONAPP;转移到追加记录子程序的相应入口处。        CMP AL,'M'        JZ CONAPP        CMP AL,'D'        JZ LOGICDEL        CMP AL,'D'        JZ LOGICDEL        CMP AL,ESCKEY        JZ ENDSEARCHEXIT        MOV COUNT,10         SCROLLUP 0,1FH,5,1,10,78        SETCURSOR 5,1        JMP SEARCHAGAIN;查询记录中是否有相同内容。LOGICDEL:        MOV ENTRYPORT,5;转移到追加记录子程序的相应入口处前,通知它逻辑删除当前记录。        JZ CONAPPSEARCHTAIL:       READCURSOR	   MOV ROW, DH        INC ROW	    FCUR ROW,1	ECHOSTRING  1,1AH,0,SEARCHTAILQUEST,SEARCHTAILLEN        MOV AH,0        INT 16H        CMP AL,'Y'        JZ SEARCH;文件指针已到达尾部,是否接着重新查询?        CMP AL,'Y'        JZ SEARCHENDSEARCHEXIT:        MOV COUNT,0        MOV ENTRYPORT ,0        FPMOVE 0,0,FILE;MOVE TO HEAD	SCROLLUP 0,1FH,2,1,10,78;        SETCURSOR 2,1        MOV EAX,0        RET SEARCH ENDPRANKALL1 PROC NEAR	MOV FLAG,1	MOV FLAG1,1	MOV RECORDERLEN1,0    J1: CLEARBUFFER BUFFER1,RECORDERLEN        FILEREAD RECORDERLEN,BUFFER1,FILE                CMP AX,0        JZ RETT         CMP BUFFER1.RECNO,0        JNZ  J2        MOV EAX,RECORDERLEN        MUL FLAG        MOV RECORDERLEN1,EAX        INC FLAG        JMP J1         J2: FPMOVE 0,0,FILE          MOV FLAG1,1    J3: FILEREAD RECORDERLEN,BUFFER2,FILE        CMP AX,0        JZ J4        CMP BUFFER2.RECNO,0        JZ J3 	    MOV CX,BUFFER1.SUM        MOV BX,BUFFER2.SUM        CMP BX,CX        JNA J3        INC FLAG1        JMP J3            J4: MOV AX,FLAG1        MOV BUFFER1.RANK,AX        FPMOVE 0,RECORDERLEN1,FILE        FILEWRITE RECORDERLEN,BUFFER1,FILE        XOR EAX,EAX        MOV EAX,RECORDERLEN        MUL FLAG        MOV RECORDERLEN1,EAX        INC FLAG        JMP J1  RETT: FPMOVE 0,0,FILE        RET        RANKALL1 ENDPBTOD PROC NEAR;二进制转换为十进制        MOV SI,5        MOV CX,10STORE:        XOR DX,DX        DIV CX        ADD DL,30H        DEC SI        MOV [BX][SI],DL        OR SI,SI        JNZ STORE        RETBTOD ENDPASC_BIN PROC         XOR AX,AX        MOV CL,[SI]        XOR CH,CH        INC SI        JCXZ M2   M1:  MOV BX,10        MUL BX        MOV BL,[SI]        INC SI        AND BX,0FH        ADD AX,BX        LOOP M1   M2: RET  ASC_BIN ENDP  BINR_ASC PROC         MOV BX,10     C0: MOV DX,0         MOV AX,RSLTHI         CMP AX,0         JE C1         DIV BX	 MOV RSLTHI ,AX         MOV AX,RSLTLO         DIV BX	 MOV RSLTLO,AX         OR  DL,30H         MOV [DI],DL         DEC DI         JMP SHORT C0    C1:  MOV AX,RSLTLO    C2:  CMP AX,0         JZ C3         MOV DX,0         DIV BX         OR  DL,30H         MOV [DI],DL         DEC DI         JMP SHORT C2     C3 : RET       BINR_ASC ENDP       CODE  ENDS  END  START

⌨️ 快捷键说明

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