Какие функции представляет прерывание BIOS INT10h?

Прерывание INT 10H обеспечивает управление всем экраном. В регистре AH устанавливается код, определяющий функцию прерывания. Команда cохраняет содержимое регитров BX, CX, DX, SI и BP. Ниже описывается все возможные функции.

AH=00: Установка режима. Данная функция позволяет пере ключать цветной монитор в текстовый или графический режим. Установка pежима для выполняемой в текущий момент программы осуществляется c помощью INT 10H. При установке происходит очистка экрана. Содержимое регистра AL может быть следующим:

00 40 х 25 черно-белый текстовый режим

01 40 х 25 стандартный i6-цветовой текстовый режим

02 80 х 25 черно-белый текстовый режим

03 80 х 25 стандартный 16-цветовой текстовый режим

04 320 х 200 стандартный 4-цветовой графический режим

05 320 х 200 черно-белый графический режим

06 640 х 200 черно-белый графический режим

07 80 х 25 черно-белый стандартный монохромный

08 - 0A форматы для модели PCjr

0D 320 х 200 16-цветовой графический режим (EGA)

0E 640 х 200 16-цветовой графический режим (EGA)

0F 640 х 350 черно-белый графический режим (EGA)

10 640 х 350 64-цветовой графический режим (EGA)

AH=01: Установка размера курсора.

AH=02: Установка позиции курсора. Эта функция устанавлива ет курcор в любую позицию на экране в соответствии с коорди натами cтроки и столбца

AH=03: Чтение текущего положения курсора. Программа может определить положение курсора на экране (строку и столбец), а также pазмер курсора

AH=04: Чтение положения светового пера. Данная функция используeтся в графическом режиме для определения положения светового пеpа.

AH=05: Выбор активной страницы. Новая страница устанавли вается для цветных текстовых режимов от 0 до 3. Для режима 40 х 25 возможно устанавливать до 8 страниц (от 0 до 7), а для режима 80 х 25 - до 4 страниц (от 0 до 3).

AH=06: Прокрутка экрана вверх. Когда программа пытается выдать текст на строку ниже последней на экране, то происхо дит переход на верхнюю строку. Даже если с помощью прерыва ния будет специфиpован нулевой столбец, все равно предпола гается новая строка, и нижние строки на экране будут испорчены. Для решения этой проблемы используется прокрутка экрана.

AH=07: Прокрутка экрана вниз. Для текстового режима прокрутка экрана вниз обозначает удаление нижних строк и вставка чистых строк сверху. Регистр AH должен содержать 07, значения остальных регистpов аналогичны функции 06 для прокрутки вверх.

AH=08: Чтение атрибута/символа в текущей позиции курсора.

Данная функция возвращает в регистре AL значение символа, а в AH - его атрибут. В графическом режиме функция возвращает шест. 00 для не ASCII-кодов. Так как эта функция читает только один cимвол, то для символьной строки необходима организация цикла.

AH=09: Вывод атрибута/символа в текущую позицию курсора. В регистр AL должен быть помещен выводимый на экран символ. Значение в регистре CX определяет число повторений символа на экране. Вывод на экран последовательности различных симво лов требует организации цикла.

AH=0A: Вывод символа в текущую позицию курсора. Единствен ная разница между функциями 0A и 09 состоит в том, что функция 0A не устанавливает атрибут:

MOV AH,0AH ;Функция вывода

MOV AL,символ ;Выводимый символ

MOV BH,страница ;Номер страницы (для текста)

MOV CX,повторение ;Число повторений символа

INT 10H ;Вызвать BIOS

AH=0E: Вывод в режиме телетайпа. Данная функция позволяет использовать монитор, как простой терминал. Для выполнения этой функции необходимо установить в регистре AH шест. значение 0E, в pегистр AL поместить выводимый символ, цвет текста (в графическом режиме) занести в регистр BL и номер страницы для текстового режима - в регистр BH. Звуковой сигнал (код 07H), возврат на одну позицию (08H), конец строки (0AH) и возврат каретки (0DH) действуют, как команды для форматизации экрана. Данная функция автоматически продви гает курсор, переводит символы на следующую cтроку, выполня ет прокрутку экрана и сохраняет текущие атрибуты экрана.

AH=0F: Получение текущего видео режима. Данная функция возвращает в регистре AL текущий видео режим (см.функцию AH=00), в pегистре AH - число символов в строке (20, 40 или

80), в регистре BH - номер страницы.

Система прерываний любого компьютера является его важнейшей частью, позволяющей быстро реагировать на события, обработка которых должна выполнятся немедленно: сигналы от машинных таймеров, нажатия клавиш клавиатуры или мыши, сбои памяти и пр. Рассмотрим в общих чертах компоненты этой системы.
Сигналы аппаратных прерываний, возникающие в устройствах, входящих в состав компьютера или подключенных к нему, поступают в процессор не непосредственно, а через два контроллера прерываний, один из которых называется ведущим, а второй - ведомым (рис. 1.11)

Какие функции представляет прерывание BIOS INT10h? - student2.ru

Рис. 1.11. Аппаратная организация прерываний.

Два контроллера используются для увеличения допустимого количества внешних устройств. Дело в том, что каждый контроллер прерываний может обслуживать сигналы лишь от 8 устройств. Для обслуживания большего количества устройств контроллеры можно объединять, образуя из них веерообразную структуру. В современных машинах устанавливают два контроллера, увеличивая тем самым возможное число входных устройств до 15 (7 у ведущего и 8 у ведомого контроллеров).
К входным выводам IRQ1...IRQ7 и IRQ8...IRQ15 (IRQ - это сокращение от Interrupt Request, запрос прерывания) подключаются выводы устройств, на которых возникают сигналы прерываний. Выход ведущего контроллера подключается к входу INT микропроцессора, а выход ведомого - к входу IRQ2 ведущего. Основная функция контроллеров - передача сигналов запросов прерываний от внешних устройств на единственный вход прерываний микропроцессора. При этом, кроме сигнала INT, контроллеры передают в микропроцессор по линиям данных номер вектора, который образуется в контроллере путем сложения базового номера, записанного в одном из его регистров, с номером входной линии, по которой поступил запрос прерывания. Номера базовых векторов заносятся в контроллеры автоматически в процессе начальной загрузки компьютера. Для ведущего контроллера базовый вектор всегда равен 8, для ведомого - 70h. Таким образом, номера векторов, закрепленных за аппаратными прерываниями, лежат в диапазонах 8h...Fh и 70h...77h. Очевидно, что номера векторов аппаратных прерываний однозначно связаны с номерами линий, или уровнями IRQ, а через них - с конкретными устройствами компьютера. На рис. 1.11 указаны некоторые из стандартных устройств компьютера, работающих в режиме прерываний.
Процессор, получив сигнал прерывания, выполняет последовательность стандартных действий, обычно называемых процедурой прерывания. Подчеркнем, что здесь идет речь лишь о реакции самого процессора на сигналы прерываний, а не об алгоритмах обработки прерываний, предусматриваемых пользователем в программах обработки прерываний.
Объекты вычислительной системы, принимающие участие в процедуре прерывания, и их взаимодействие показаны на рис.1.12

Какие функции представляет прерывание BIOS INT10h? - student2.ru

Рис. 1.12. Процедура обслуживания прерывания.

Самое начало оперативной памяти от адреса 0000h до 03FFh отводится под векторы прерываний - четырехбайтовые области, в которых хранятся адреса обработчиков прерываний (ОбрПр на рис. 1.12). В два старшие байта каждого вектора записывается сегментный адрес обработчика, в два младшие - смещение (относительный адрес) точки входа в обработчик. Векторы, как и соответствующие им прерывания, имеют номера, причем вектор с номером 0 располагается, начиная с адреса 0, вектор 1 - с адреса 4, вектор 2 - с адреса 8 и т.д. Вектор с номером п занимает, таким образом, байты памяти от n*4 до n*4+3. Всего в выделенной под векторы области памяти помещается 256 векторов.
Получив сигнал на выполнение процедуры прерывания с определенным номером, процессор сохраняет в стеке выполняемой программы текущее содержимое трех регистров процессора: регистра флагов, CS и IP. Два последних числа образуют полный адрес возврата в прерванную программу. Далее процессор загружает CS и IP из соответствующего вектора прерываний, осуществляя, тем самым, переход на обработчик прерывания, связанный с этим вектором.
Обработчик прерываний всегда заканчивается командой iret (interrupt return, возврат из прерывания), выполняющей обратные действия - извлечение из стека сохраненных там слов и помещение их назад в регистры IP и CS, а также в регистр флагов. Это приводит к возврату в основную программу в ту самую точку, где она была прервана.
В действительности запросы на обработку прерываний могут иметь различную природу. Помимо описанных выше аппаратных прерывания от периферийных устройств, называемых часто внешними, имеются еще два типа прерываний: внутренние и программные.
Внутренние прерывания возбуждаются цепями самого процессора при возникновении одной из специально оговоренных ситуаций, например, при выполнении операции деления на ноль или при попытке выполнить несуществующую команду. За каждым из таких прерываний закреплен определенный вектор, номер которого известен процессору. Например, за делением на 0 закреплен вектор 0, а за неправильной командой - вектор 6. Если процессор сталкивается с одной из таких ситуаций, он выполняет описанную выше процедуру прерывания, используя закрепленный за этой ситуацией вектор прерывания.
Наконец, еще одним чрезвычайно важным типом прерываний являются программные прерывания. Они вызываются командой int с числовым аргументом, который рассматривается процессором, как номер вектора прерывания. Если в программе встречается, например, команда

int 13h

то процессор выполняет ту же процедуру прерывания, используя в качестве номера вектора операнд команды int. Программные прерывания применяются в первую очередь для вызова системных обслуживающих программ - функций DOS и BIOS. С командой int 2In вызова DOS мы уже сталкивались в примере 1-1 и будем встречаться еще многократно. В дальнейшем будут также приведены примеры использования команды int для вызова прикладных обработчиков программных прерываний.
Важно подчеркнуть, что описанные действия процессора выполняются совершенно одинаково для всех видов прерываний - внутренних, аппаратных и программных, хотя причины, возбуждающие процедуру прерывания, имеют принципиально разную природу.
Большая часть векторов прерываний зарезервирована для выполнения определенных действий; часть из них автоматически заполняется адресами системных программ при загрузке системы. Приведем краткую выдержку из таблицы векторов, позволяющую продемонстрировать разнообразие ее состава:

00h -внутреннее прерывание, деление на 0;
0lh -внутреннее прерывание, пошаговое выполнение (при TF=1);
02h -немаскируемое прерывание (вывод NMI процессора);
08h -аппаратное прерывание от системного таймера;
09h -аппаратное прерывание от клавиатуры;
0Eh -аппаратное прерывание от гибкого диска;
10h - программное прерывание, программы BIOS управления видеосистемой;
13h - программное прерывание, программы BIOS управления дисками;
16h - программное прерывание, программы BIOS управления клавиатурой;
IDh -не вектор, адрес таблицы видеопараметров, используемой BIOS;
lEh -не вектор, адрес таблицы параметров дискеты, используемой BIOS;
21h - программное прерывание, диспетчер функций DOS;
22h - программное прерывание, адрес перехода при завершении процесса, используемый DOS;
23h -программное прерывание, обработчик прерываний по <Ctrl>/C, используемый DOS;
25h - программное прерывание, абсолютное чтение диска (функция DOS);
26h - программное прерывание, абсолютная запись на диск (функция DOS);
60h...66h - зарезервировано для программных прерываний пользователя;
68h...6Fh - программные прерывания, свободные векторы;
70h -аппаратное прерывание от часов реального времени (с питанием от аккумулятора);
76h -аппаратное прерывание от жесткого диска;

Как видно из таблицы, векторы прерываний можно условно разбить
на следующие группы:
векторы внутренних прерываний процессора (0lh, 02h и др.);
векторы аппаратных прерываний (08h...0Fh и 70h...77h);
программы BIOS обслуживания аппаратуры компьютера (10h, 13h, 16h и др.);
программы DOS (21h, 22h, 23h и др.);
адреса системных таблиц BIOS (IDh, lEh и др.).
Системные программы, адреса которых хранятся в векторах прерываний, в большинстве своем являются всего лишь диспетчерами, открывающими доступ к большим группам программ, реализующих системные функции. Так, видеодрайвер BIOS (вектор 10h) включает программы смены видеорежима, управления курсором, задания цветовой палитры, загрузки шрифтов и многие другие. Особенно характерен в этом отношении вектор 21h, через который осуществляется вызов практически всех функций DOS: ввода с клавиатуры и вывода на экран, обслуживания файлов, каталогов и дисков, управления памятью и процессами, службы времени и т.д. Для вызова требуемой функции надо не только выполнить команду int с соответствующим номером, но и указать системе в одном из регистров (для этой цели всегда используется регистр АН) номер вызываемой функции. Иногда для "многофункциональных" функций приходится указывать еще и номер подфункции (в регистре AL).

Наши рекомендации