| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 626 人关注过本帖
标题:高手帮忙改个程序
只看楼主 加入收藏
seven798
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-6-22
收藏
 问题点数:0 回复次数:0 
高手帮忙改个程序
这个程序是显示系统时间的,再给我加上点,实现按某个键隐藏系统时间,然后再按键显示时间;或者是实现自动循环的显示和隐藏!谢谢了啊!
DATA    SEGMENT                                            ;代码段
     BUF1  DB '                NOW  TIME  OF  THE  SYSTEM  IS :$'
              
DATA          ENDS
              CODE SEGMENT              
              
              
        ASSUME CS:code,DS:code
START:
        MOV       AX,DATA
        MOV       DS,AX
        LEA       DX, BUF1
        MOV       AH,09H
        INT       21H
        JMP       GO
        OLDCUR    DW      ?
        OLD1C     DW      2  DUP(?)

NEWINT1C:
        PUSHF                                               ;标志进栈
        CALL DWORD PTR CS:OLD1C                             ;调用子程序OLD1C      
        PUSH    AX                                          ;保护现场
        PUSH    BX
        PUSH    CX
        PUSH    DX                     
        XOR     BH,BH                                       ;异或,清零
        MOV     AH,3                                        ;读取光标位置
        INT     10H                              
        MOV     CS:OLDCUR,DX
        MOV     AH,2                                        ;2号功能调用,置光标位置
        XOR     BH,BH
        MOV     DX,45h
        INT     10H
        MOV     AH,2                                        ;读取系统时钟  出口参数分别CH:CL:DH   
        INT     1AH            
        PUSH    DX              
        PUSH    CX
        POP     BX
        PUSH    BX
        CALL    SHOWBYTE                                    ;调用 SHOWBYTE,显示小时  (转换成ASCII码输出)
        CALL    SHOWCOLON                                   ;调用 SHOWCOLON  显示:
        POP     BX         
        XCHG    BH,BL                                       ;数据交换
        CALL    SHOWBYTE                                    ;显示分钟  (转换成ASCII码输出)
        CALL    SHOWCOLON                                   ;调用显示子程序  
        POP     BX
        CALL    SHOWBYTE                                    ;显示秒
        MOV     DX,CS:OLDCUR                                ;保存原来光标位置
        MOV     AH,2                                        ;恢复原光标位置
        XOR     BH,BH
        INT     10H
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        IRET
;==================================显示小时子程序              
SHOWBYTE PROC NEAR
        PUSH    BX
        MOV     CL,4     
        MOV     AL,BH
        SHR     AL,CL                                        ;BX 进栈,高4位放cl中,AL 右移4位
        ADD     AL,30H                                       ;转换成 ASCII码
        CALL    SHOW                                         ;调用显示子程序SHOW
        CALL    CURMOVE                                      ;调用CURMOVE  (光标后移一个位置)
        POP     BX
        MOV     AL,BH
        AND     AL,0FH                                       ;与,屏蔽高4位,显示低4位
        ADD     AL,30H                                       ;数值转换成ASCII码
        CALL    SHOW                                         ;调用显示子程序  
        CALL    CURMOVE                                      ;调用光标后移子程序
        RET
SHOWBYTE ENDP
              
 ;==================================(:显示子程序)
SHOWCOLON PROC NEAR                                          
        MOV     AL,':'                                       ;放入AL中
        CALL    SHOW
        CALL    CURMOVE
        RET
SHOWCOLON ENDP
              
;===================================光标后移子程序
CURMOVE PROC NEAR                                            ;光标后移一个位置
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        MOV     AH,3                                         ;INT10 3号功能调用读光标位置
        MOV     BH,0                                         ;设置显示方式
        INT     10H
        INC     DL                                           ;加1指令
        MOV     AH,2                                         ;置光标位置
        INT     10H
        POP     DX                                           ;恢复现场
        POP     CX
        POP     BX
        POP     AX     
        RET                                                  ;返回
CURMOVE ENDP

SHOW    PROC NEAR                                            ;显示子程序
        PUSH    AX
        PUSH    BX
        PUSH    CX
        MOV     AH,09H                                       ;显示字符串
        MOV     BX,2fh                                       ;INT10 的1号功能调用,显示光标类型字符颜色属性
        MOV     CX,1
        INT     10H
        POP     CX
        POP     BX
        POP     AX
        RET                                                  ;中断返回
SHOW    ENDP


GO:
        PUSH    CS
        POP     DS
        MOV     AL,1ch                                        ;保存原中断向量
        MOV     AH,35H                                        ;读取中断向量,出口参数BX
        INT     21H                                           ;段地址放 ES,偏移地址放BX
        MOV     OLD1C,BX                                      ;保存偏移地址
        MOV     BX,ES                                         ;保存段地址
        MOV     OLD1C+2,BX
        MOV     DX,OFFSET NEWINT1C                            ;设置新的中断向量
        MOV     AH,25H                                        ;ds:dx   al=中断类型号
        MOV     AL,1ch
        INT     21H
        MOV     DX,OFFSET GO                                  ;定义GO的偏移地址
        SUB     DX,OFFSET START
        MOV     AH,07h                                        ;键盘接收字符,07号调用无回显
        INT     21h
        CMP     AL,0dh                                        ;与输入回车比较,相等跳转至clear(清屏)
        JE      clear
        MOV     AX,3100h                                      ;结束并驻留
        INT     21H   
 clear:
        MOV     AH,0fh                                        ;取当前显示方式
        INT     10h
        MOV     AH,00h                                        ;设置显示方式
        INT     10h
        MOV      AH,4ch                                       ;返回DOS,结束程序
        INT      21h
        
CODE ENDS
        END START
2008-06-22 21:00
快速回复:高手帮忙改个程序
数据加载中...
 
   



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

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