Assembler для начинающих



         

Время суток


    Канал 0 таймера 8253 имеет специальное назначение в IBM PC. Выход
    этого канала таймера подключен к уровню прерывания 0 микросхемы
    8259. Это означает, что всякий раз, когда выход канала 0 имеет
    активный уровень сигнала, возникает прерывание (при условии, что
    все остальное установлено корректно). Процедура самопроверки при
    включении питания инициализирует канал 0 таймера, загружая в него
    число 0. Это дает наибольшее (не наименьшее) значение счетчика,
    которое может записать в него программа. Имея на входе частоту 1.19
    МГц, счетчик считает обратно к нулю чуть быстрее, чем за 55
    миллисекунд. Программа инициализации устанавливает таймер таким
    образом, что он считает непрерывно. Это означает, что прерывание 0
    возникает 18.2 раза в секунду.
 
      Как мы увидим в следующей главе, встроенная система программ
    BIOS использует это постоянное прерывание от таймера, чтобы следить
    за текущим временем. BIOS продвигает часы текущего времени вперед
    всякий раз, когда возникает прерывание. Затем, с помощью
    соответствующих вычислений, Вы можете преобразовать число циклов
    таймера в часы, минуты и секунды.
 
      Почему же выбрано значение 18.2? Почему счетчик не
    программируется так, чтобы давать прерывание 20 раз в секунду, или
    другое "хорошее" число раз? Это объясняет следующий пример.
 
      Системный таймер может выполнять функцию измерения времени
    отличного от времени дня. Время дня прекрасно подходит для
    определения интервалов времени, измеряемых в секундах или минутах.
    Но в некоторых ситуациях, возникающих при управлении
    вводом-выводом, нужно определять интервалы времени порядка одной -
    двух миллисекунд. Обычно программы отсчитывают такие интервалы с
    помощью временного цикла. Программа для такого цикла выглядит
    примерно так:
 
      MOV   CX, LOOP_VALUE
      HERE:LOOP  HERE
 
      Вы выбираете константу LOOP_VALUE так, что цикл выполняется в



Содержание  Назад  Вперед