📄 时钟.txt
字号:
;本程序用于动态显示系统时间~~按右SHIFT结束本程序~~
DATA SEGMENT
STR DB 'Press right shift key to finish program!$'
HH DB ?
MM DB ?
SE1 DB ?
SE2 DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;**************自己的1CH中断服务程序******************
NEWINT1CH PROC FAR ;新的伪时钟中断程序
;把光标位置置中
MOV BH,0
MOV DH,10
MOV DL,35
MOV AH,2
INT 10H
;读系统时间
MOV AH,2CH
INT 21H ;注意:得到的都是十六进制数
MOV HH,CH ;时
MOV MM,CL ;分
MOV SE1,DH ;秒
MOV SE2,DL ;十分之一秒
;调用输出时间的子程序
CALL PRINT
;跳转到旧的int 1cH入口
DB 0EAH
OLDOFF DW ?
OLDSEG DW ?
NEWINT1CH ENDP
START:
MOV AX,DATA
MOV DS,AX
;************************
;先清屏幕
MOV AX,0003H
INT 10H
;先在左上角输出一行字母
MOV BH,0
MOV DH,0
MOV DL,0
MOV AH,2
INT 10H
MOV DX,OFFSET STR
MOV AH,9
INT 21H
;****************************
;取得旧的int 1cH的向量
MOV AX,351CH
INT 21H
;保存旧的int 1cH的向量,以便到时候能返回
MOV OLDOFF,BX
MOV OLDSEG,ES
;设置新的int 1ch向量
MOV AX,SEG NEWINT1CH
MOV DS,AX
MOV DX,OFFSET NEWINT1CH
MOV AX,251CH
INT 21H
;程序循环判断是否键盘输入右SHIFT键,有则退出程序,否则继续判断。
AG: MOV AL,0 ;置零
MOV AH,2 ;使用INT 16H(BIOS中断)的2号功能键盘搜索是否按下右shift键
INT 16H
SHR AL,1 ;读取KBFLAG
MOV AX,0
ADC AX,0
CMP AL,1 ;判断是否按下右shift键
JZ EXIT
JMP AG
;退出程序前恢复系统原来的int 1ch的向量
EXIT:MOV DX,OLDOFF
MOV DS,OLDSEG
MOV AX,251CH
INT 21H
MOV AH,4CH
INT 21H
;子程序:做输出前处理
PRINT PROC
MOV DI,OFFSET HH
MOV CX,4
LOP:MOV AL,[DI]
MOV AH,0
MOV DL,10
DIV DL
ADD AL,30H
MOV BL,AH
ADD BL,30H
CALL DISP
;做这个比较操作,是防止输出最后一个冒号
CMP CX,1
JZ NEXT
CALL MAOHAO
NEXT:INC DI
LOOP LOP
RET
PRINT ENDP
;输出
DISP PROC
MOV DL,AL
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
RET
DISP ENDP
;只输出':'
MAOHAO PROC
MOV DL,':'
MOV AH,02H
INT 21H
RET
MAOHAO ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -