ASSUME CS:CODE,SS:STACK
STACK SEGMENT
DB 20H DUP (0)
STACK ENDS
CODE SEGMENT
START: MOV AX,STACK
MOV SS,AX
MOV SP,20H
PUSH CS
POP DS
MOV SI,OFFSET INT9
MOV AX,0
MOV ES,AX
MOV DI,204H
PUSH ES
PUSH DI
MOV CX,OFFSET INT9END-OFFSET INT9
CLD
REP MOVSB
PUSH ES:[9*4+2]
PUSH ES:[9*4]
POP ES:[200H]
POP ES:[202H]
CLI
POP ES:[9*4]
POP ES:[9*4+2]
STI
MOV AX,4C00H
INT 21H
INT9: PUSH AX ;int9例程开始
PUSH CX
PUSH ES
PUSH DI
IN AL,60H
CMP AL,9EH ;判断扫描码是否为a的断码,不是则直接交给原int9例程处理
JNE INT9_FD
MOV AX,0B800H ;对扫描码是a的断码的情况进行处理
MOV ES,AX
MOV DI,0
MOV AL,'A'
MOV AH,00000111B
MOV CX,4000
INT9_F: MOV ES:[DI],AX ;循环
ADD DI,2
LOOP INT9_F
INT9_FD: ;交付原中断例程处理
PUSHF
CALL DWORD PTR CS:[200H]
POP DI
POP ES
POP CX
POP AX
IRET ;返回
INT9END: NOP
CODE ENDS
END START