我正在尝试覆盖默认中断,这样如果用户按下并按住键,它将每5秒输入3次。如果用户在没有按住的情况下按下并释放,则它将作为默认值
这就是我所拥有的:
#include <stdio.h>
#include <dos.h>
void interrupt (*Int9Save) (void);
void interrupt(*Int8Save) (void);
void start_press_limit(void);
void end_press_limit(void);
volatile int count=0,sum=0;
void interrupt h9(void)
{
if(count < 3) {
asm{
PUSHF
CALL DWORD PTR Int9Save
}
count++;
}
}
void interrupt h8(void)
{
asm{
PUSHF
CALL DWORD PTR Int8Save
}
sum++; /*counter*/
if (sum >= 90) {
sum = 0;
count = 0;
}
}
//main
int main(void)
{
int scan_code = 0;
char ascii_code;
start_press_limit();
do {
asm{
PUSH AX
MOV AH, 0
INT 16h
MOV BYTE PTR scan_code, AH
MOV ascii_code, AL
POP AX
} // asm
printf("%c", ascii_code);
} while (scan_code != 1);
end_press_limit();
return 0;
}
void start_press_limit(void) {
Int9Save = getvect(9); // save old func
setvect(9, h9); // new func
Int8Save = getvect(8); // save old func
setvect(8, h8); // new func
}
void end_press_limit(void) {
setvect(9, Int9Save); // old func
setvect(8, Int8Save); // old func
}
答案 0 :(得分:0)
英特尔手册明确指出,您不能覆盖系统默认的0到31个中断向量,如果您覆盖其中一个,则无法预测输出。