汇编时钟 汇编计时器_第1页
汇编时钟 汇编计时器_第2页
汇编时钟 汇编计时器_第3页
汇编时钟 汇编计时器_第4页
汇编时钟 汇编计时器_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、汇编时钟 汇编计时器  2011-11-30 17:29:03|  分类: 编程|字号 订阅data segment       m2       DB  '0'                ;分的十位   &#

2、160; m1       DB  '0'                ;分的个位              DB  ':'       

3、;         ;间隔     s2       DB  '0'                ;秒的十位     s1       DB&

4、#160; '0'                ;秒的个位               DB  ':'             

5、0;  ;间隔     ms2      DB  '0'                ;百分秒位     ms1      DB  '0'     

6、0;          ;十分秒位     ROW      DB   0                 ;行数    data endsSTACK  SEGMENT  

7、;     DW 16 DUP(0)STACK  ENDS code segment assume  cs:code,ds:data,SS:STACKstart:      call clall2              ;调用清全屏 ag:  call clear    &#

8、160;          ;调用清显示部分屏幕      call list                ;调用显示      call second         

9、;     ;调用一秒延时      MOV      AH,0BH          ;检测有键按下否?      INT      21H      CMP     

10、 AL,00H          ;AL=0,无键按下      JZ       ag              ;无键按下,转ag      MOV      AH,

11、08H          ;有键,读键值AL      INT      21H      cmp      al,'n'      jnz      end1 nao: call d

12、ingshi              ;调用定时子程序      jmp ag      end1: cmp   al,'s'       jnz  g1      call  far ptr

13、 mb       jmp  ag   g1:    cmp         al,1bh      jnz            ag   mov ah,4ch   int 21h;-日期list

14、proc near           push ax           push bx           push cx           push dx   &

15、#160;   mov ah,2ah    int 21h                  ;系统功能调用,读系统日期       push dx              &#

16、160;    ;将DX入栈       mov dl,0again1:    sub cx,03e8h           ;CX保存年,将CX-1000           js  next1      &

17、#160;       ;CX为负跳next1           inc dl                 ;否则DL+1           jmp again1 

18、;            ;跳至CX-1000next1:     add cx,03e8h           ;CX+1000送CX           add dl,30h      

19、       mov ah,02h             int 21h                ;显示DL,即CX的千位           mov dl,0&

20、#160;              ;DL清零again2:    sub cx,0064h           ;将CX-100           js  next2     

21、;      inc dl           jmp again2next2:     add cx,0064h           add dl,30h           mov ah,02h 

22、          int 21h                ;显示DL,即CX的百位           mov dl,0 again3:   sub cx,000ah    

23、0;      ;将CX-10           js  next3           inc dl           jmp again3   next3:    

24、; add cx,000ah           add dl,30h           mov ah,02h           int 21h            

25、0;   ;显示DL,即DX的十位           add cl,30h           mov dl,cl           mov ah,02h          

26、int 21h                ;显示CL的个位           mov dl,'-'           mov ah,02h       &#

27、160;   int 21h                 ;显示“-”                             

28、;  pop dx                  ;弹出DX           mov bl,dl               ;将DL送BL  

29、0;        mov dl,0                ;将DL清零again4:    sub dh,000ah            ;DH存月,将DH-10     

30、60;     js  next4           inc dl           jmp again4   next4:      add dh,000ah         

31、;               add dl,30h            mov ah,02h            int 21h         

32、;       ;显示DH的十位,即月的十位            add dh,30h            mov dl,dh            mov ah,02h   

33、         int 21h                  ;显示DH的个位            mov dl,'-'        

34、    mov ah,02h            int 21h            mov dl,0again5:     sub bl,000ah             ;DL存天

35、            js  next5            inc dl            jmp again5   next5:      add bl,000ah&#

36、160;           add dl,30h            mov ah,02h            int 21h            &#

37、160; add bl,30h            mov dl,bl            mov ah,02h            int 21h         

38、0;  mov dl,' '            ;显示空格            mov ah,02h            int 21h;-时间       

39、0;          mov ah,2ch      ;系统功能调用,读系统时间                  int 21h             &

40、#160;    push dx                  mov dl,0a1:        sub ch,000ah           ;CH存小时     

41、60;     js  n1           inc dl           jmp a1   n1:        add ch,000ah        

42、60;             add dl,30h           mov ah,02h           int 21h            

43、60;          add ch,30h           mov dl,ch                           

44、    mov ah,02h           int 21h                                mov dl,':

45、9;           mov ah,02h           int 21h                 ;显示“:”         &#

46、160; mov dl,0a2:       sub cl,000ah             ;CL存分钟          js  n2          inc dl     

47、;     jmp a2   n2:       add cl,000ah                    add dl,30h           mov ah,02h&#

48、160;          int 21h                      add cl,30h           mov dl,cl    

49、60;      mov ah,02h           int 21h           mov dl,':'            ;显示“:”      

50、     mov ah,02h           int 21h                      pop dx           mov

51、 dl,0           a3:       sub dh,000ah           ;DH存秒            js  n3     

52、60;      inc dl           jmp a3   n3:        add dh,000ah           add dl,30h       

53、0;   mov ah,02h           int 21h             add dh,30h           mov dl,dh         

54、  mov ah,02h           int 21h          pop dx                   pop cx      

55、60;             pop bx                   pop ax            retlist endp  -定时程序di

56、ngshi proc near       push ax       push bx       push cx       push dx    call clear             &#

57、160; ;调用清显示部分屏幕    mov dl, 'i'        mov ah,02h        int 21h     mov dl, 'n'     mov ah,02h     int 21h mov ax,data mov dx,ax&

58、#160; mov ah,01h int 21h    sub al,30h mov bh,al mov ah,01h int 21h    sub al,30h mov bl,al mov dl,':' mov ah,02h int 21h mov ah,01h int 21h     sub al,30h mov dh,al mov ah,01h&

59、#160;int 21h    sub al,30h mov dl,al                              ;存输入数据,BHBL:DHDL push dx -小时的十位的判断shi10:   &

60、#160;       mov ah,2ch             int 21h                mov dl,0dao1:          sub ch,0a

61、h               js  dao2               inc dl               jmp dao1dao2:  

62、                                      cmp bh,dl           &#

63、160;                ;判断小时的十位           jnz shi10;-小时的个位的判断  shi:            mov ah,2ch    

64、        int 21h               mov dl,0 dao3:         sub ch,0ah               js

65、  dao4                               jmp dao3 dao4:       add ch,0ah       

66、     cmp ch,bl                              ;判断小时的个位            jnz shi 

67、60;          -分钟的十位的判断                    fen10:  mov ah,2ch    int 21h          

68、;            mov dl,0dao5:    sub cl,0ah        js  dao6        inc dl           jmp dao5  

69、0;dao6:   mov bl,dl                             ;将DL中的分的十位送BL              pop dx

70、0;                                 ;将输入的DH,DL弹出        cmp bl,dh       

71、;                      ;判断分的十位        push dx        jnz fen10;-分钟的个位判断      fen:  &#

72、160;         mov ah,2ch            int 21h                mov dl,0dao7:          

73、; sub cl,0ah                js  dao8                              

74、0;    jmp dao7   dao8:       add cl,0ah            pop dx            cmp cl,dl        

75、0;                     ;判断分的个位            push dx            jnz fenpop dxmov dl,'s

76、9;mov ah,02hint 21hmov dl,'t'mov ah,02hint 21hmov dl,'o'mov ah,02hint 21hmov dl,'p'mov ah,02hint 21h                  ;定时结束,显示STOPpop dxpop cxpop bxpop axret   dingshi endp

77、0;      -  SECOND   PROC  NEAR            ;1秒延时子程序                  PUSH  AX     

78、;             PUSH  BX                  PUSH  DX            MOV   AH,00H &#

79、160;          INT     1AH          ;读计时单位                    ADD    DX,1 &#

80、160;                   MOV    BX,DX    L1:     MOV    AH,00H            INT  

81、60;  1AH            CMP    DX,BX          ;满1秒?,否,继续累计            JNZ     L1     

82、;               POP    DX                    POP    BX        

83、60;           POP    AX               RET  SECOND    ENDP;-clear  proc near   ;save registers      

84、push ax       push bx       push cx       push dx       clear  screen     ;定窗口显示时钟           &#

85、160;      mov ah,7    ;to scroll downward function       mov al,0    ;code to blank scree       mov bh,70h    ;reverse video attribute      

86、 mov ch,0    ;upper left row       mov cl,0    ;upper left column       mov dh,0  ;lower right row       mov dl,20  ;lower left column      

87、 int 10h     ;call video ROM   ;定位       mov ch,0       mov cl,24       mov ah,01h       int 10h       mov dh,0 

88、60;     mov dl,0       mov bh,0       mov ah,02h       int 10h   ;locate cursor       mov dx,0         &#

89、160; mov ah,2    ;to locate column       int 10h     ;call video BIOS  ;restore registers       pop dx       pop cx       pop bx  

90、     pop ax       retclear endp;-clall2 proc near      push ax      push bx      push cx      push dx       mov ah,6

91、0;   ;to scroll up screen      mov al,0    ;blank screen      mov bh,7    ;blank line      mov ch,0    ;upper left row      mov cl,0  &

92、#160; ;upper left column      mov dh,24   ;lower right row      mov dl,79  ;lower left column      int 10h     ;call video BIOS      pop dx    &#

93、160;  pop cx       pop bx       pop ax       retclall2 endp;-mb  PROC far       push ax       push bx       pu

94、sh cx       push dx          MOV       AH,0              ;检测键盘,有键按下才开始        INT  &#

95、160;    16H        ;设置中断向量        CLI                         ;清中断标志    

96、60;   CLD                         ;清方向标志        MOV       AX,0000H      

97、60;   ;设置中断向量        MOV       DS,AX        MOV       SI,0020H                &#

98、160; LODSW        MOV       BX,AX        LODSW        PUSH      AX            &#

99、160;   ;        PUSH      BX                ;        MOV       AX,DATA   &#

100、160;       ;        MOV       DS,AX        MOV       AX,0000H          ;    

101、;    MOV       ES,AX             ;        MOV       DI,0020H          ;  &#

102、160;     MOV       AX,OFFSET TIMER   ;        STOSW        MOV       AX,SEG TIMER      ;    

103、60;   STOSW        ;初始化8253                       MOV       AL,00110110B      ;0计数器,工作方式3,

104、先写最底有效字节,再写最高有效字节        OUT       43H,AL        MOV       AX,10923          ;设初值        O

105、UT       40H,AL        MOV       AL,AH        OUT       40H,AL        IN     

106、60;  AL,21H        PUSH      AX        MOV       AL,0FCH           ;中断屏蔽,只对键盘irq1和电子时钟基准irq0开中断    &

107、#160;   OUT       21H,AL        STI        call      clearall          ;清全屏       

108、60;      FOREVER:        call      clear1             ;定位清屏        call      show 

109、60;            ;显示秒表              MOV      AH,0BH              ;检测有键按下否?   

110、    INT      21H       CMP      AL,00H              ;AL=0,无键按下       JZ       FO

111、REVER             ;无键按下,转LOP        MOV      AH,08H              ;有键,读键值AL       INT&

112、#160;     21H               CMP       AL,'d'        JZ        EXIT      

113、        ;是d则退出                       cmp       al,'m'          

114、0; ;是m则记录数据        jnz       g        MOV       AH,2        MOV       BH,0     &

115、#160;  MOV       DH,row        MOV       DL,25        INT       10H          call 

116、60;    show        inc       row              g:  cmp       al,'r'       

117、0;    ;是r则重新开始计时        jnz       FOREVER        mov       m2,'0'            ;归零  

118、      mov       m1,'0'        mov       s2,'0'        mov       s1,'0'   

119、60;    mov       ms2,'0'        mov       ms1,'0'        mov       row,0      &

120、#160; call      clearall             JMP       FOREVER           ;显示秒表EXIT:          

121、 pop dx        pop cx        pop bx        pop ax        ret mb ENDP;-show    proc near         push

122、      ax         push      bx         push      cx                

123、;            MOV       BX,OFFSET m2  ;读m2首地址        MOV       CX,8           ;循环8次DISP1: 

124、MOV       AL,BX        ;取bx对应的m2值        CALL      DISPCHR        ;显示bx        INC    

125、;   BX             ;指向下一存储单元         LOOP      DISP1                   

126、;      MOV       AL,0DH         ;回车        CALL      DISPCHR              &

127、#160; pop       cx        pop       bx        pop       ax        retshow    endp;-clear1&

128、#160; proc near       push ax       push bx       push cx       push dx   clear  screen     ;定宽       

129、60;          mov ah,7    ;to scroll up screen       mov al,0    ;blank screen       mov bh,70h    ;blank line       mov

130、ch,1    ;upper left row       mov cl,0    ;upper left column       mov dh,0  ;lower right row       mov dl,7  ;lower left column       int 1

131、0h     ;call video BIOS   ;din wei       mov ch,0       mov cl,24             mov dh,row       mov dl,0   

132、;    mov bh,0       mov ah,02h       int 10h   ;locate cursor       mov dx,0           mov ah,2    ;to locate column

133、0;      int 10h     ;call video BIOS         pop dx       pop cx       pop bx       pop ax      

134、; retclear1 endp;-clearall proc near       push ax       push bx       push cx       push dx       mov ah,6    ;to scroll up screen

135、0;     mov al,0    ;blank screen      mov bh,7    ;blank line      mov ch,0    ;upper left row      mov cl,0    ;upper left column      mov dh,24   ;lower right row     

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论