Иллюстрированный самоучитель по задачам и примерам Assembler

Функции BIOS для работы с консолью

Получение состояния флагов клавиатуры (02h, 12h, 22h int 16h)

BIOS предоставляет функцию 02h для получения состояния световых индикаторов клавиатуры и некоторых управляющих клавиш.

Вход: АН = 02h получить состояние флагов клавиатуры (для 84-клавишной клавиатуры).

Выход: AL = битовое поле, установленные биты которого соответствуют состоянию следующих флагов:

  • 7 – режим вставки активен;
  • 6 – индикатор CapsLock включен;
  • 5 – индикатор NumLock включен;
  • 4 – индикатор ScrollLock включен;
  • 3 – нажата клавиша ALT (любая клавиша ALT на 101-102-клавишной клавиатуре);
  • 2 – нажата клавиша CTRL (любая клавиша CTRL на 101-102-клавишной клавиатуре);
  • 1 – нажата левая клавиша SHIFT;
  • 0 – нажата правая клавиша SHIFT.

Поддержка расширенных клавиатур осуществляется функциями 12h и 22h BIOS.

Вход: АН = 12h, 22h получить состояние флагов клавиатуры (для 101-102 – и 122-клавишных клавиатур).

Выход: AL = первое битовое поле, установленные биты которого соответствуют состоянию флагов, возвращаемых в регистре AL функцией 02h;

АН = второе битовое поле, установленные биты которого соответствуют следующему состоянию флагов:

  • 7 – нажата клавиша SysReq (SysRq);
  • 6 – нажата клавиша CapsLock;
  • 5 – нажата клавиша NumLock;
  • 4 – нажата клавиша Scrolllock;
  • 3 – нажата правая клавиша ALT;
  • 2 – нажата правая клавиша CTRL;
  • 1 – нажата левая клавиша ALT;
  • 0 – нажата левая клавиша CTRL.

Кроме этого, состояние данных флагов можно прочитать из оперативной памяти по адресам: 0040h:0017h (AL) и O040h:0010h (АН).

Запись символа в буфер клавиатуры (05h int 16h)

Вход: АН = 05h запись символа в буфер клавиатуры:

  • СН = скан-код;
  • CL = символ ASCII.

Выход: AL = состояние:

  • 00h – успешная запись;
  • 01h – ошибка (буфер клавиатуры заполнен).

С помощью этой функции можно осуществлять подыгрыш для программ, которые ожидают ввода с клавиатуры. Сам буфер клавиатуры организован по принципу кольца, имеет размер 16 байт и занимает в памяти диапазон адресов 0040h:001Eh…0040h:003Dh. В ячейке 0040h:001Ah хранится адрес начала буфера, а в ячейке 0040h: OOlCh – адрес конца. Если содержимое этих ячеек равно, то буфер пуст. Одному символу в буфере соответствует слово, в котором первый байт – скан-код клавиши, а второй – символ ASCII. Исследовать данную функцию можно с использованием операции сцепления (|) MS DOS. Для этого оформим фрагмент кода для определения наличия символа в буфере и его ввода в виде отдельной программы.

В командную строку MS DOS необходимо ввести строку:

prog_1.exe | prog_2.exe >p.txt

В результате всех этих действий будет создан файл p.txt, который и будет содержать строку str из файла prog_1.asm.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.