Низкоуровневое програмирование Главная - Реальный режим - Прерывания Bios - INT 08h: прерывание от таймера

INT 08h: прерывание от таймера


Это аппаратно генерируемое прерывание (IRQ 0) вызывается по каждому тику часов реального времени. На большинстве компьютеров часы тикают каждые 55мс, или около 18.2 раз в секунду. Код BIOS для этого прерывания обновляет значение часов на 0.046 сек. Этот код также выключает двигатели гибких дисков по истечении заданного времени (см. INT 1Eh) без операций ввода/вывода.

Если вы хотите использовать это прерывание для обработки событий, зависящих от времени, вы должны предусмотреть код, сообщающий системе, когда прерывание закончено. Магическая последовательность такова:

|  mov al,20h    ;послать сигнал конец-прерывания
|  out 20h,al      ; контроллеру прерываний 8259

большинство программ используют для этого BIOS. Например, вначале программа пользователя сохраняет вектор BIOS в переменной с именем cs:[saved_int8]. затем по каждому прерыванию INT 08H выполняется следующий код:

|  pushf                                      ;имитировать INT
|  call dword ptr cs:[saved_int8] ;выполнить нормальную обработку
|  cmp cs:my_var,test_value       ;теперь сделать свои черные дела
| ... и т.д. ...
|  iret                                         ;возврат в прерванную программу