Прерывание int 16h
¨ Функция 00h (10h). Чтение символа клавиатуры с ожиданием. Читает из кольцевого буфера ввода символ и скан-код. После считывания они удаляются из буфера и возвращаются в регистре AX. Если буфер пуст, ожидает ввода. Каждой клавише на клавиатуре соответствует так называемый скан-код, соответствующий только этой клавише. Этот код посылается клавиатурой при каждом нажатии и отпускании клавиши и обрабатывается в BIOS обработчиком прерывания Int 09h. Функция 00h даёт возможность получить код нажатия, не перехватывая этот обработчик. Если нажатой клавише соответствует ASCII- символ, то: AL – ASCII -код символа, AH – скан-код клавиши. Если нажатой клавише соответствует расширенный ASCII- код, то: AL – 00h, AH – расширенный ASCII- код. Вызов: AH = 00h (83/84- key). Возврат: AL = ASCII -код символа, изображённый на клавише/ 00h, AH = скан-код/расширенный ASCII -код клавиши. Функция 10h (AH = 10) – усовершенствованный вариант функции 00h для расширенной клавиатуры (101/102- key). Позволяет получить расширенные ¨ Функция 01h (11h). Поверка буфера клавиатуры на наличие в нём символа. Определяет, имеются ли в кольцевом буфере ожидающие ввода символы; возвращает флаг ожидания и сам символ при его наличии. Однако символ и его скан-код не извлекаются из буфера и могут быть снова получены при повторном вызове функции 00h Int 16h. Данная функция относится к числу асинхронных: определив состояние буфера ввода, она возвращает управление про- Вызов: AH = 01h (83/84- key), 11h (101/102 -key). Возврат: ZF = 1, если буфер пуст и ZF = 0, если в буфере имеется ожидающий считывания символ. В этом случае: AL = ASCII -код символа/ 00h, AH = скан-код клавиши/расширенный ASCII- код. Функция 11h (AH = 11h) – усовершенствованный вариант функции 01h для расширенной клавиатуры (101/102 -key). Позволяет получить расширенные ASCII -коды для клавиш F11, F12, а также для ряда других комбинаций. В качестве признака управляющих клавиш или их комбинаций, помимо значения 00h, используются 0Ah, 0Dh и E0h. ¨ Функция 02h (12h). Получение флагов клавиатуры. Возвращает байт флагов клавиатуры, описывающих состояние управляющих клавиш, записанное в байте (слове) области данных BIOS по адресу 0000h: 0417h. Вызов: AH = 02h Возврат: A L =1-ый байт флагов клавиатуры. Биты байта имеют следующие значения: 0: 1 – правая Shift нажата 1: 1 – левая Shift нажата 2: 1 – Ctrl (любая) нажата 3: 1 – Alt (любая) нажата 4: 1 – режим Scroll Lock 5: 1 – режим Num Lock 6: 1 – режим Caps Lock 7: 1 – режим Insert активен Функция 12h (AH = 12h) – усовершенствованный вариант функции 02h для расширенной клавиатуры (101/102- key). Выводит такое же значение байта, как и функция 02h, по адресу 0000h: 0417h, и, дополнительно, второй байт статуса клавиатуры (адрес 0000h: 0418h) со следующими значениями: 0: 1 – левая Ctrl нажата 4: 1 – нажата Scroll Lock 1: 1 – левая Alt нажата 5: 1 – нажата Num Lock 2: 1 – правая Ctrl нажата 6: 1 – нажата Caps Lock 3: 1 – правая Alt нажата 7: 1 – нажата SysReg
|