?? int-1ch.asm
字號:
DATA SEGMENT
OFF_0 DW ? ;中斷向量偏移地址
SEG_0 DW ? ;中斷向量段地址
MASK_I DB ? ;系統(tǒng)原始中斷屏蔽字
TN DB '0 ' ,'s' ;延時常數(shù),已給定,1秒為18次
CONT db 0
OK DB 'How are you?$',0DH,0AH
DATA ENDS
STACK SEGMENT
DW 50 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:stack
start: MOV AX,DATA ;Initial
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,50
MOV SP,AX
;取原IR0中斷向量
MOV AX,351CH ;取原中斷向量
INT 21H
MOV SEG_0,ES ;保存原中斷向量
MOV OFF_0,BX
;設置新中斷向量
CLI
PUSH DS
MOV DX,OFFSET NEWINT
MOV AX,SEG NEWINT
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
mov DX,offset OK
MOV AH,09H
INT 21H
W1: MOV DL,TN
MOV AH,2
INT 21H
MOV AH,0BH ;有鍵按下?
int 21H
CMP AL,00H ;無鍵按下,轉(zhuǎn)W1,否則,調(diào)用1S延時子程序
JZ W1
MOV AH,08H ;有鍵,讀鍵值AL
INT 21H
CMP AL,1BH ;是ESC鍵?
JNZ W1 ;是,退出,否,轉(zhuǎn)W1
;恢復原中斷
cli
MOV DX,OFF_0
PUSH DS
MOV DS,SEG_0
MOV AX,251CH
INT 21H
POP DS
STI
MOV AX,4C00H ;返回DOS
INT 21H
;----------------------------
;新中斷服務程序
NEWINT PROC FAR ;新IRQ0中服程序
PUSH AX ;保護現(xiàn)場
MOV AX,DATA
MOV DS,AX
ASSUME DS:DATA
INC CONT ;1/18S,+1
CMP CONT,18 ;滿1秒?,否,繼續(xù)累計
JB L1
MOV CONT,0
INC TN
CMP TN,'9'
JBE L1
MOV TN,'0'
L1: POP AX
IRET
NEWINT ENDP
;--------------------------------
DISP PROC NEAR ;入口:TN=DL=字符
PUSH AX
MOV DL,TN
MOV AH,02H ;DOS調(diào)用,顯示一個字符
INT 21H
INC TN
CMP TN,'9'
JBE EXIT
MOV TN,'0'
EXIT: POP AX
RET
DISP ENDP
CODE ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -