gpt4 book ai didi

c - 覆盖默认 int 8h,9h

转载 作者:行者123 更新时间:2023-11-30 17:17:42 26 4
gpt4 key购买 nike

我正在尝试覆盖默认中断,以便如果用户按住键,则每 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 到 31 个中断 vector ,并且如果您覆盖其中之一,则无法预测输出。

关于c - 覆盖默认 int 8h,9h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com