Открыть сервис

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 →