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


   Доски строительные обрезные купить обрезную доску.        

Команда REPNE SCASB, используемая после


              0018      74 EE                   JZ   ADD_ONE    ; Переход, если нет символа в буфере ввода
              001A      B4 00                   MOV  AH, 0
              001C      CD 16                   INT  16H        ; Чтение символа
              001E      3C 20                   CMP  AL, ' '         ; Сравнение с пробелом
              0020      75 E6                   JNZ  ADD_ONE    ; Переход, если не пробел
              0022      CB                      RET              ; Возврат в ДОС
              0023                        COUNT      ENDP
              0023                        CODE ENDS
                                           END  COUNT
 
             Фиг. 9.3 Состояние клавиатуры
 
    Команда REPNE SCASB, используемая после метки K16, позволяет BIOS
    просмотреть таблицу в поисках соответствия с одной из регистровых
    клавиш. Когда BIOS находит соответствие в таблице кодов
    сканирования, она использует смещение в таблице для получения
    значения маски, используемого вместе с переменной KB_FLAG. Так как
    все регистровые клавиши представлены битами в переменных флагов,
    единая программа, пользуясь этими таблицами, может управлять
    регистровыми клавишами.
 
      BIOS использует также другие таблицы для перекодировки кодов
    сканирования в коды ASCII. Определив текущее состояние регистров,
    BIOS загружает в регистр BX указатель на нужную таблицу кодов
    ASCII. Затем программа преобразует код сканирования в правильное
    начальное значение выбранной таблицы (вычитая начальный адрес
    таблицы). Команда XLAT переводит код сканирования в правильный код
    ASCII. Этот прием используется там, где BIOS порождает коды
    псевдосканирования цифровой клавиатуры в режиме использования
    регистра клавиатуры CONTROL (метка K63).
 
      Подпрограмма ERROR_BEEP - пример управления динамиком, которое
    мы разбирали в предыдущей главе; она порождает сигнал, который BIOS
    посылает всегда, когда оператор вводит символ, а буфер полон. Так
    как этот сигнал может возникнуть всякий раз, когда система
    обслуживает прерывание от клавиатуры, было бы неразумно менять
    значение счетчика в канале таймера, управляя динамиком. Для этой
    цели BIOS использует непосредственное управление динамиком. Если
    уже генерируется какой-либо звук, он обрывается и появляется сигнал
    о переполнении клавиатуры. Если вы внимательно послушаете сигнал
    переполнения, то заметите, что он слегка дрожит. Возникающее 18 раз
    в секунду прерывание таймера меняет тон, прерывая цикл прямого
    управления динамиком. Как было предложено в предыдущей главе, вы
    можете исследовать последствия использования различных временных
    циклов таймера на выходную тональность динамика.

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