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

📄 myshizhong11.asm

📁 一段汇编写的动画
💻 ASM
字号:
DATA   SEGMENT
OLDOFF    DW ?
OLDSEG    DW ?
COUNT     DB 18
TENHO     DB '0'
HOUR      DB '0:'
TENMIN    DB '0'
MINUTE    DB '0:'
TENSEC    DB '0'
SECOND    DB '0',0DH,'$'
DATA      ENDS
CODE      SEGMENT
MAIN      PROC FAR
          ASSUME CS:CODE,DS:DATA
          PUSH  DS
          MOV   AX,0
          PUSH  AX
          MOV   AX,DATA
          MOV   DS,AX
          
          MOV   CX,0H                ;存系统时钟的中断服务程序入口地址
	    MOV   AX,1CH
	    mov   cl,2
	    SHL   AL,cl
	    MOV   DI,AX
	    MOV   AX,0
	    MOV   ES,AX      ;此时ES:DI是中断向量的地址 
		
	    cli            ;禁止中断
	    MOV ES:[DI],AX
	    MOV OLDOFF,AX
	    LEA AX,MYINT1C
	    MOV ES:[DI],AX
		
	    MOV AX,ES:[DI+2]
	    MOV OLDSEG,AX
	    MOV AX,CS
          MOV ES:[DI+2],AX
	    STI          ;允许中断

          ;取系统时间,并存入内存
          MOV DI,OFFSET TENHO        ;取小时     
          MOV AH,2CH
          INT 21H
          MOV AL,CH
          CBW
          MOV DL,10D
          DIV DL
          ADD AL,48
          ADD AH,48
          MOV [DI],AL
          MOV [DI+1],AH
         
          MOV AL,CL                   ;取分钟
          CBW
          MOV DL,10D
          DIV DL
          ADD AL,48
          ADD AH,48
          MOV [DI+3],AL
          MOV [DI+4],AH
         
          MOV AL,DH                   ;取秒
          CBW
          MOV DL,10D
          DIV DL
          ADD AL,48
          ADD AH,48
          MOV [DI+6],AL
          MOV [DI+7],AH
          
          MOV DI,20H               ;中断程序入口地址送中断向量表
          MOV AX,OFFSET MYINT1C
          MOV ES:[DI],AX             
          ADD  DI,2
          MOV AX,CS
          MOV ES:[DI],AX            ;MYINT1C中断程序开始执行
          
FOREVE:   MOV AH,02H                  ;置光标位置(显示器软中断服务程序)
          MOV BH,00H                ;页号
          MOV DH,0AH               ;行
          MOV DL,01H              ;列
          INT 10H
          
          MOV AH,9                   ;显示时:分:秒
          MOV DX,OFFSET TENHO  
          INT 21H
          MOV AL,SECOND              ;等待一秒钟
HERE:     CMP AL,SECOND
          JE HERE
          MOV AH,0BH            
          INT 21H                    ;AL=00有按键,AL=FF无按键
          INC AL                     ;判断是否有按键
          JNZ FOREVE                 ;若无按键则不停地显示时间
          MOV  AH,00H
          INT  16H
          CMP  AH,01H
          JNZ  FOREVE                ;判断是否是esc
                       
          MOV  AX,1CH
          mov  cl,2                 ;恢复系统时钟的中断向量表
          SHL  AX,cl
	    MOV  DI,AX
	    MOV  AX,0
	    MOV  ES,AX
		
	    CLI
	    MOV  AX,OLDOFF
	    MOV  ES:[DI],AX
	    ADD  DI,2
	    MOV  AX,OLDSEG
	    MOV  ES:[DI],AX
	    STI
MAIN      ENDP
MYINT1C   PROC FAR
          DEC COUNT               ;计数器减一
          JNZ TIMER               ;不到1秒,退出中断
          MOV COUNT,18            ;已到1秒,恢复软件计数器
          INC SECOND              ;秒加1
          CMP SECOND,'9'          ;十秒位是否增1
          JLE TIMER               ;否,退出中断
          MOV SECOND,'0'          ;秒位置0
          INC TENSEC              ;使秒位加1
          CMP TENSEC,'6'          ;是否满1分
          JL TIMER                ;否,退回中断
          MOV TENSEC,'0'          ;满,十秒为置0
          INC MINUTE              ;分加1
          CMP MINUTE,'9'
          JLE TIMER
          MOV MINUTE,'0'
          INC TENMIN
          CMP TENMIN,'6'          ;是否满1小时
          JL TIMER
          MOV TENMIN,'0'          ;满,十分位置0
          INC HOUR                
          CMP HOUR,'9'
          JA ADJHO
          CMP HOUR,'3'
          JBE TIMER
          CMP TENHO,'1'
          JBE TIMER
          MOV HOUR,'0'
          MOV TENHO,'0'
          JMP TIMER
ADJHO:    INC TENHO
          MOV HOUR,'0'
TIMER:    MOV AL,20H              ;中断结束命令
          OUT 20H,AL
          IRET
MYINT1C   ENDP
CODE      ENDS
END    MAIN

⌨️ 快捷键说明

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