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

📄 truetime.asm

📁 关于汇编语言的,主要是实现时间显示的,动态显示的
💻 ASM
字号:
STASG   SEGMENT                                                         ;堆栈的初始化
        DB  128 DUP(?)
STASG   ENDS
DATA    SEGMENT                                                         ;数据的定义
PRIN    DB '****************************************************'
        DB 0DH,0AH,0DH,0AH,0DH,0AH
        DB '                WELCOME TO USE THE SYSTEM'
        DB 0DH,0AH,0DH,0AH
        DB '                YOU CAN READ THE TIME '
        DB 0DH,0AH,0DH,0AH,0DH,0AH
        DB 'NOW THE TIME IS:  ',0DH,0AH,0DH,0AH
        DB 'NOW THE DAY IS :  ',0DH,0AH,0DH,0AH,0DH,0AH
        DB '                  THANKS TO USE THE SYSTEM!!!',0DH,0AH,0DH,0AH
        DB '****************************************************'
        DB 0DH,0AH,0DH,0AH,'$'
DAY1    DB 'MONDAY$'
DAY2    DB 'TESURDAY$'
DAY3    DB 'WEDNESDAY$'
DAY4    DB 'THIRSDAY$'
DAY5    DB 'FIRDAY$'
DAY6    DB 'SATURDAY$'
DAY0    DB 'SUNDAY$'
        
DATA    ENDS


CODE    SEGMENT                                                          ;主函数
        ASSUME  CS:CODE,DS:DATA
MAIN    PROC  FAR
        PUSH  DS
        XOR AX,AX
        PUSH AX
        MOV AX,DATA
        MOV DS,AX
        CALL CLRSCRN
        MOV AH,9
        LEA DX,PRIN
        INT 21H
        JMP READDAY

         
CLRSCRN   PROC                                                           ;清屏函数
          MOV AH,6
          MOV AL,0
          MOV BH,1FH
          MOV CX,0
          MOV DX,184FH
          INT 10H
          RET
CLRSCRN   ENDP 



READDAY: MOV   AH,2
         MOV   BH,0
         MOV   DH,10
         MOV   DL,20
         INT 10H                                                           ;读取显示星期几的地址:为第10行第20列       
         MOV AH,2AH                                                         ;读取星期几
         INT 21H
         CMP AL,0
         JZ SUN
         CMP AL,1
         JZ MON
         CMP AL,2
         JZ TUS
         CMP AL,3
         JZ WED
         CMP AL,4
         JZ THIR
         CMP AL,5
         JZ FIR
         CMP AL,6
         JZ SAT
SUN:     LEA DX,DAY0
         MOV AH,9
         INT 21H
         JMP  READ
MON:     LEA DX,DAY1
         MOV AH,9
         INT 21H
         JMP  READ
TUS:     LEA DX,DAY2
         MOV AH,9
         INT 21H
         JMP READ
WED:     LEA DX,DAY3
         MOV AH,9
         INT 21H
         JMP READ
THIR:    LEA DX,DAY4
         MOV AH,9
         INT 21H
         JMP  READ
FIR:     LEA DX,DAY5
         MOV AH,9
         INT 21H
         JMP  READ
SAT:     LEA DX,DAY6
         MOV AH,9
         INT 21H
         

READ:                                                                    ;开始读取时间
       MOV   BX,0B800H   
       MOV   ES,BX   
       MOV   DI,160*8+2*20                                                ;读取显示时间的地址:为第8行第20列
       PUSH   DI                             
       MOV   AL,10                                                        ;数据AL的初始化  
 
  
READDATE:                                                                 ;读取日期   
       DEC   AL                                                   
       CMP   AL,7   
       JB   READTIME                                                      ;当读完‘日’后,就跳至标号READTIME处 
       CALL  PRINT   
       ADD   DI,6   
       JMP   SHORT   READDATE   
 
   
READTIME:                                                                 ;读取时间   
       SUB   AL,2                                   
       CMP   AL,0FEH                                                      
       JE   SIGN                                                          ;当读完‘秒’后,就跳至标号SIGN处 
       CALL  PRINT   
       ADD   DI,6   
       JMP   SHORT   READTIME   
   
 
SIGN:                                                                     ;显示格式   
       POP   DI   
       ADD   DI,4                                                         
       MOV   BYTE   PTR   ES:[DI],'/'   
       ADD   DI,6   
       MOV   BYTE   PTR   ES:[DI],'/'   
       ADD   DI,12                
       MOV   BYTE   PTR   ES:[DI],':'   
       ADD   DI,6   
       MOV   BYTE   PTR   ES:[DI],':' 
       MOV AH,1
       INT 21H   
       CMP AL,10H                                                       ;当从键盘输入大小写的字母Q时就表示退出 
       JE QUIT         
       JMP   READ                                                       ;继续读取时间     

 
QUIT:                                                                   ;退出  
       MOV   AX,4C00H   
       INT   21H   
 
   
PRINT   PROC                                                             ;显示时间
       PUSH   AX   
       PUSH   CX    
       OUT   70H,AL   
       IN   AL,71H     
       MOV   AH,AL   
       MOV   CL,4   
       SHR   AH,CL   
       AND   AL,00001111B      
       ADD   AH,30H   
       ADD   AL,30H       
       MOV   BYTE   PTR   ES:[DI],AH   
       MOV   BYTE   PTR   ES:[DI+2],AL  
       POP   CX   
       POP   AX   
       RET
PRINT  ENDP

       
EXIT:  MOV AX,4C00H                                                          ;结束
       INT 21H   
MAIN   ENDP
CODE   ENDS   
       END   MAIN

⌨️ 快捷键说明

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