Как отложить выполнение на указанное количество миллисекунд в защищенном режиме? - PullRequest
2 голосов
/ 13 июля 2011

У меня есть программа на C, которая работает на голом x86 (без ОС) в защищенном режиме. Мне нужно отложить выполнение программы на определенное время. В настоящее время я делаю это:

for(p=0; p<1000000; ++p) asm("pause");

Но это выглядит очень-очень неправильно (я получаю задержку, но, видимо, у меня нет реального контроля над ее продолжительностью: длина «паузы» не определена).

Теперь я не очень разбираюсь в вещах на таком низком уровне, и я искал в сети решения, но пока единственное, что я обнаружил, это прерывания BIOS, которые не работают в pmode ( или мне так сказали).

Итак, как мне отложить выполнение в защищенном режиме?

1 Ответ

5 голосов
/ 13 июля 2011

Типичным способом реализации задержек является использование системного таймера, также называемого PIT на x86 (программируемый интервальный таймер), для генерации прерывания. Вы должны настроить системный таймер (аппаратный IRQ0) на создание прерывания через определенное время, написать обработчик прерывания, чтобы установить некоторый регистр или флаг на прерывание, и, когда вам нужно отложить выполнение, выполнить цикл в регистре или флаге до его устанавливает обработчик прерываний.

...