Лекции по Вычислительным машинам, системам и сетям   

6. Приложение

6.2. Сервисные прерывания BIOS

INT 10h, функция 00h ‑ установка видеорежима. Устанавливает текущий видеорежим.

При вызове: ah = 00h.

al = видеорежим:

- 03h – текстовый 80*25;

- 04h – графический 320*200;

- 10h – графический 640*350;

- 12h – графический 640*480;

INT 10h, функция 01h ‑ установка конфигурации курсора. Позволяет задать начальную и конечную строки развертки курсора в текстовых видеорежимах.

При вызове: ah = 01h.

ch = начальная (верхняя) строка развертки.

сl = конечная (нижняя) строка развертки.

INT 10h, функция 02h ‑ установка позиции курсора. Задает положение курсора на экране в текстовых координатах на указанной видеостранице.

При вызове: ah = 02h.

bh = № видеостраницы; dh = строка; dl = столбец.

INT 10h, функция 03h ‑получение позиции и размера курсора. Возвращает положение курсора на экране для заданной видеостраницы.

При вызове: ah = 03h.

bh = № видеостраницы.

При возврате: ch = начальная (верхняя) строка развертки курсора.

cl = конечная (нижняя) строка развертки курсора; dh = строка;

dl = столбец.

INT 10h, функция 06h ‑ инициализация или прокрутка окна вверх. Инициализирует окно с указанными координатами, заполняя его пробелами с заданным атрибутом, или прокручивает содержимое окна вверх на заданное число строк. Действует для активной видеостраницы. При прокрутке появляющиеся снизу строки заполняются пробелами с заданным атрибутом.

При вызове: ah = 06h.

al = число строк прокрутки; если al = 0, все окно очищается.

bh = атрибут символов в окне.

ch = Y ‑ координата верхнего левого угла окна.

cl = X ‑ координата верхнего левого угла окна.

dh = Y ‑ координата нижнего правого угла окна.

dl = X ‑ координата нижнего правого угла окна.

INT 10h, функция 07h ‑ инициализация или прокрутка окна вниз. Инициализирует окно с указанными координатами, заполняя его пробелами с заданным атрибутом, или прокручивает содержимое окна вниз на заданное число строк. Действует только для активной видеостраницы. При прокрутке появляющиеся сверху строки заполняются пробелами с заданным атрибутом.

При вызове: ah = 07h.

al = число строк прокрутки; если al = 0, все окно очищается.

bh = атрибут символов в окне.

ch = Y ‑ координата верхнего левого угла окна.

cl = X ‑ координата верхнего левого угла окна.

dh = Y ‑ координата нижнего правого угла окна.

dl = X ‑ координата нижнего правого угла окна.

INT 10h, функция 08h ‑ чтение символа и атрибута в позиции курсора. Возвращает ASCII.код символа, расположенного в позиции курсора на заданной видеостранице, и его атрибут.

При вызове: ah = 08h.

bh = № видеостраницы.

При возврате: al = ASCII-код символа.

ah = атрибут.

INT 10h, функция 09h ‑ запись символа и атрибута в позицию курсора. Записывает символ и его атрибут в текущую позицию курсора. Курсор при этом не смещается, а остается в исходной позиции. Коэффициент повторения позволяет выводить строки одинаковых символов (но курсор не смещается!). Если коэффициент повторения равен 0, на экран ничего не выводится.

При вызове: ah = 09h.

al = ASCII-код символа.

bh = № видеостраницы.

bl = атрибут.

cx = коэффициент повторения.

INT 10h, функция 0ah ‑ запись символа в позицию курсора. Записывает ASCII-код символа в текущую позицию курсора. Символ принимает атрибут, установлен-ный ранее для этой позиции. Курсор при выводе не смещается, а остается в исходной позиции. Коэффициент повторения позволяет выводить строки одинаковых символов (но курсор не смещается!). Если коэффициент повторения равен 0, на экран ничего не выводится.

При вызове: ah = 0ah.

bh = № видеостраницы.

al = ASCII-код символа.

cx = коэффициент повторения.

INT 10h, функция 0eh ‑ запись символа в режиме телетайпа. Записывает ASCII код символа в текущую позицию курсора на активной видеостранице. Курсор после вывода автоматически смещается к следующей позиции. Коды ASCII: 07 – звонок, 08 – шаг назад, 0ah – перевод строки, 0dh – возврат каретки рассматриваются как управляющие и выполняют соответствующие действия. Действует автоматический перевод курсора на следующую строку и скроллинг экрана. Атрибут символа задать нельзя, действует атрибут, установленный ранее для этой позиции.

При вызове: ah = 0eh.

alASCII-код символа.

INT 10h, функция 10h, подфункция 03h ‑ переключение бита «мерцание/яркость». Определяет назначение старшего (7-го) бита атрибута символа: мерцание символа или яркость фона.

При вызове: ax = 1003h.

bl = назначение старшего бита атрибута:

- 0 – яркость фона;

- 1 – мерцание символа.

INT 10h, функция 13h ‑ запись строки в режиме телетайпа ‑ записывает строку символов в заданную видеостраницу, начиная с указанной позиции. Коды ASCII: 07 – звонок, 08 – шаг назад, 09 – табуляция, 0ah – перевод строки, 0dh – возврат каретки рассматриваются как управляющие и выполняют соответствующие действия.

При вызове: ah = 13h.

al = режим записи:

- 0 – атрибут в bl, строка содержит только коды симво-лов, курсор после вывода не смещается;

- 1 - атрибут в bl, строка содержит только коды симво-лов, курсор после вывода  смещается;

- 2 - строка содержит попеременно коды символов и атрибутов, курсор после вывода не смещается;

- 3 - строка содержит попеременно коды символов и атрибутов, курсор после вывода смещается;

bh = № видеостраницы.

bl = атрибуты ( если в al 0 или 1).

cx = число выводимых символов (атрибуты не учитываются); dh = номер строки на экране; dl = номер столбца на экране; es:bp = адрес строки в памяти.

INT 15h, функция 86h ‑ программная задержка на заданное число микросекунд. Выполняет задержку на число микросекунд, заданное в регистрах cx (старшая часть) и dx (младшая часть).

При вызове: ah = 86h.

cx,dx  =  микросекунды.

INT 16h, функция 00h (10h) ‑ чтение символа с клавиатуры. Читает из кольцевого буфера клавиатуры ASCII- и СКЭН-коды нажатой клавиши. Если буфер пуст, ждет нажатия клавиши. Функция 10h предназначена для расширенной клавиатуры (101 клавиша), функция 0h – для 84-клавишной.

При вызове: ah = 00h (или 10h).

При возврате: ah = СКЭН-код; al = ASCII-код.

INT 16h, функция 01h (11h) ‑ чтение символа с клавиатуры. Определяет, есть ли в буфере клавиатуры ожидающие ввода символы. Если есть, то читает из кольцевого буфера клавиатуры ASCII- и СКЭН-коды нажатой клавиши, однако при этом из буфера эти коды не удаляются и будут снова получены при обращении к буферу. Если буфер пуст, то управление передается следующей команде программы. Функция 11h предназначена для расширенной клавиатуры (101 клавиша), функция 1h – для 84-клавишной.

При вызове: ah = 01h (или 11h).

При возврате: Если символ ожидает:

zf = 0;

ah  =  СКЭН-код;

al  =  ASCII-код.

Если буфер пуст: zf = 1.

INT 16h, функция 02h (12h) ‑ получение статуса клавиатуры. Для функции 02h возвращает байт флагов, описывающий состояние управляющих клавиш клавиа-туры. Для функции 12h возвращает слово флагов, при этом младший байт этого слова совпадает с байтом, возвращаемым функцией 02h.

При вызове: ah = 02h (или 12h).

При возврате: Функция 02h: al = флаги.

Функция 12h: ax = флаги.

Биты флагов имеют следующие значения:

- бит 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);

- бит 8 = 1 ‑ нажат левый CTRL;

- бит 9 = 1 – нажат левый ALT;

- бит 10 = 1 – нажат правый CTRL;

- бит 11 = 1 – нажат правый ALT;

- бит 12 = 1 – нажат SCROLL LOCK;

- бит 13 = 1 – нажат NUM LOCK;

- бит 14 = 1 – нажат CAPS LOCK;

- бит 15 = 1 – нажат SYSREG.

INT 1ah, функция 0h ‑ число тиков таймера. Возвращает число тиков таймера с момента последнего сброса системы. Таймер тикает через каждые 55 миллисекунд, т.е. примерно 18 раз в секунду (1092 раза в минуту).

При вызове: ah = 00h.

При возврате: cx,dx = число тиков (в сх – старшая часть); al = 0, если системные часы не переходили через сутки.

Вышеперечисленные функции далеко не исчерпывают весь сервис, предоставляемый DOS и BIOS. Однако для выполнения лабораторных работ, приведенных выше, функций вполне (даже с избытком) достаточно.



*****
Новосибирск © 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.