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

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

Бросая в воду камешки, смотри на круги, ими образуемые;
иначе бросание будет пустой забавой.

Козьма Прутков

На практике редко возникает необходимость разработки программы как "вещи в себе". В подавляющем большинстве случаев программа должна взаимодействовать с пользователем, получая от него данные посредством клавиатуры и выдавая результаты своей работы на экран. При знакомстве с новым языком программирования одним из первых вопросов, на которые ищет ответа программист, является выяснение средств этого языка для выполнения операций обмена с консолью (консоль – клавиатура и монитор).

Что касается языка ассемблера, то собственных средств обмена с консолью у него нет. Чтобы выполнить подобную операцию, программа использует возможности самого компьютера (прерывания BIOS) и операционной системы, в среде которой эта программа работает. Каждый программист самостоятельно ищет решение проблемы обмена с консолью. Так как эта задача актуальна всегда, то есть необходимость на конкретных примерах показать порядок использования средств BIOS и ОС для обмена с консолью в программах на ассемблере. Примеры не очень сложны, и читатель легко сможет быстро встроить их в свои программы.


В контексте нашего изложения ROM BIOS (Read Only Memory Basic Input Output System) представляет собой совокупность программ в энергонезависимой памяти компьютера, одной из задач которых является устранение специфики аппаратных компонент компьютера для функционирующего на нем программного обеспечения, включая операционную систему. Обслуживание клавиатуры и монитора выполняют программы BIOS, называемые драйверами. Структурно драйверы состоят из ряда подпрограмм, называемых функциями, каждая из которых выполняет определенные действия.

Обращение к функциям BIOS производится аналогично обращению к функциям MS DOS. Для работы с клавиатурой и экраном BIOS содержит два программных прерывания – 16h и 10h, обращение к которым, исходя из вышесказанного, является обращением к драйверам этих устройств. Для вызова этих прерываний, как обычно, используется команда INT – int 16h или int 10h. Для выполнения определенной операции в регистре АН указывается номер функции. При необходимости в других регистрах может указываться дополнительная (параметрическая) информация. Ниже рассмотрим подробнее возможности BIOS для работы с консолью.

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

Прерывание 16 BIOS имеет функции для различных типов клавиатур: обычной – 84 клавиши и двух типов расширенной клавиатуры – 101\102 и 122-клавишной.

Выяснить функциональные возможности клавиатуры позволяет функция 09h:

Вход: АН – 09h.

Выход: AL = битовое поле, установленные биты которого обозначают поддерживаемые функции:

  • 7 – резерв;
  • 6 – поддержка клавиатуры со 122 клавишами (и функций 20h-22h (int 16h));
  • 5 – поддержка расширенной клавиатуры со 101-102 клавишами (и функций 10h-12h (int 16h));
  • 4 – поддержка функции 0Ah (int 16h);
  • 3 – поддержка функции 0З06h (int 16h);
  • 2 – поддержка функции 0305h (int 16h);
  • 1 – поддержка функции 0304h (int 16h);
  • 0 – поддержка функции 0З00h (int 16h).

Прежде чем вызывать эту функцию, необходимо удостовериться в том, что она поддерживается данной версией BIOS. Сделать это можно, вызвав функцию:

OcOh прерывания int 15h.

Вход: АН = COh получить конфигурацию.

Выход: CF = 1 – BIOS не поддерживает эту функцию;

  • CF – 0 – в случае успеха;
  • ES:BX – адрес конфигурационной таблицы в ROM-памяти;
  • АН = состояние (00h – успех; 86h – функция не поддерживается).
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.