Функции BIOS для работы с консолью
Формат конфигурационной ROM-таблицы:
Смещение | Размер | Описание |
---|---|---|
00h | 2 байта | Число байтов в этой таблице |
02h | 1 байт | Модель BIOS |
03h | 1 байт | Подмодель BIOS |
04h | 1 байт | Издание BIOS: 0-1-я редакция, 1-2-я редакция и т. д. |
05h | 1 байт | 1-й байт свойств |
06h | 1 байт | 2-й байт свойств |
07h | 1 байт | 3-й байт свойств |
08h | 1 байт | 4-й байт свойств |
09h | 1 байт | 5-й байт свойств |
Если в результате этого вызова бит б второго байта свойств установлен, то BIOS поддерживает функцию 09h прерывания int 16h, с помощью которой определяются функциональные возможности клавиатуры.
Вход: АН = 10h, 20h чтение символа с ожиданием (для 101-102- и 122-клавишных клавиатур соответственно).
Выход: для обычных клавиш (АН = скан-код BIOS; AL = символ ASCII);
- для клавиш и комбинаций с расширенным кодом (АН = расширенный ASCII-код; AL = 0);
- для дополнительных клавиш (АН – расширенный ASCII-код; AL = 0Eh).
Для ввода строки символов данные функции необходимо использовать в цикле. На примере показанной ниже программы, используя отладчик, можно исследовать содержимое АХ при нажатии различных клавиш и их комбинаций.
;prg05_02.asm – программа на ассемблере для ввода строки ;с использованием функции ввода символа 10h .data string db 5 dup (0) len_string =$-string adr_stringdd string.code mov cx,len_string les di.adr_string ml: mov ah.O10h int 16h stosb loop ml
Программа вводит 5 символов и сохраняет их в строке str.
Проверка наличия символа (01h, 11h, 21h int 16h)
Вход: АН = Olh проверка наличия символа (для 84-клавишной клавиатуры).
Выход: если ZF=O, то регистры АН и AL содержат:
- для обычных клавиш (АН = скан-код BIOS; AL = символ ASCII);
- для клавиш и комбинаций с расширенным ASCII-кодом (АН = расширенный ASCII-код; AL = 0);
- если ZF=1, то буфер пуст.
Функция 01h получает информацию о символе, не считывая его из буфера клавиатуры. Исключение составляют нажатия дополнительных клавиш на расширенных клавиатурах, не совместимых с 83\84-клавишными клавиатурами. В процессе проверки функцией Olh они удаляются из буфера. Поэтому при работе с расширенными клавиатурами необходимо использовать функции 11h и 21h.
Вход: АН = llh, 21h проверка наличия символа (для 101-102- и 122-клавишных клавиатур соответственно).
Выход: если ZF=O, то регистры АН и AL содержат:
- для обычных клавиш (АН = BIOS скан-код; AL – символ ASCII);
- для клавиш и комбинаций с расширенным кодом (АН = расширенный ASCII-код; AL = 0);
- для дополнительных клавиш (АН = расширенный ASCII-код; AL = 0eh);
- если ZF=0, то буфер пуст.
В большинстве случаев работу с результатами выполнения данной функции логично начинать с анализа флага ZF (командами JZ или JNZ). Что же касается содержимого регистра АХ, то оно аналогично содержимому int 16h; пересылаем его:
stosb jmpml