高手帮忙改个程序
这个程序是显示系统时间的,再给我加上点,实现按某个键隐藏系统时间,然后再按键显示时间;或者是实现自动循环的显示和隐藏!谢谢了啊!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