CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN PROC FAR
START:
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOP
PUSH DS ;现场保护
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
;*******将原中断向量09H保存在自设的单元中******
MOV AH,0
MOV AL,4
INT 21H
MOV AH,0BH
MOV BH,0
MOV BL,4
INT 11H
MOV AH,35H ;取中断向量的功能调用
MOV AL,09H
INT 21H
MOV OLDCS9,ES
MOV OLDIP9,BX
;******设置自编处理程序的中断向量******
PUSH DS
MOV DX,SEG KBINT ;自编中断类型程序段地址放入DS
MOV DS,DX
MOV DX,OFFSET KBINT ;自编中断类型程序偏移地址放入DX
MOV AL,09H
MOV AH,25H ;设置中断向量功能调用
INT 21H
POP DS
;******将原中断向量1CH保存在自设的单元中******
MOV AH,35H
MOV AL,1CH
INT 21H
MOV SAVE_LC,BX
MOV SAVE_LC+2,ES
;******设置自编处理程序的中断向量******
PUSH DS
MOV DX,SEG CLINT
MOV DS,DX
原文请找腾讯752018766辣;文-论'文.网http://www.751com.cn INT 21H
POP DS
;******允许键盘和定时器中断******
IN AL,21H ;允许键盘和定时器中断
AND AL,11111100B
OUT 21H,AL
;******设置显示方式******
FIRST: MOV AH,0
MOV AL,3
INT 10H
;******显示提示信息******
MOV DX,OFFSET PROMPT ;显示提示信息
MOV AH,9
INT 21H
;******在屏幕上显示例句******
MOV SI,0
NEXT: MOV DX,SADDR[SI] ;显示例句
MOV AH,09H
INT 21H
;******初始化变量******
MOV COUNT,0 ;设置初值
MOV SEC,0
MOV MIN,0
MOV HOURS,0
;******允许更高一级的中断******
STI
FOREVER:
CALL KBGET
TEST KBFLAG,80H
JNZ ENDINT
PUSH AX
CALL DISPCHAR
POP AX
CMP AL,0DH
JNZ FOREVER
MOV AL,0AH
CALL DISPCHAR
;******显示时间******
CALL DISPTIME
LEA DX,CRLF
MOV AH,09H
INT 21H
;******显示例句结束否?******
ADD SI,2