Как обработать прерывание? - PullRequest
0 голосов
/ 18 октября 2011

У меня есть задача написать программу, которая обрабатывает деление на ноль исключений. Мне трудно найти информацию об этом. Как я понимаю, мне нужно изменить 0-ую запись в таблице векторов прерываний, но как мне это сделать? Я вижу, что есть инструкция LIDT, но разве мне не пришлось бы писать всю таблицу?

Обратите внимание, я буду работать в 16-битном режиме.

1 Ответ

3 голосов
/ 18 октября 2011

Предполагая, что вы подразумеваете «реальный режим» под 16-битным режимом, таблица векторов прерываний просто расположена, начиная с линейного адреса 0, см. Запись wikipedia .Поэтому нужно получить старый 4-байтовый дальний указатель из [0000:0000], чтобы его можно было восстановить позже (или связать), и перезаписать запись собственным обработчиком.

Если вы используете DOS, вы можетеиспользуйте INT 21h/AH=25h для установки вектора прерывания и INT 21h/AH=35h для извлечения старой записи.

...