INT 13h¶
INT 13h — это программное прерывание BIOS (базовой системы ввода-вывода) для IBM PC-совместимых компьютеров, обеспечивающее низкоуровневый доступ к дисковым накопителям. Прерывание реализует функции чтения, записи, проверки и управления жёсткими дисками, гибкими дисками и, в более поздних версиях, оптическими приводами. INT 13h является стандартным интерфейсом между операционной системой или загрузчиком и аппаратным обеспечением хранения данных на этапе до загрузки драйверов устройств.
¶История и назначение
Прерывание INT 13h было введено в 1981 году вместе с первым IBM PC на базе процессора Intel 8088. В ранних версиях BIOS оно поддерживало только гибкие диски (флоппи-диски) объёмом до 360 КБ. С появлением жёстких дисков в 1983 году (IBM PC/XT) функциональность была расширена для работы с накопителями типа MFM и RLL.
Основное назначение INT 13h — предоставить универсальный программный интерфейс для работы с дисками, который не зависит от конкретной модели контроллера или накопителя. Это позволяет операционным системам и загрузчикам (таким как MS-DOS, Windows 9x, GRUB) обращаться к дискам без необходимости знать детали аппаратной реализации.
¶Механизм вызова
Вызов INT 13h осуществляется через регистры процессора x86. Регистр AH содержит номер функции, а остальные регистры (AL, CX, DX, ES:BX) передают параметры — номер диска, номер дорожки, сектора, головки, адрес буфера в памяти.
Основные регистры:
- AH — номер функции;
- AL — количество секторов (или параметры в зависимости от функции);
- CH, CL — номер дорожки и сектора (в упакованном формате);
- DH, DL — номер головки и номер диска (DL=0x00 для первого флоппи-диска, DL=0x80 для первого жёсткого диска);
- ES:BX — указатель на буфер данных в памяти.
После выполнения прерывания флаг CF (carry flag) устанавливается при ошибке, а регистр AH содержит код ошибки. При успешном выполнении CF сброшен.
¶Основные функции
INT 13h включает более 40 функций, среди которых ключевыми являются:
| Функция (AH) | Назначение |
|---|---|
| 00h | Сброс дискового контроллера |
| 02h | Чтение секторов |
| 03h | Запись секторов |
| 04h | Проверка секторов |
| 05h | Форматирование дорожки |
| 08h | Получение параметров диска (геометрия) |
| 15h | Получение типа диска |
| 41h | Проверка поддержки расширений (LBA) |
| 42h | Чтение секторов с LBA-адресацией |
| 43h | Запись секторов с LBA-адресацией |
| 48h | Получение расширенных параметров диска |
¶Адресация CHS и LBA
Ранние версии INT 13h использовали адресацию CHS (Cylinder-Head-Sector), где положение сектора определялось тремя координатами: номером цилиндра, головки и сектора. Ограничения CHS-адресации (максимум 1024 цилиндра, 256 головок, 63 сектора) ограничивали адресуемое пространство примерно 8,4 ГБ.
В 1994 году спецификация Phoenix BIOS и ATA-2 ввела расширения INT 13h (Ext13h) с поддержкой 64-битной адресации LBA (Logical Block Addressing). Расширения позволили адресовать диски объёмом до 2 ТБ (с 32-битными номерами блоков) и позднее до 8 ЗБ (с 64-битными). Функции 41h–4Fh обеспечивают доступ к этим расширениям.
¶Применение
INT 13h используется в следующих сценариях:
- Загрузка операционной системы: BIOS вызывает INT 13h для чтения загрузочного сектора (MBR) с диска в память и передачи управления загрузчику.
- Работа в реальном режиме: Операционные системы, работающие в реальном режиме (например, MS-DOS), используют INT 13h для всех дисковых операций до загрузки собственных драйверов.
- Аварийное восстановление: Утилиты низкоуровневого доступа к дискам (например, Norton Disk Editor, TestDisk) используют INT 13h для чтения и восстановления данных при повреждении файловой системы.
- Загрузчики: Мультизагрузчики (GRUB, LILO) на ранних этапах работы обращаются к INT 13h для чтения ядра операционной системы с диска.
¶Ограничения и устаревание
С переходом к 32-разрядным операционным системам и появлением защищённого режима процессора, прямой вызов INT 13h стал невозможен без переключения в реальный режим. Современные ОС (Windows NT, Linux) используют собственные драйверы устройств, работающие через порты ввода-вывода или интерфейсы UEFI. Тем не менее, INT 13h остаётся критически важным для:
- Процесса загрузки в режиме Legacy BIOS (CSM);
- Работы DOS-приложений в эмуляторах (DOSBox, QEMU);
- Встроенных систем и промышленных контроллеров на базе x86.
В системах UEFI вместо INT 13h используется протокол EFI_DISK_IO, однако для совместимости с устаревшими ОС предусмотрен модуль поддержки совместимости (CSM), эмулирующий вызовы INT 13h.
¶Коды ошибок
При возникновении ошибки INT 13h возвращает код в регистре AH. Наиболее распространённые коды:
- 01h — неверная команда;
- 02h — адресная метка не найдена;
- 03h — попытка записи на защищённый диск;
- 04h — сектор не найден;
- 06h — смена дискеты (для флоппи-дисков);
- 0Ch — медиа-тип не найден;
- 20h — сбой контроллера;
- AAн — привод не готов.
¶Значение для совместимости
INT 13h является одним из ключевых элементов обратной совместимости архитектуры x86. Благодаря стандартизации этого интерфейса, программное обеспечение, написанное для IBM PC 1980-х годов, продолжает работать на современных компьютерах в режимах эмуляции. Это прерывание также используется в виртуальных машинах (VMware, VirtualBox, QEMU) для обеспечения совместимости с гостевыми операционными системами, не имеющими собственных драйверов.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


