ГЛАВА 23
------------------------------------------------------------

Прерывания BIOS и DOS

Цель: Описать функции, доступные через прерывания BIOS и
DOS.

ВВЕДЕНИЕ
------------------------------------------------------------

Прерывание представляет собой операцию, которая приоста
навливает выполнение программ для специальных системных
действий. Необходимость прерываний обусловлено двумя
основными причинами: преднамеренный запрос таких действий,
как операции ввода-вывода на различные устройства и
непредвиденные программные ошибки (например, переполнение
при делении).
Система BIOS (Basic Input/Output System) находится в ROM
и управляет всеми прерываниями в системе. В предыдущих
главах уже использовались некоторые прерывания для вывода на
экран дисковых операций ввода-вывода и печати. В этой главе
описаны различные BIOS- и DOS-прерывания, резидентные
программы и команды IN и OUT.

ОБСЛУЖИВАНИЕ ПРЕРЫВАНИЙ
------------------------------------------------------------

В компьютерах IBM PC ROM находится по адресу FFFF0H. При
включении компьютера процессор устанавливает состояние
сброса, выполняет контроль четности, устанавливает в
регистре CS значение FFFFH, а в регистре IP - нуль. Первая
выполняемая команда поэтому находится по адресу FFFF:0 или
FFFF0, что является точкой входа в BIOS. BIOS проверяет
различные порты компьютера для определения и инициализации
подключенных устрой ств. Затем BIOS создает в начале памяти
(по адресу 0) таблицу прерываний, которая содержит адреса
обработчиков прерываний, и выполняет две операции INT 11H
(запрос списка присоединенного оборудования) и INT 12H
(запрос размера физической памяти).
Следующим шагом BIOS определяет имеется ли на диске или
дискете операционная система DOS. Если обнаружена системная
дискета, то BIOS выполняет прерывание INT 19H для доступа к
первому сектору диска, содержащему блок начальной загрузки.
Этот блок представляет собой программу, которая считывает
системные файлы IBMBIO.COM, IBMDOS.COM и COMMAND.COM с диска
в память. После этого память имеет следующее распределение:

Таблица векторов прерываний
Данные BIOS
IBMBIO.COM и IBMDOS.COM
Резидентная часть COMMAND.COM

Доступная память для прикладных программ
Транзитная часть COMMAND.COM
Конец RAM (ОЗУ)
ROM BASIC
ROM BIOS

Внешние устройства передают сигнал внимания через контакт
INTR в процессор. Процессор реагирует на этот запрос, если
флаг прерывания IF установлен в 1 (прерывание разрешено), и
(в большинстве случаев) игнорирует запрос, если флаг IF
установлен в 0 (прерывание запрещено).
Операнд в команде прерывания, например, INT 12H, содержит
тип прерывания, который идентифицирует запрос. Для каждого
типа система содержит адрес в таблице векторов прерываний,
начинающейся по адресу 0000. Так как в таблице имеется 256
четырехбайтовых элементов, то она занимает первые 1024
байта памяти от шест.0 до шест.3FF. Каждый элемент таблицы
указывает на подпрограмму обработки указанного типа
прерывания и содержит адрес кодового сегмента и смещение,
которые при прерывании устанавливаются в регистры CS и IP
соответственно. Список элементов таблицы векторов прерываний
приведен на рис. 23.1.
Прерывание заносит в стек содержимое флагового регистра,
регистра CS и регистра IP. Например, для прерывания 12H
(которое возвращает в регистре AX размер памяти) адрес
элемента таблицы равен шест.0048 (шест.12 х 4 = шест.48).
Операция выделяет четырехбайтовый элемент по адресу шест.
0048 и заносит два байта в регистр IP и два байта в регистр
SS. Адрес, который получается в регистровой паре CS:IP,
представляет собой адрес начала подпрограммы в области BIOS,
которая получает управление. Возврат из этой подпрограммы
осуществляется командой IRET (Interrupt Return), которая
восстанавливает флаги и регистры CS и IP из стека и
передает управление на команду, следующую за выполненной
командой прерывания.

ПРЕРЫВАНИЯ BIOS
------------------------------------------------------------

В данном разделе представлены основные прерывания BIOS.

INT 05H (Печать экрана). Приводит к передаче содержимого
экрана на печатающее устройство. INT 05H применяется для
внутренних целей, т.е. из программ, клавиши Ctrl/PrtSc
активизируют печать с клавиатуры. Данная операция маскирует
прерывания и сохраняет позицию курсора.

------------------------------------------------------------

Адрес Функция прерыаний
(шест) (шест)
0-3 0 Деление на нуль
4-7 1 Пошаговый режим (трассировка DEBUG)

8-B 2 Немаскированное прерывание (NMI)
C-F 3 Точка останова (используется в DEBUG)
10-13 4 Переполнение регистра
14-17 5 Печать экрана
18-1F 6,7 Зарезервировано
20-23 8 Сигнал от траймера
24-27 9 Сигнал от клавиатуры
28-37 A,B,C,D Используются в компьютерах AT
38-3B E Сигнал от дискетного дисковода
3C-3F F Используется для принтера
40-43 10 Управление дисплеем (см.гл. 8, 9, 10)
44-47 11 Запрос оборудования (см.гл.9)
48-4B 12 Запрос размера памяти (см.гл.2)
4C-4F 13 Дисковые операции ввода-вывода (см.гл.18)
50-53 14 Управление коммуникационным адаптером
54-57 15 Кассетные операции и спец. функции AT
58-5B 16 Ввод с клавиатуры (см.гл.9)
5C-5F 17 Вывод на принтер (см.гл.19)
60-63 18 Обращение к BASIC, встроенному в ROM
64-67 19 Перезапуск системы
68-6B 1A Запрос и установка времени и даты
6C-6F 1B Прерывание от клавиатуры
70-73 1C Прерывание от таймера
74-77 1D Адрес таблицы параметров дисплея
78-7B 1E Адрес таблицы параметров дисковода
7C-7F 1F Адрес таблицы графических символов
80-83 20 Нормальное завершение программы (DOS)
84-87 21 Обращение к функциям DOS
88-8B 22 Адрес обработки завершения задачи (DOS)
8C-8F 23 Адрес реакции по Ctrl/Break (DOS)
90-93 24 Адрес реакции на фатальную ошибку (DOS)
94-97 25 Абсолютное чтение с диска (DOS)
98-9B 26 Абсолютная запись на диск (DOS)
97-9F 27 Создание резидентной программы (DOS)
AO-FF 28-3F Другие функции DOS
100-1FF 40-7F Зарезервировано
200-217 80-85 Зарезервировано для BASIC
218-3C3 86-F0 Используются BASIC-интерпретатором
3C4-3FF F1-FF Зарезервировано

Примечание: Прерывания 00-1F относятся к BIOS, прерывания
20-FF относятся к DOS и BASIC.

------------------------------------------------------------
Рис.23.1. Таблица адресов прерываний.

ПРЕРЫВАНИЯ BIOS
------------------------------------------------------------

В данном разделе приведены основные прерывания BIOS.

INT 05H Печать экрана. Выполняет вывод содержимого экрана
на печатающее устройство. Команда INT 05H выполняет данную
операцию из программы, а нажатие клавишей Ctrl/PrtSc - с
клавиатуры. Операция запрещает прерывания и сохраняет
позицию курсора.

INT 10H Управление дисплеем. Обеспечивает экранные и кла
виатурные операции, детельно описанные в главе 9.

INT 11H Запрос списка присоединенного оборудования. Опре
деляет наличие различных устройств в системе, результирующее
значение возвращает в регистре AX. При включении компьютера
система выполняет эту операцию и сохраняет содержимое AX в
памяти по адресу шест.410. Значения битов в регистре AX:

Бит Устройство
15,14 Число подключенных принтеров
13 Последовательный принтер
12 Игровой адаптер
11-9 Число последовательных адаптеров стыка RS232
7,6 Число дискетных дисководов, при бите 0=1:
00=1, 01=2, 10=3 и 11=4
5,4 Начальный видео режим:
00 = неиспользуется
01 = 40х25 плюс цвет
10 = 80х25 плюс цвет
11 = 80х25 черно-белый режим
1 Значение 1 говорит о наличии сопроцессора
0 Значение 1 говорит о наличии одного или более
дисковых устройств и загрузка операционной
системы должна осуществляться с диска

INT 12H Запрос размера физической памяти. Возвращает в
регистре AX размер памяти в килобайтах, например, шест.200
соответствует памяти в 512 К. Данная операция полезна для
выравнивания размера программы в соответствии с доступной
памятью.

INT 13H Дисковые операции ввода-вывода. Обеспечивает опе
рации ввода-вывода для дискет и винчестера, рассмотренные в
главе 16.

INT 14H Управление коммуникационным адаптером. Обеспечи
вает последовательный ввод-вывод через коммуникационный порт
RS232. Регистр DX должен содержать номер (0 или 1) адаптера
стыка RS232. Четыре типа операции, определяемые регистром
AH, выполняют прием и передачу символов и возвращают в
регистре AX байт состояния коммуникационного порта.

INT 15H Кассетные операции ввода-вывода и специальные
функции для компьютеров AT. Обеспечивает операции ввода-
вывода для касетного магнитофона, а также расширенные
операции для компьютеров AT.

INT 16H Ввод с клавиатуры. Обеспечивает три типа команд
ввода с клавиатуры, подробно описанные в главе 9.

INT 17H Вывод на принтер. Обеспечивает вывод данных на пе
чатающее устройство. Подробно рассмотрено в главе 19.

INT 18H Обращение к BASIC, встроенному в ROM. Вызывает
BASIC-интерпретатор, находящийся в постоянной памяти ROM.

INT 19H Перезапуск системы. Данная операция при доступном
диске считывает сектор 1 с дорожки 0 в область начальной
загрузки в памяти (сегмент 0, смещение 7C00) и передает
управление по этому адресу. Если дисковод не доступен, то
операция передает управление через INT 18H в ROM BASIC.
Данная операция не очищает экран и не инициализирует данные
в ROM BASIC, поэтому её можно использовать из программы.

INT 1AH Запрос и установка текущего времени и даты. Считы
вает и записывает показание часов в соответствии со
значением в регистре AH. Для определения продолжительности
выполнения программы можно перед началом выполнения
установить часы в 0, а после считать текущее время. Отсчет
времени идет примерно 18,2 раза в секунду. Значение в
регистре AH соответствует следующим операциям:
AH=00 Запрос времени. В регистре CX устанавливается стар
шая часть значения, а в регистре DX - младшая. Если после
последнего запроса прошло 24 часа, то в регистре AL будет не
нулевое значение.
AH=01 Установка времени. Время устанавливается по регист
рам CX (старшая часть значения) и DX (младшая часть значе
ния).
Коды 02 и 06 управляют временем и датой для AT.

INT 1FH Адрес таблицы графических символов. В графическом
режиме имеется доступ к символам с кодами 128-255 в 1К
таблице, содержащей по восемь байт на каждый символ. Прямой
доступ в графическом режиме обеспечивается только к первым
128 ASCII-символам (от 0 до 127).

ПРЕРЫВАНИЯ DOS
------------------------------------------------------------

Во время своей работы BIOS использует два модуля DOS:
IBMBIO.COM и IBMDOS.COM. Так как модули DOS обеспечивают
большое количество разных дополнительных проверок, то
операция DOS обычно проще в использовании и менее машинно
зависимы, чем их BIOS аналоги.
Модуль IBMBIO.COM обеспечивает интерфейс с BIOS низкого
уровня. Эта программа выполняет управление вводом-выводом
при чтении данных из внешних устройств в память и записи из
памяти на внешние устройства.

Модуль IBMDOS.COM содержит средства управления файлами и
ряд сервисных функций, таких как блокирование и деблокиро
вание записей. Когда пользовательская программа выдает
запрос INT 21H, то в программу IBMDOS через регистры
передается определенная информация. Затем программа IBMDOS
транслирует эту информацию в один или несколько вызовов
IBMBIO, которая в свою очередь вызывает BIOS. Указанные
связи приведены на следующей схеме:

Пользовательский Высший Низший ROM Внешний
уровень уровень уровень уровень
------------¬ -----------¬ -----------¬
¦Программный¦ ¦ DOS ¦ ¦ DOS ¦ -----¬ -----------¬
¦запрос в/в ¦ ¦IBMDOS.COM¦ ¦IBMBIO.COM¦ ¦BIOS¦ ¦Устройство¦
L------------ L----------- L----------- L----- L-----------

Как показано выше, прерывания от шест.20 до шест.62
зарезервированы для операций DOS. Ниже приведены наиболее
основные из них:

INT 20H Завершение программы. Запрос завершает выполнение
программы и передает управление в DOS. Данный запрос обычно
находится в основной процедуре.

INT 21H Запрос функций DOS. Основная операция DOS, вызыва
ющая определенную функцию в соответствии с кодом в регистре
AH. Назначение функций DOS описано в следующем разделе.

INT 22H Адрес подпрограммы обработки завершения задачи.
(см.INT 24H).

INT 23H Адрес подпрограммы реакции на Ctrl/Break. (см.INT
24H).

INT 24H Адрес подпрограммы реакции на фатальную ошибку. В
этом элементе и в двух предыдущих содержатся адреса, которые
инициализируются системой в префиксе программного сегмента
и, которые можно изменить для своих целей. Подробности приве
дены в техническом описании DOS.

INT 25H Абсолютное чтение с диска. См.гл.17.

INT 26H Абсолютная запись на диск. См.гл.17.

INT 27H Завершение программы, оставляющее её резедентной.
Позволяет сохранить COM-программу в памяти. Подробно данная
операция рассмотренна в последующем разделе "Резиденные
прогарммы".

ФУНКЦИИ ПРЕРЫВАНИЯ DOS INT 21H
------------------------------------------------------------

Ниже приведены базовые функции для прерывания DOS INT
21H. Код функции устанавливается в регистре AH:

00 Завершение программы (аналогично INT 20H).
01 Ввод символа с клавиатуры с эхом на экран.
02 Вывод символа на экран.
03 Ввод символа из асинх. коммуникационного канала.
04 Вывод символа на асинх. коммуникационный канал.
Используются технологии uCoz