Программа на C- переопределить прерывание - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь написать программу на c, компилятор только для DOSBOX / TURBOC. Цель программы очень проста: пользователь вводит целое число N с клавиатуры, и после этого программа ждет пользователя, пока он не нажмет на клавиши N на клавиатурах (любая клавиша).

Я использую setvect и getvect для замены прерывания 9, но оно работает только один раз. Я имею в виду, что когда я вставляю N>1, во время выполнения программа вводится только один раз в новый ISR (подпрограмма обработки прерываний), а не N времени, как предполагалось.

Вот программа:

#include<stdio.h>
#include<dos.h>

volatile int AnyKey_Flag;

void interrupt (*Int9Save)(void);

void interrupt AnyKey_Handler(void)
{
    AnyKey_Flag++;
    printf("%d",AnyKey_Flag); //that line is just for testing
}

void main()
{
    int N=0;
    Int9Save=getvect(9);  //save the old ISR
    printf("Please insert a number: ");
    scanf("%d",&N);
    sleep(1);
    AnyKey_Flag=0;
    setvect(9, AnyKey_Handler); //here I replacing the ISR with  AnyKey_Handler

    while(AnyKey_Flag<2*N); //here the program waits until N presses, push and release are counted, so N is actually 2N

    setvect(9, Int9Save); //restore the old ISR
    printf("\nEND");
    sleep(3);
}

Кстати, после этого программа завершает работу (только N = 1), компилятор не распознает никакой клавиши ...

Любая помощь будет оценена.

Thx,

Хаим

...