Каждый уровень выполняет несколько конкретных функций, причем все они работают как для дисководов, так и для жестких дисков, хотя на уровне Int 13h существуют различия между работой с дисководами и жесткими дисками. Контроллеры дисководов и жестких дисков существенно отличаются друг от друга, но уже на уровне обращения к дискам через Int 13h никакой разницы в работе нет. Рассмотрим более детально работу каждого уровня дискового интерфейса.
Прерывание Int 21h
Это прерывание находится на самом верхнем уровне в иерархии дискового интерфейса. Оно позволяет выполнять наиболее сложные операции с дисками. Например, если пользовательскому приложению нужно создать каталог, ему достаточно вызвать функцию 39h прерывания Int 21h. Эта функция самостоятельно выполнит все необходимые для создания нового каталога действия, включая модификацию структуры каталогов и секторов FAT. Все, что требуется передать данной функции, — это имя создаваемого подкаталога. Int 21h выполняет значительный объем работы как при создании каталога, так и при других дисковых операциях, поэтому в большинстве случаев приложения используют его для работы с дисками.
Прерывания Int 25h и Int 26h
Эти прерывания выполняют операции значительно более низкого уровня по сравнению с Int 2 lh. Они могут только читать с диска указанные секторы (Int 25h) или записывать их на диск (Int 26h). Если вы захотите с помощью только этих функций создать на диске новый каталог, придется выполнить ряд действий.
■ Точно рассчитать, какой именно каталог и какие секторы FAT необходимо модифицировать.
■ Прочитать эти секторы с помощью Int 25h.
■ Изменить содержимое считанных секторов так, чтобы в них находилась информация о новом каталоге.
■ Записать измененные секторы на диск с помощью Int 26h.
И это только основные моменты. На самом деле все гораздо сложнее, особенно если учесть количество секторов, которые нужно изменить. Кроме того, все секторы при использовании Int 25h и Int 26h нумеруются, начиная с нуля, и доступ к ним происходит именно по этим номерам. Поэтому необходимо определить, где находятся секторы, которые нужно модифицировать. Учитывая все эти обстоятельства, большинство программистов предпочитают использовать Int 21h, чтобы каждый раз не писать заново дисковый интерфейс.
Прерываниями Int 25h и Int 26h обычно пользуются только программы редактирования диска на уровне секторов. Такие программы могут работать только с теми секторами, которые входят в область какого-либо логического диска DOS.
Прерывание Int 13h
Следующий (еще более низкий) уровень дискового интерфейса — прерывание Int 13h, обработчик которого обычно содержится в ROM BIOS, хотя он может быть заменен обработчиком из какого-либо драйвера. Поскольку операционная система загружается с диска, ей требуется находящийся в ROM BIOS обработчик Int 13h, так как никакие