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


         

нажатой раньше других. Переменная BUFFER_TAIL


    клавише, нажатой раньше других. Переменная BUFFER_TAIL указывает на
    символ, соответствующий самой последней нажатой клавише. Если
    указатели имеют одинаковые значения, буфер пуст.
 
      Когда обработчик прерывания BIOS реагирует на очередное нажатие
    клавиши, при котором должен быть сгенерирован символ, он помещает
    этот символ в буфер. Если буфер не заполнен, обработчик прерывания
    помещает символ по адресу, на который указывает переменная
    BUFFER_TAIL. Затем он увеличивает переменную BUFFER_TAIL на два,
    чтобы указывать на следующую ячейку буфера. Если увеличение
    указателя перемещает его за пределы буфера, указатель перемещается
    на начало буфера. Это означает, что буфер клавиатуры "закольцован".
    После шестнадцатого нажатия очередной символ попадает в начало
    буфера. Такая организация буфера также называется циклической, так
    как позиции буфера образуют замкнутый цикл, а не расположены в ряд.
 
      Программа клавиатуры BIOS, вызываемая по команде INT 16H, имеет
    три функции.  Одна из них удаляет символ из буфера.  Указатель
    BUFFER_HEAD указывает на первый символ буфера.  Если буфер не пуст,
    (что получается, если указатель начала равен указателю конца), BIOS
    удаляет слово по указателю BUFFER_HEAD и увеличивает указатель
    начала на два.  Если указатель превышает значение указателя
    BUFFER_END, он перемещается назад в начало буфера.      Подпрограмма K4
    в программе клавиатуры BIOS обеспечивает сдвиг указателя и, если
    необходимо, его перенос в начало.
 
      Другая функция клавиатуры возвращает текущее состояние буфера
    клавиатуры. Она сообщает вызвавшей программе, есть ли в буфере
    символ или нет. Программа может использовать эту информацию для
    того, чтобы избежать ожидания нажатия клавиши, если у нее есть чем
    заняться в это время. Такой вызов функции чтения состояния можно
    использовать для определения момента выхода из цикла. Во время
    каждого прохода по циклу можно проверить, введен ли уже символ с

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