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

📄 date and time.asm

📁 部分具体运作功能: 清屏 设置光标 取得日期 取得时间 转换并显示日期设置光标(下一行) 转换并显示日期 设置光标(下一行) 处理并显示星期取日期
💻 ASM
字号:
TITLE         SHOW THE DATE AND TIME
PAGE         60,132
;-----------------------------------------------------------------
CLEAR       MACRO                                           ;清屏
                   MOV AX,0600H
                   MOV BH ,07
                   MOV CX,0
                   MOV DX,184FH
                   INT 10H
                   ENDM
;--------------------------------------------------------------------
CURSOR    MACRO COL,ROW                         ;设置光标
                   MOV AH,02
                   MOV BH,00
                   MOV DL,COL
                   MOV DH,ROW
                   INT 10H
                   ENDM
;--------------------------------------------------------------------
DISPLAY     MACRO ADDRESS                         ;显示
                   MOV AH,09
                   LEA DX,ADDRESS
                   INT 21H
                   ENDM
;--------------------------------------------------------------------                 
                  .MODEL SMALL
                  .STACK 64
 ;--------------------------------------------------------------------
                  .DATA
MESSAGE1 DB 'TODAY IS $'
MESSAGE2 DB 'NOW THE TIME IS $'
MESSAGE3 DB 'BY THE WAY,TODAY IS $'
DATE16       DB 7 DUP(0)        ;存放十六进制信息,填充0是为了方便作串处理
TIME16        DB 4 DUP(?)        ;存放十六进制信息
DATE10       DB 16 DUP(?)      ;存放转换后十进制信息
TIME10        DB 16 DUP(?)      ;存放转换后十进制信息
WEEK       DB 'Sunday   $Monday   $Tuesday  $Wednesday$Thursday $Friday   $Saturday $'
;--------------------------------------------------------------------                     

                  .CODE
MAIN          PROC 
                  MOV AX,@DATA
                  MOV DS,AX
                  MOV ES,AX
                  CLEAR                                 ;清屏
                  CURSOR 25,11                    ;设置光标
                  CALL GETDATE                   ;取得日期
                  CALL GETTIME                    ;取得时间
                  DISPLAY MESSAGE1
                  CALL CHADATE                   ;转换并显示日期      
                  CURSOR 25,12                    ;设置光标(下一行)
                  DISPLAY MESSAGE2
                  CALL CHATIME                     ;转换并显示日期    
                  CURSOR 25,13                     ;设置光标(下一行)
                  DISPLAY MESSAGE3
                  CALL SHOWWEEK                ;处理并显示星期
                  MOV AH,4CH
                  INT 21H
MAIN ENDP

GETDATE PROC                                      ;取日期 
                  LEA SI,DATE16                       ;十六进制数据储存位置
                  MOV AH,2AH
                  INT 21H
                  MOV [SI],CX                             ;年
                  MOV [SI+2],DH ;月,如[si+2]=0AH,此时[si+3]保持为0,方便在转换时采用LODSW操作,                                             ;这样取过来AX=000A,不影响结果,但大大简化程序
                  MOV [SI+4],DL                          ;日,同理,[si+5]保持为0
                  MOV [SI+6],AL                          ;星期
                  RET
GETDATE ENDP


GETTIME  PROC                                        ;取时间
                 LEA SI,TIME16                           ;十六进制数据储存位置
                 MOV AH,2CH
                 INT 21H
                 MOV [SI],CH                               ;时
                 MOV [SI+1],CL                           ;分
                 MOV [SI+2],DH                           ;秒
                 MOV [SI+3],DL                           ;毫秒
                 RET
GETTIME  ENDP

CHADATE PROC                                         ;日期转换
                  LEA SI,DATE16+4  ;先转换"日",转换后存放于小地址,这样可以避免对DI的调整太过混                                                   ;乱,如对原始数据 07D6(年)0A00(月)1E00(日) 会依次转化30,33,
                                                  ;30,31,36,30,30,32 只需作倒序输出,就是 2006 10 30
                  LEA DI,DATE10                         ;十进制数据储存位置
                  MOV BX,10
                  MOV CX,3
                  STD                                            ;设DF方向这上行
AGAIN1:     LODSW
BACK1:      SUB DX,DX
                  DIV   BX
                  OR   DL,30H
                  MOV [DI],DL
                  INC   DI
                  CMP AX,0
                  JA     BACK1
                  MOV [DI],AL                                 ;当"日"转换完成后,在其后紧跟着存入一个0,即空格                                                                        ;的ASCII码
                  INC    DI
                  LOOP AGAIN1                              ;循环继续进行"月"和"年"的转换
                  DEC DI                                          ;调整DI回到"年"的首位
                  DEC DI
                  LEA  SI,DATE10                            ;将十进制数据储存位置赋予SI,将其与DI相比较,实                                                                          ; 现倒序输出
LOOP1:     MOV AH,02
                  MOV DL,[DI]
                  INT    21H
                  DEC DI
                  CMP DI,SI
                  JNB   LOOP1
                  RET
CHADATE  ENDP

CHATIME   PROC                                             ;时间转换 
                  LEA SI,TIME16+3                            ;同理,先转换"微秒"
                  LEA DI,TIME10
                  MOV BX,10
                  MOV CX,4
                  STD
AGAIN2:     LODSB                                            ;现在只按字节取数就行
BACK2:      SUB AH,AH
                  DIV   BL
                  OR   AH,30H
                  MOV [DI],AH
                  INC   DI
                  CMP AL,0
                  JA     BACK2
                  MOV AL,3AH                                    ;在完成"微秒"的转换后存入3A,即":"的ASCII
                  MOV [DI],AL
                  INC    DI
                  LOOP AGAIN2                                  ;循环
                  DEC DI
                  DEC DI                                              ;同样调整DI回到"时"的首位
                  LEA SI,TIME10                                  ;同理实现倒序输出
LOOP2:     MOV AH,02
                  MOV DL,[DI]
                  INT    21H
                  DEC DI
                  CMP DI,SI
                  JNB   LOOP2
                  RET
CHATIME  ENDP

SHOWWEEK  PROC                                           ;处理星期并显示
                       MOV   AL,[DATE16+6]                 ;通过表示星期的数据来确定显示WEEK中哪个                                                                                ;位置的数据
                       MOV   BL,10
                       MUL    BL
                       MOV   AH,09
                       LEA    DX,WEEK
                       ADD    DL,AL
                       INT      21H
                       RET
SHOWWEEK   ENDP
END MAIN

⌨️ 快捷键说明

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