Операционная система MSDOS

Обзор прерываний BIOS



1.4. Обзор прерываний BIOS

Как правило, любая программа работает с тем или иным устройством ввода/вывода. Программы для первых ЭВМ работали непосредственно с портами и регистрами этих устройств. Модули, выполняющие такие стандартные действия, как ввод данных с перфокарт или печать результатов вычислений, входили в состав пользовательских программ.

В начале своего развития микропроцессорные системы имели в своем составе программу, называемую "монитор". Эта программа обычно находилась в постоянном запоминающем устройстве и обслуживала устройства ввода/вывода: клавиатуру, дисплей, кассетный накопитель на магнитной ленте и др. Диалоговая часть монитора позволяла выполнять некоторые операторские функции: загрузку и запуск программы, отладку программы в пошаговом режиме, печать текстов, просмотр и редактирование содержимого памяти и т.п. Но самое главное - прикладные программы, составленные для этих систем, могли пользоваться модулями монитора для работы с периферийной аппаратурой и для выполнения других функций.

Программа уже не содержала все необходимые для ее работы модули, а пользовалась "стандартными" услугами программы-монитора. Такая организация программы не только уменьшила размер ее загрузочного модуля, но и позволила программистам сосредоточить свои усилия на решении основной задачи.

Как программа пользовалась услугами монитора? Механизм взаимодействия программы пользователя и монитора был реализован по-разному в разных системах. В худшем случае прикладная программа пользовалась известными абсолютными адресами модулей монитора, в лучшем - использовала специальные таблицы адресов программных модулей.

К сожалению, разные системы были несовместимы по составу модулей монитора и механизму их вызова, что сильно затрудняло, если не совершенно исключало их программную совместимость.

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

Выпускаемые различными фирмами компьютеры, совместимые с IBM PC, могут немного отличаться по типу периферийного оборудования, но для достижения совместимости с IBM PC модули BIOS нивелируют эти различия, предоставляя в распоряжение программы пользователя стандартный набор модулей для работы с устройствами ввода/вывода.

Не будет преувеличением сказать, что одна из причин такого невиданного успеха компьютера IBM PC на рынке персональных компьютеров - наличие хорошо продуманного стандартного интерфейса модулей BIOS и прикладных программ. Именно благодаря этому интерфейсу достигается почти стопроцентная совместимость по программному обеспечению компьютеров этого типа, выпускаемых разными фирмами.

В этом разделе книги мы расскажем о том, как прикладные программы, составленные для компьютера, совместимого с IBM PC, могут пользоваться модулями BIOS для работы со стандартной периферией, затем приведем краткий обзор основных модулей BIOS.

Напомним вам, что такое программные прерывания, так как именно они используются для вызова модулей BIOS.

В начале оперативной памяти персонального компьютера (в пределах первого килобайта) находится так называемая векторная таблица прерываний. Она состоит из 256 ячеек, хранящих адреса программ-обработчиков прерывания. Мы будем подробно изучать эту таблицу в главе 4, а сейчас вспомним машинную команду INT<n>.

По этой команде содержимое ячейки векторной таблицы прерываний с номером n помещается в адресные регистры процессора, причем в стеке запоминается текущее содержимое адресных регистров. Управление передается по адресу, записанному в ячейке таблицы. Программа-обработчик прерывания должна заканчиваться командой IRET, по которой из стека извлекается старое значение адресных регистров и управление передается обратно в программу, вызвавшую прерывание командой INT <n>.

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

Для вызова модуля BIOS программа использует команду INT <n> с соответствующим номером n. Программа передает параметры модулям BIOS через регистры процессора, результат работы модуля возвращается также в регистрах.

Не все номера прерываний n используются BIOS. Часть из них предназначена для аппаратных прерываний от устройств ввода/вывода, часть зарезервирована для DOS, часть - для программ пользователя.

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



Содержание раздела