📄 test1.asm
字号:
DATA SEGMENT
INTFLAG DB 0
COUNT DB 18
SECOND DB 9
MINUTE DB 0
HOUR DB 0
OLD_SEG DW ?
OLD_OFF DW ?
OLD_MSK DB ?
SECON DB 09H
DATA ENDS
STACK SEGMENT STACK
DW 200 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,35H
MOV AL,08H
INT 21H
MOV OLD_OFF,BX
MOV OLD_SEG,ES
IN AL,21H
MOV OLD_MSK,AL
CLI
PUSH DS
MOV AH,25H
MOV AL,08H
MOV DX,SEG INTERRUPT
MOV DS,DX
MOV DX,OFFSET INTERRUPT
INT 21H
POP DS
MOV AL,OLD_MSK
AND AL,11111110B
STI
MAINLOOP:
MOV AH,0BH ;test keyboard
INT 21H
CMP AL,00H
JE CHK_INT
MOV AH,08H ;get key
INT 21H
CMP AL,1BH ;'ESC'
JNE CHK_INT
CLI
PUSH DS
PUSH ES
MOV AX,DS
MOV ES,AX
MOV AH,25H
MOV AL,08H
MOV DX,ES:OLD_SEG
MOV DS,DX
MOV DX,ES:OLD_OFF
INT 21H
POP ES
POP DS
MOV AL,OLD_MSK
OUT 21H,AL
STI
MOV AH,4CH ;exit
INT 21H
CHK_INT:
CMP INTFLAG,0
JE MAINLOOP
MOV INTFLAG,0
DEC COUNT
JNE MAINLOOP
MOV COUNT,18
MOV AL,SECOND
DEC AL
DAA
MOV SECOND,AL
CMP SECOND,00H
JA REFRESH
JMP INTERRUPT
REFRESH:
MOV AH,02H
MOV DL,0DH ;'cr'
INT 21H
MOV DH,0
MOV DL,DH
AND DL,11110000B
MOV CL,04
SHR DL,CL
OR DL,30H
MOV AH,02H
INT 21H
MOV DL,DH
AND DL,00001111B
OR DL,30H
MOV AH,02H
INT 21H
JMP MAINLOOP
INTERRUPT PROC FAR
PUSHF
PUSH AX
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV INTFLAG,1
MOV AL,20H ;EOI
OUT 20H,AL
POP DS
POP AX
POPF
IRET
INTERRUPT ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -