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

📄 xie3.asm

📁 汇编语言实现生日程序
💻 ASM
字号:
;--------------------------------------------------
DIS MACRO STR,ROW,DDL,CCX
       MOV BP,OFFSET STR
       MOV DH,ROW
       MOV DL,DDL
       MOV CX,CCX
       MOV BX,0014H
       MOV AX,1300H
       INT 10H
      ENDM
;--------------------------------------------------
CHECK  MACRO  STR
       LOCAL  NONE
       PUSH   DX
       CMP    DH,STR
       JNZ    NONE
       CMP    DL,STR[1]
       JNZ    NONE
       DIS    STR[2],ROW,46H,10
       INC    ROW
NONE:  POP    DX
      ENDM
;---------------------------------------------------
;***************************************************
CODE SEGMENT
    ASSUME CS:CODE,DS:CODE
      COUNT_VAL  =  18
      COUNT    DW COUNT_VAL
      OLD1CH   DD ?
      ROW      DB 0
      DATE     DB 13 DUP ('/'),20 DUP (' ')
      TIME     DB 8  DUP (':'),20 DUP (' ')
      STR0     DB 'nobody',5 DUP(' ')
      STR1     DB 01,21,'chentianci'
      STR2     DB 01,27,'xiejun',  6 DUP(' ')
      STR3     DB 01,26,'xiecan', 8 DUP(' ')
      STR4     DB 01,24,'xiechao',8 DUP(' ') 
      
NEW1CH:
       CMP CS:COUNT,0        ;不可省略
       JZ  NEXT
       DEC CS:COUNT
       JMP DWORD PTR CS:OLD1CH
NEXT:
       MOV CS:COUNT,COUNT_VAL  
       STI
       PUSH DS
       PUSH ES
       PUSH AX
       PUSH BX
       PUSH CX
       PUSH DX
       PUSH SI
       PUSH BP
       PUSH CS
       POP  DS
       PUSH DS
       POP  ES
       CALL getDate
       CALL getTime
       CALL CHECK_ALL
       POP  BP
       POP  SI
       POP  DX
       POP  CX
       POP  BX
       POP  AX
       POP  ES
       POP  DS
       JMP  DWORD PTR CS:OLD1CH       ;恢复 INT 1CH
;--------------------------------------------------------
getDate PROC NEAR 
       MOV AH,2AH              ;
       INT 21H
       MOV SI,0
       PUSH AX                ;week
       MOV BX,100
       MOV AX,CX
       DIV BL
       MOV BL,AH
       CALL HEXASC                  ;
       MOV AL,BL
       CALL HEXASC  
       INC SI
       MOV AL,DH
       CALL HEXASC 
       INC SI
       MOV AL,DL
       CALL HEXASC  
       INC SI
       POP AX
       CALL HEXASC 
       DIS DATE,00H,43H,13
       RET       
getDate  ENDP
;--------------------------------------------------------
getTime PROC       
       MOV AH,02H
       INT 1AH
       MOV SI,0
       MOV AL,CH
       CALL BCDASC        ;
       INC SI
       MOV AL,CL
       CALL BCDASC
       INC SI
       MOV AL,DH
       CALL BCDASC
       DIS TIME,00H,3aH,8
       RET
getTime ENDP
;--------------------------------------------------------
CHECK_ALL PROC 
       MOV AH,2AH              ;
       INT 21H
       MOV ROW,1
       CHECK STR1
       CHECK STR2
       CHECK STR3
       CHECK STR4
       CMP ROW,1
       JNE BACK
       DIS STR0,ROW,46H,10
BACK:  RET
CHECK_ALL ENDP
;--------------------------------------------------------
HEXASC PROC                 ;
       PUSH BX
       MOV AH,0
       MOV BX,10
       DIV BL
       ADD AX,3030H
       MOV WORD PTR DATE[SI],AX
       ADD SI,2
       POP BX
       RET
HEXASC ENDP
;-------------------------------------------------------
BCDASC PROC
       MOV AH,AL
       AND AL,0FH
       SHR AH,1
       SHR AH,1
       SHR AH,1
       SHR AH,1
       ADD AX,3030H
       XCHG AH,AL
       MOV WORD PTR TIME[SI],AX
       ADD SI,2
       RET
BCDASC ENDP
;--------------------------------------------------------
MAIN  PROC FAR
START: 
       PUSH CS
       POP  DS                      
       MOV AX,351CH                    ;取 INT 1CH 的地址
       INT 21H                  ;    存入ES:BX
       MOV WORD PTR OLD1CH,BX;并保存它
       MOV WORD PTR OLD1CH+2,ES
       MOV DX,OFFSET NEW1CH
       MOV AX,251CH               ;为 INT 1CH 
       INT 21H                  ;   设置新地址为TEST

       MOV DX,OFFSET START      ;设置大小
       ADD DX,15
       MOV CL,4
       SHR DX,CL
       ADD DX,10H
   
       MOV AX,3100H               ;请求保存常驻
       INT 21H
MAIN   ENDP
;**********************************************************
CODE   ENDS
       END START

⌨️ 快捷键说明

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