LINUX.ORG.RU

Установка прерываний в защищённом режиме


0

0

Я устанавливаю IRQ для таймера и клавиатуры. Получается:

таймер (IRQ 0x20):
(UINT)func & 0xFF -> 0x100000 + 0x20*8
((UINT)func & 0xFF00) >> 8 -> 0x100000 + 1 + 0x20*8
0x8 -> и т. д.
0
0
0x8E
((UINT)func & 0xFF0000) >> 16
((UINT)func & 0xFF000000) >> 24 -> 0x100000 + 7 + 0x20*8

клавиатура: (IRQ 0x21)

тоже самое, но + 0x21*8

Потом:
256*8 -1 -> 0x100800
0x100000 -> 0x100800 + 2

И, конечно же, sti.

Но комп просто перезагружается. В чём дело?

★★

Проверил, ошибка происходит во время sti.

drish ★★
() автор топика

Очевидно потому, что sti, равно как и остальные связанные с прерываниями инструкции, есть инструкция зашищённая и при IOPL != 0 вызывает GPF. :)

anonymous
()
Ответ на: комментарий от anonymous

А что тогда сделать предлагаешь?

drish ★★
() автор топика

Я идиот! Перепутал аргументы у функции!

drish ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.