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

📄 window.asm

📁 835140masm 实现的简单的学生档案管理
💻 ASM
字号:
  extrn list:far
  extrn insert:far
  extrn delete:far
  extrn search:far
     ;;clear
      clr macro
      push ax
      push bx
      push cx
      push dx
      mov ax,0600h
      mov cx,0
      mov dx,184fh
      mov bh,9Eh
      int 10h
       pop dx
      pop cx
      pop bx
      pop ax
      endm

     ;;;scrooll 
     scrl macro lrow,lcol,rrow,rcol,color
     push ax
     push bx
     push cx
     push dx
     mov ah,6
        mov al,0
        mov cl,lcol
        mov ch,lrow
        mov dh,rrow
        mov dl,rcol
        mov bh,color
        int 10h
        pop dx
        pop cx
        pop bx
        pop ax
        endm


        ;;she zhi shu biao
        setcur macro row,col
        push ax
        push bx
        push cx
        push dx
        mov ch,5        
        mov cl,7
        mov ah,1
        int 10h
        mov dh,row
        mov dl,col
        mov bh,0        
        mov ah,2
        int 10h
        pop dx
        pop cx
        pop bx
        pop ax
        endm

        display macro string
        push dx
        lea dx,string
        mov ah,09
        int 21h
        pop dx
        endm

        pushxy macro 
          push ax
          push bx
          push cx
          push dx
          push di
          push si
          push bp
          endm

        popxy macro 
          pop bp
          pop si
          pop di
          pop dx
          pop cx
          pop bx
          pop ax
          endm

        DISALL MACRO 
        PUSH AX
        PUSH BX
        PUSH CX
        PUSH DX
        SETCUR 6,34
        DISPLAY MS1
        SETCUR 8,34
        DISPLAY MS2
        SETCUR 10,34
        DISPLAY MS3
        SETCUR 12,34
        DISPLAY MS4
        SETCUR 14,34
        DISPLAY MS5
        SETCUR 16,34
        DISPLAY MS6
        POP DX
        POP CX
        POP BX
        POP AX
        ENDM

         stack segment para stack 'stack'
           dw 280 dup(?)
           stack ends


        data segment para 'data'
        string1 db 'ANHUI UNIVERSITY OF SCIENCE AND TECHNOLOGY',0ah,0dh,'$'
        string2 db ' '
        TM  DB 2 DUP(?)
            DB ':'
            DB 2 DUP(?)
            DB ':'
            DB 2 DUP(?),'$'
        ms1 db '1. ADD ',0AH,0DH,'$'
        MS2 DB '2. DELET ',0AH,0DH,'$'
        MS3 DB '3. SEARCH ',0AH,0DH,'$'
        MS4 DB '4. LISTALL ',0AH,0DH,'$'
        MS5 DB '5. PASSWORD',0AH,0DH,'$'
        MS6 DB '6. QUIT ',0AH,0DH,'$'
        CUR DB ?
        CUR2 DB ?
        CUR1 DB ?
        prompt db 'Enter Password:',13,10,'$'
        pass label byte
        maxlen db 8
        namelen db ?
        password db 9 dUP(?),13,10,'$'
        third db ?

        fcbrec label byte
        fcbdriv db 0
        fcbname db 'password'
        fcbext db 'txt'
        fcbblk dw 0
        fcbrcsz dw ?
                dd ?
                dw ?
                dt ?
       fcbsqrc db 0
               dd ?

       reclen equ 9
       pwordfld db  reclen dup(?),13,10,'$'
       wordfld db 9 dup(?)
       endcde db 0
       openmsg db '* * * open error * * *','$'
       readmsg db '* * * read error * * *','$'
       msgpass db 'Input new password:$'
       writemsg db 'write error!$'
       creatmsg db 'creat error!$'
       
       DATA ENDS

        code segment para 'code'
        assume cs:code,ds:data,es:data,ss:stack
        main proc far
        start:
        push ds
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov es,ax
        mov ax,stack
       mov ss,ax
        mov third,0
        call openf
        cmp endcde,0
        jnz jieshu
        call readf
        cmp endcde,0
        jnz jieshu
        lea dx,pwordfld
        mov ah,09
        int 21h
        jmp ipa
       jieshu:jmp _a


    ipa: scrl 0,0,24,79,07h
        setcur 12,20
        cmp third,3
        je shu
        inc third 
        jmp chu
      shu: ret
      chu:
        lea dx,prompt
        mov ah,09h
        int 21h
        setcur 12,35
        push si
        push cx
        mov si,0
        mov cx,8
    con:
        mov ah,07h
        int 21h
        mov password[si],al
        mov ah,02
        mov dl,'*'
        int 21h
        inc si
        loop con

        pop cx
        pop si
        mov cx,8
        lea di,password
        lea si,pwordfld
        cld
        rep cmpsb
        jne a
        jmp _a
      a:jmp ipa

      

     _a:MOV AL,1CH
        MOV AH,35H
        INT 21H
        PUSH ES
        PUSH BX
        PUSH DS
        MOV  DX,OFFSET TIMES
        MOV  AX,SEG TIMES
        MOV  DS,AX
        MOV  AL,1CH
        MOV AH,25H
        INT 21H
        POP DS
        STI


   menu:     
        clr
        SETCUR 2,19
        DISPLAY STRING1
        SCRL 6,34,19,50,06H
        scrl 5,32,18,48,67h
        SCRL 6,34,6,45,8FH
        SETCUR 6,34
        DISALL
        SETCUR 6,34
        MOV CUR,6
        MOV CUR1,6
   GET: 
        MOV AH,0
        INT 16H

   cop:CMP AH,01H
       JE E
       JMP NEQ
    E: JMP EXIT
       NEQ:
       CMP AH,48H
       JE UP

      CMP AH,50H
      JE DOWN
      cmp ah,1ch
      je ju
      jmp _11
    ju:jmp judge
    _11:
      CMP AH,02H
      JE N1

      CMP AH,03H
      JE N2

     CMP AH,04H
     JE N3
    
     CMP AH,05H
     JE N4

     CMP AH,06H
     JE  N5

     CMP AH,07H
     JE Y
     JMP K
  Y: JMP EXIT
  K: JMP GET
  N1:MOV CUR,6
     JMP _UPDOWN
  N2:MOV CUR,8
     JMP _UPDOWN
  N3:MOV CUR,10
     JMP _UPDOWN
  N4:MOV CUR,12
     JMP _UPDOWN
  N5:MOV CUR,14
     JMP _UPDOWN

  UP:
     CMP CUR,6
     JE ND
     SUB CUR,2
     SUB CUR1,2
     JMP _UPDOWN
  ND:MOV CUR,16
      MOV CUR1,16
     JMP _UPDOWN

  DOWN:
       CMP CUR,16
       JE BEGIN1
       ADD CUR,2
       ADD CUR1,2
       JMP _UPDOWN
   BEGIN1:
       MOV CUR,6
       MOV CUR1,6
      JMP _UPDOWN

 _UPDOWN: scrl 5,32,18,48,67h
      SCRL CUR,34,CUR,45,8FH
      SETCUR CUR,34
      DISALL
      SETCUR CUR,34
    
      MOV AH,0
      INT 16H
      CMP AH,1CH
      JE judge
      jmp cop
  judge:
      cmp cur,6
      je begin_pro

      cmp cur,10
      je search_pro

      cmp cur,8
      je delet_pro

      cmp cur,12
      je  list_pro

      cmp cur,14
      je pass_pro

      cmp cur,16
      je it
       JMP menu
     it:jmp exit

    list_pro:
   call list
   wai:mov ah,7
      int 21h
      cmp al,' '
      jne wai
      jmp menu

    begin_pro:
      call insert
      wai1:mov ah,7
      int 21h
      cmp al,' '
      jne wai1
      jmp menu

    pass_pro:
      call trans
      jmp Menu

    search_pro:
      call search
      jmp menu

    delet_pro:
      call delete
   wai2:mov ah,7
      int 21h
      cmp al,' '
      jne wai2
      jmp menu

 _DOWN:
    scrl 5,32,18,48,67h
    SCRL CUR,34,CUR,45,8FH
    SETCUR CUR,34
    DISALL
    SETCUR CUR,34
    MOV AH,0
    INT 16H
    CMP AH,1CH
    JE judge1 
    JMP cop
  judge1:
      cmp cur,14
      je list_p1r
      JMP ccc
    list_p1r:
      call trans
      jmp menu
  ccc:
    cmp cur,16
    je it1
    jmp get
  it1:jmp exit

        
    

  EXIT: pop dx
        pop ds
        MOV AL,1CH
        MOV AH,25H
        INT 21H
        CLR
        setcur 0,0
        scrl 0,0,24,79,07h
        ret
        main endp


    openf proc near
          LEA DX,FCBREC
          MOV AH,0FH
          INT 21H
          cMP AL,00
          JNZ ERROR
          MOV FCBRCSZ,RECLEN
          MOV AH,1aH
          LEA DX,PWORDFLD
          INT 21H
          RET
    ERROR:MOV ENDCDE,01
          RET
    OPENF ENDP

    READF PROC NEAR
          MOV AH,14H
          LEA DX,FCBREC
          INT 21H
          CMP PWORDFLD,1AH
          JNE TESTS
          MOV ENDCDE,01
          JMP REND
    TESTS:
          cmp al,3
          jz rend
          CMP AL,0
          JZ REND
          CMP AL,1
          JnZ REND
           MOV ENDCDE,1
         ; SETCUR 12,35
         ; LEA DX,READMSG
         ; MOV AH,09
         ; INT 21H
    REND:
          RET
    READF ENDP


              tRANS PROC NEAR
               MOV AH,16H
               LEA DX,FCBREC
               INT 21H
   
              OR AL,AL
              JNE ERR_

         
           scrl 0,0,24,79,07h
            setcur 0,0
             display msgpass
              setcur 0,20
              mov bx,0
               jmp tran_in
                ERR_:
                 DISPLAY WRITEMSG
                 call closef
                  RET
               
            tRAN_IN:
               MOV AH,07h
               INT 21H
               MOV WORDFLD[BX],AL
               INC BX
               CMP BX,8
               Jb TRAN_IN
               mov wordfld+8,1ah
               mov cx,9
               lea di,pwordfld
               lea si,wordfld
               cld
               rep movsb
            
      MOV FCBRCSZ,8
       MOV AH,1AH
        LEA DX,pWORDFLD
         INT 21H
                        
        MOV AH,15H
        LEA DX,FCBREC
        INT 21H

        OR AL,AL
       JNE ERRR_
       call closef
       RET
       ERRR_:
       diSPLAY CREATMSG
       call closef
       RET
      TRANS ENDP





        closef proc near
           push ax
           push dx
           mov ah,10h
           lea dx,fcbrec
           int 21h
           pop dx
           pop ax
           ret
           closef endp


    TIMES PROC NEAR
        iret
        PUSH DS
        PUSH AX
        PUSH CX
        PUSH DX
        PUSH SI
        PUSH BX
        
        MOV AX,DATA
        MOV DS,AX
        STI
        LEA SI,TM
        mov ah,2H       
        int 1ah

       ; jc  b2
        mov bx,cx
        mov al,bh
        mov cl,4
        shr al,cl
        add al,30h
        mov [si],al
        mov al,bh
        and al,0fh
        add al,30h
        mov [si+1],al
        mov al,bl
        shr al,cl
        add al,30h
        mov [si+3],al
        mov al,bl
        and al,0dh
         add al,30h
         mov [si+4],al
         mov al,dh
         shr al,cl
         add al,30h
         mov [si+6],al
         mov al,dh
         and al,0fh
         add al,30h
         mov [si+7],al

         SETCUR 24,68
         LEA DX,TM
         MOV AH,09H
         INT 21H
         SETCUR CUR,34
      B2:   CLI
         
         POP BX
         POP SI
         POP DX
         POP CX
         POP AX
         POP DS
         IRET
         TIMES ENDP


        code ends
        end start

⌨️ 快捷键说明

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