| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一行开 ...
取消只看楼主 加入收藏
xal319
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:0 
一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一行开始计时
以下(8086汇编)代码实现了从0到59的计时并显示
    INTNO EQU 1CH
    USEINT = 1

    DATA SEGMENT
      OLDISR DW ?,?
      TIMER DB 100
      COUNTER DW 0
      ISDONE DB 0
    DATA ENDS
   
    CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
      
      MOV AX,0
      MOV ES,AX
      
      ;PROTECT
    IF USEINT
      MOV AL, INTNO
      MOV AH,35H
      INT 21H
      ;ES:BX
      MOV OLDISR[0], BX
      MOV AX,ES
      MOV OLDISR[2], AX
    ELSE  
      CLI
      MOV AX, ES:[INTNO*4]
      MOV OLDISR[0],AX
      MOV AX,ES:[INTNO*4+2]
      MOV OLDISR[2], AX
      STI
    ENDIF
   
      ;SET NEW ISR
    IF USEINT
      PUSH DS
      MOV AX, SEG ISR
      MOV DS,AX
      MOV DX, OFFSET ISR
      MOV AL, INTNO
      MOV AH, 25H
      INT 21H
      POP DS
    ELSE  
      CLI
      MOV WORD PTR ES:[INTNO*4], OFFSET ISR
      MOV WORD PTR ES:[INTNO*4+2],SEG ISR
      STI
    ENDIF

    ;WAIT HERE
WAITHERE:
        CMP     ISDONE,1
        JNZ     WAITHERE
  
  
EXIT:     
    ;RESTORE
   IF USEINT
      PUSH DS
      MOV DX,OLDISR[0]
      MOV AX,OLDISR[2]
      MOV DS,AX
      MOV AL, INTNO
      MOV AH, 25H
      INT 21H
      POP DS
    ELSE  
      CLI
      MOV AX,OLDISR[0]
      MOV ES:[INTNO*4],AX
      MOV AX,OLDISR[2]
      MOV ES:[INTNO*4+2],AX
      STI
    ENDIF
        
      MOV AX,4C00H
      INT 21H
      
ISR PROC FAR
        PUSH DX
        PUSH AX
        
        MOV AX,DATA
        MOV DS,AX

        STI               ;便于中断嵌套

       ;COUNT HERE
        INC TIMER
AGAIN:
        CMP TIMER, 1000/55  ;18
        JB DONE
        MOV TIMER,0


        ;carriage
        MOV AH,2
        MOV DL,13
        INT 21H

        ;print time
        MOV AX,COUNTER

        MOV DL,10
        DIV DL
        MOV DH,AH
        MOV DL,AL
        MOV AH,2
        ADD DL,30H
        INT 21H
        MOV DL,DH
        ADD DL,30H
        INT 21H
      
        inc COUNTER
    cmp    COUNTER,59
        jbe    DONE
        MOV ISDONE,1
    jmp    DONE

DONE:
        PUSHF
        CALL DWORD PTR OLDISR

        CLI
        POP AX
        POP DX
        IRET             ;中断返回
ISR ENDP


CODE ENDS
      END START
如何修改,使得——若键入a,则保留旧时间,重新另起一行开始计时
用21h的0B功能
搜索更多相关主题的帖子: 定时器 如何 
2011-11-13 12:01
快速回复:一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030377 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved