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

📄 address.asm

📁 本程序通过汇编语言来实现一个简单的学生通讯录。这个学生通讯录程序是在Windows平台上的Masm615进行编译的。此程序中提供一个通讯录主界面
💻 ASM
字号:
DATA    SEGMENT
BOOK0   DB '*****************************************************$'
BOOK1   DB '*        STUDENT ADDRESS BOOK SYSTEM                *',0AH,0DH,'$'
BOOK11  DB '*****************************************************$'
BOOK2   DB '* PLEASE CHOICE THE OPERITION ',0AH,0DH,'$'
BOOK3   DB '* INSERT (I)  *    PLEASE INPUT:',0AH,0DH,'$'
BOOK4   DB '* UERY   (Q)  *    NUM    :',0AH,0DH,'$'
BOOK5   DB '* ELETE  (D)  *    NAME   :',0AH,0DH,'$'
BOOK6   DB '* LIST   (L)  *    ADDRESS :',0AH,0DH,'$'
BOOK7   DB '* EXIT   (E)',0AH,0DH,'*$'
BOOK8   DB '*****************************************************$'
BOOK9   DB 'NUM    NAME            ADDRESS',0AH,0DH,'$'
BOOK10  DB '************$'
WRONG   DB 'YOU PUT THE WRONG NUM OR THERE IS NOT THIS STUDENT$'
FNAME   DB "E:\ADDRESS\ADDRESS.TXT"
BUF1    DB 67 DUP(?)
BUF     DB 0AH,0DH,'$'
BUF2    DB 65 DUP(?)
ZERO    DW ?
DELET   DB 65 DUP('0')
DATA    ENDS
;------------------------------------
STUDENT STRUC
NUM      DB 0,0
NAME     DB 15 DUP(?)
ADDRESS  DB 50 DUP(?)
STUDENT ENDS
;------------------------------------ 
SHOW MACRO ADDRESS
        LEA DX,ADDRESS
        MOV AH,9
        INT 21H
        ENDM
;------------------------------------ 
LIGHT_M1 MACRO  A
        MOV AH,2
        MOV DH,A
        MOV DL,35
        MOV BH,0
        INT 10H
        ENDM
LIGHT_M2 MACRO
       MOV AH,2
       MOV DH,11
       MOV DL,0
       MOV BH,0
       INT 10H
       ENDM
LIGHT_M3 MACRO
       MOV AH,2
       MOV DH,3
       MOV DL,35
       MOV BH,0
       INT 10H
       ENDM
;------------------------------------ 
CLEAR  MACRO
       MOV AL,0        
       MOV CL,0
       MOV CH,0  
       MOV DH,25    
       MOV DL,100      
       MOV BH,7      
       MOV AH,6
       INT 10H
       ENDM
CLEAR1 MACRO
       MOV AL,0
       MOV BH,7
       MOV CH,6
       MOV CL,36
       MOV DH,9
       MOV DL,100
       MOV AH,6
       INT 10H
       ENDM
CLEAR2 MACRO
       MOV AL,0
       MOV BH,7
       MOV CH,12
       MOV CL,0
       MOV DH,24
       MOV DL,100
       INT 10H
       ENDM
;------------------------------------
AGAIN_1  MACRO    
       MOV DL,' '
        MOV AH,2
        INT 21H
        MOV DL,' '
        MOV AH,2
        INT 21H
        MOV DL,' '
        MOV AH,2
        INT 21H
        ENDM
;------------------------------------ 
NEWLINE MACRO
        PUSH AX  
        PUSH DX
        MOV DL,0DH
        MOV AH,2
        INT 21H
        MOV DL,0AH
        MOV AH,2
        INT 21H
        POP DX
        POP AX
        ENDM
;------------------------------------ 
SHOW_ITEM MACRO ADDRESS
  LOCAL NEXT1,NEXT2  
        PUSH BX
        MOV BX,0
        MOV DL,ADDRESS[BX]
        MOV AH,2
        INT 21H
        INC BX
        MOV DL,ADDRESS[BX]
        MOV AH,2
        INT 21H
        INC BX
        AGAIN_1
NEXT1: MOV DL,ADDRESS[BX]
        MOV AH,2
        INT 21H
        INC BX
        CMP BX,17
        JL  NEXT1
        AGAIN_1
NEXT2: MOV DL,ADDRESS[BX]
        MOV AH,2
        INT 21H
        INC BX
        CMP BX,67
        JL  NEXT2
        NEWLINE
        POP BX
        ENDM
;------------------------------------ 
GETIN   MACRO ADDRESS,COUNT
LOCAL   LP1,LP2,INPUT_END,EXIT
        PUSH BX
        PUSH AX
        MOV BX,0
LP1: MOV ADDRESS[BX],' '
        INC BX
        CMP BX,COUNT
        JL  LP1
        MOV BX,0
LP2:    MOV AH,1
        INT 21H
        CMP AL,0AH
        JZ  INPUT_END
        CMP AL,0DH
        JZ  INPUT_END
        MOV ADDRESS[BX],AL
        INC BX
        CMP BX,COUNT
        JL LP2
INPUT_END: CMP AL,0DH
        JZ  EXIT
        CMP AL,0AH
        JZ  EXIT
        MOV AH,7
        INT 21H
        JMP INPUT_END
EXIT:   POP AX
        POP BX
        ENDM
;------------------------------------ 
CODE    SEGMENT                                   ;CODE
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 BOOK0
      NEWLINE
      SHOW BOOK1
      SHOW BOOK11
      NEWLINE        
      SHOW BOOK2
      SHOW BOOK3
      SHOW BOOK4
      SHOW BOOK5
      SHOW BOOK6
      SHOW BOOK7
      NEWLINE
      SHOW BOOK8
      LIGHT_M3
;------------------------------------ 
W:    MOV AH,7  
      INT 21H
      CMP AL,'I'
      JNZ N1
      CALL INSERT
      JMP  W
N1:   CMP AL,'D'
      JNZ  N2
      CALL DELETE
      JMP  W
N2:   CMP AL,'Q'
      JNZ  N3
      CALL QUERY
      JMP  W
N3:   CMP  AL,'L'
      JNZ  N4
      CALL LIST
      JMP  W
N4:   CMP AL,'E'
      JZ  EXITF
      JMP  W
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
       LIGHT_M1 5
       CALL GET_REC
       MOV CX,0
       MOV DX,0
       MOV AL,2
       MOV AH,42H
       INT 21H
FLOC:  CMP AX,0
       JZ TRAN
       SUB AX,67
       MOV CX,DX
       MOV DX,AX
       MOV AL,0
       MOV AH,42H
       INT 21H
       PUSH AX
       PUSH DX
       MOV DX,OFFSET BUF2
       MOV CX,67
       MOV AH,3FH
       INT 21H
       MOV CX,2
       MOV SI,0
       JMP CONT
TRAN:  MOV CX,DX
       MOV DX,AX
       MOV AL,0
       MOV AH,42H
       INT 21H
       JMP LP67
CONT:  MOV AL,BUF2[SI]
       CMP BUF1[SI],AL
       JA LP67
       CMP BUF1[SI],AL
       JB NEXT
       INC SI
       LOOP CONT
       JMP ERROR
NEXT:  MOV DX,OFFSET BUF2
       MOV CX,67
       MOV AH,40H
       INT 21H
       POP DX
       POP AX
       JMP FLOC
ERROR: MOV DX,OFFSET WRONG
       MOV AH,9H
       INT 21H
       JMP OVER
LP67:  MOV DX,OFFSET BUF1
       MOV CX,67
       MOV AH,40H
       INT 21H
OVER:  MOV AH,3EH
       INT 21H
       POP DX
       POP CX
       POP BX
       POP AX
       RET
INSERT ENDP

;------------------------------------ 
GET_REC PROC NEAR
       PUSH AX
       PUSH BX
       MOV BX,0
       GETIN BUF2,2
       MOV AL,BUF2
       MOV BUF1[BX],AL
       INC BX
       MOV AL,BUF2+1
       MOV BUF1[BX],AL
       INC BX
       LIGHT_M1 6
       GETIN BUF2,15
       MOV  CX,15
       MOV SI,0
LP11:  MOV AL,BUF2[SI]
       MOV BUF1[BX],AL
       INC BX
       INC SI
       LOOP  LP11
       LIGHT_M1 7
       GETIN BUF2,50
       MOV  CX,50
       MOV SI,0
LP12:  MOV AL,BUF2[SI]
       MOV BUF1[BX],AL
       INC BX
       INC SI
       LOOP  LP12
       POP BX
       POP AX
       RET
GET_REC ENDP
;------------------------------------ 
QUERY  PROC NEAR        
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       CLEAR1
       CLEAR2
       MOV DX,OFFSET FNAME
       MOV AL,2
       MOV AH,3DH
       INT 21H
       MOV BX,AX
       LIGHT_M2
       GETIN BUF1,2
       NEWLINE
       LEA DX,BOOK10
       MOV AH,9
       INT 21H
       NEWLINE
       LEA DX,BOOK9
       MOV AH,9
       INT 21H
LP3:   MOV AH,3FH
       MOV CX,67
       MOV DX,OFFSET BUF2
       INT 21H
       LEA SI,BUF2
       LEA DI,BUF1
       MOV CX,2
LP4:   MOV AL,BYTE PTR[SI]
       CMP AL,BYTE PTR[DI]
       JNZ LP3
       INC SI
       INC DI
       LOOP LP4
       MOV [BUF2+67],'$'
       SHOW_ITEM BUF2
       MOV AH,3EH
       INT 21H
       POP DX
       POP CX
       POP BX
       POP AX
       RET
QUERY  ENDP
;------------------------------------ 
DELETE PROC NEAR    
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       CLEAR1
       LIGHT_M1 5
       MOV DX,OFFSET FNAME
       MOV AL,2
       MOV AH,3DH
       INT 21H
       MOV BX,AX
       MOV ZERO,AX
       GETIN BUF1,2         
LP5:   MOV DX,OFFSET BUF2
       MOV CX,67
       MOV AH,3FH
       INT 21H
       LEA SI,BUF2
       LEA DI,BUF1
       MOV CX,2
LP6:   MOV DL,BYTE PTR[SI]
       CMP DL,BYTE PTR[DI]
       JNZ LP5
       INC SI
       INC DI
       LOOP LP6
       MOV BX,ZERO
       MOV AH,42H
       MOV AL,1
       MOV CX,0FFFFH
       MOV DX,-65
       INT 21H
       MOV CX,65
       MOV DX,OFFSET DELET
       MOV AH,40H
       INT 21H
       MOV AH,3EH
       INT 21H
       JMP EXIT6
EXIT5: LIGHT_M2
       SHOW WRONG
EXIT6: LIGHT_M3
       POP DX
       POP CX
       POP BX
       POP AX
       RET
DELETE ENDP
;------------------------------------ 
LIST   PROC   NEAR    
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       CLEAR1
       CLEAR2
       LIGHT_M2
       SHOW BOOK9
       MOV DX,OFFSET FNAME
       MOV AL,2
       MOV AH,3DH
       INT 21H
       MOV BX,AX
AGAIN: MOV DX,OFFSET BUF1
       MOV CX,67
       MOV AH,3FH
       INT 21H
       CMP AX,0
       JZ P
       SHOW_ITEM BUF1
       JMP AGAIN
P:     MOV AH,3EH
       INT 21H
       LIGHT_M3
       POP DX
       POP CX
       POP BX
       POP AX
       RET
LIST   ENDP
;------------------------------------ 
CODE   ENDS      
       END START

⌨️ 快捷键说明

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