Я разрабатываю встроенную программу для i386 intel, и я пытаюсь понять, как использовать аппаратный таймер. Я прочитал here (и другие места), что прерывание таймера - 0x08, но this page (И другие источники) говорят, что первые 32 прерывания зарезервированы для исключений, а прерывание 0x08 специально для двойной ошибки. Что является правдой? Как настроить обработчик прерывания таймера, используя либо сборку, либо очень низкий уровень C без вызовов операционной системы?Как прерывание таймера должно быть 0x08, если первые 32 прерывания зарезервированы для исключений?
Я разрабатываю простую операционную систему, чтобы узнать о разработке операционной системы, поэтому у меня нет доступа к чему-либо подобному Linux или системным вызовам (если только я не реализую системные вызовы самостоятельно. Но создание полностью совместимой с POSIX ОС далеко за пределами этого проекта, поэтому я предпочел бы придерживаться простых, хотя и слегка взломанных решений).
Если это имеет значение, я запускаю это на QEMU, а не фактическое физическое i386.
Вы обычно переназначаете прерывания. См. Статью [osdev article] (http://wiki.osdev.org/8259_PIC). – Jester
Намерены ли вы записать режим реального режима или защищенный режим? Я предполагаю защищенный режим. –
@MichaelPetch Поскольку я не знаю, что это значит, я полагаю, что я должен принять то же самое, что и вы. (Я посмотрю, что это значит и вернется к вам) – ItsTimaiFool