ИНТ 13ч сокращение для Вызов прерывания BIOS 13шестнадцатеричный, 20-е вектор прерывания в x86компьютерная система на базе (потомка IBM PC). В BIOS обычно создает реальный режимобработчик прерывания в этом векторе, который предоставляет услуги чтения и записи секторных жестких дисков и гибких дисков с использованием сектор головки блока цилиндров (CHS) адресация. BIOS современных ПК также включает функции расширения INT 13h, разработанные IBM и Microsoft в 1992 году, которые предоставляют те же услуги доступа к диску с использованием 64-разрядных систем. LBA адресация; с небольшими дополнениями, они были квазистандартизированы Phoenix Technologies и другими как EDD (Расширенный дисковый накопитель) Расширения BIOS.
Современные компьютеры поставляются с BIOS INT 13h и UEFI функциональность, которая предоставляет те же услуги и многое другое, за исключением UEFI Class 3, который полностью удаляет CSM поэтому отсутствует INT 13h и другие прерывания. Обычно драйверы UEFI используют LBA-адресация вместо CHS-адресации.
Под реальный режим операционные системы, такие как ДОСвызов INT 13h приведет к переходу в код ROM-BIOS компьютера для низкоуровневые дисковые службы, который будет выполнять для программы операции чтения или записи на физический диск. В DOS он служит низкоуровневым интерфейсом для встроенных драйверов блочных устройств для жесткие диски и дискеты. Это позволяет INT 25h и INT 26h обеспечивать абсолютные функции чтения / записи на диск для логических секторов в ТОЛСТЫЙфайловая система драйвер в ядре DOS, который обрабатывает запросы, связанные с файлами, через DOS API (ИНТ 21ч) функции.
Под защищенный режим операционные системы, такие как Microsoft Windows NT производные (например, NT4, 2000, XP и Server 2003) и Linux с Dosemu, ОС перехватывает вызов и передает его собственному механизму дискового ввода-вывода операционной системы. Windows 9x и Windows для рабочих групп 3.11 также обходить процедуры BIOS при использовании 32-битный доступ к диску. Помимо выполнения низкоуровневого доступа к диску, вызовы INT 13h и соответствующие структуры данных BIOS также предоставляют информацию о типах и емкости дисков (или других DASD устройства), подключенные к системе; при загрузке ОС в защищенном режиме она может использовать эту информацию из BIOS для перечисления дискового оборудования, чтобы оно (ОС) могло загрузить и настроить соответствующие драйверы дискового ввода-вывода.
Оригинальный интерфейс BIOS INT 13h в реальном режиме поддерживает диски размером до 8 ГБ, используя то, что обычно называют физическая адресация CHS. Это ограничение исходит из аппаратного интерфейса IBM PC / XT дисковое оборудование. BIOS использовал сектор головки блока цилиндров (CHS) адрес, указанный в вызове INT 13h, и передал его непосредственно на аппаратный интерфейс. Меньший предел, около 504 МБ, был наложен комбинацией ограничений адресации CHS, используемых BIOS, и жестких дисков ATA, которые не похожи друг на друга. Когда пределы адресации CHS как BIOS, так и ATA объединяются (т. Е. Когда они применяются одновременно), количество 512-байтовых секторов, которые могут быть адресованы, составляет в общей сложности около 504 МБ.
Предел 504 МБ был преодолен с использованием Перевод CHS, метод, с помощью которого BIOS имитирует фиктивную геометрию CHS на интерфейсе INT 13h, при взаимодействии с диском ATA, используя собственную логическую геометрию CHS. (К тому времени, когда приблизился барьер в 504 МБ, диски ATA задолго до этого перестали отображать свои реальные параметры физической геометрии на внешнем интерфейсе ATA.) Трансляция позволяет BIOS, все еще использующему адресацию CHS, эффективно адресовать диски ATA большего размера. ровно до 8064 МБ, что является естественной емкостью только интерфейса BIOS CHS. (Интерфейс ATA имеет гораздо большую емкость адресации CHS, поэтому, как только "вмешательство" ограничений CHS BIOS и ATA было устранено путем адресации, значительным было только меньшее ограничение BIOS.) Перевод CHS иногда упоминается как логическая адресация CHS, но на самом деле это неправильное название, поскольку ко времени разработки этой BIOS адреса ATA CHS уже были логическими, а не физическими. Предел 8064 МБ возникает из-за комбинации соглашения о вызовах на основе значения регистра, используемого в интерфейсе INT 13h, и цели поддержания обратной совместимости - диктуя, что формат или размер адресов CHS, передаваемых в INT 13h, не может быть изменен для добавления дополнительных битов. в одно из полей, например поле Номер цилиндра. Этот предел использует 1024 цилиндра, 256 головок, 63 сектора и 512-байтовые блоки, что позволяет адресовать ровно 7,875 ГиБ (1024 * 256 * 63 * 512 байтов). Вкратце было несколько BIOS, которые предлагали несовместимые версии этого интерфейса - например, AWARD AT BIOS и AMI 386sx BIOS были расширены для обработки до 4096 цилиндров путем помещения битов 10 и 11 номера цилиндра в биты 6 и 7 зарегистрировать DH - но в конечном итоге компьютерная индустрия стандартизировала интерфейс, разработанный Microid Research («MR BIOS») в 1989 году.[нужна цитата]
Все версии MS-DOS, (включая MS-DOS 7 и Windows 95) есть ошибка, которая предотвращает загрузку дисков с 256 головками (значение регистра 0xFF), поэтому многие современные BIOS предоставляют сопоставления трансляции CHS максимум с 255 (0xFE) головы,[1][2] таким образом уменьшая общее адресное пространство точно до 8032,5 МБ (примерно 7,844 ГБ).[3]
Для поддержки адресации даже больших дисков используется интерфейс, известный как INT 13h Расширения был представлен IBM и Microsoft, затем переиздан и немного расширен Phoenix Technologies как часть Сервисы расширенных дисков BIOS (EDD).[4][5] Он определяет новые функции в службе INT 13h, все из которых имеют номера функций больше 40h, которые используют 64-битные логическая адресация блока (LBA), что позволяет адресовать до 8 ЗиБ. (Диск ATA также может поддерживать 28-битный или 48-битный LBA, что позволяет использовать до 128 ГиБ или 128 PiB соответственно, при условии, что размер сектора / блока составляет 512 байт). Это «пакетный» интерфейс, потому что он использует указатель на пакет информации, а не на основе регистрового соглашения о вызовах исходного интерфейса INT 13h. Этот пакет представляет собой очень простую структуру данных, которая содержит версию интерфейса, размер данных и LBA. Для обеспечения обратной совместимости программного обеспечения расширенные функции реализуются вместе с исходными функциями CHS, и вызовы функций из обоих наборов могут быть смешаны, даже для одного и того же диска, с оговоркой, что функции CHS не могут достичь более первых 8064 МБ диск.
Некоторые драйверы кеша сбрасывают свои буферы при обнаружении этого. ДОС обходится путем прямой выдачи INT 13h из приложений. Фиктивное чтение через INT 13h может использоваться как один из нескольких методов для принудительной очистки кеша для неизвестных кешей (например, перед перезагрузкой).[1][2]
AMI BIOS примерно из 1990–1991 гг. не выровненные буферы. Некоторые DOS и TSR программирует включение прерывания clobber и регистрирует так ПК DOS и MS-DOS установить собственные фильтры, чтобы предотвратить это.[6]
Форматировать дорожку Установить флаги плохого сектора
AH = 07ч
Форматировать диск, начиная с дорожки
AH = 08ч
Чтение параметров привода
AH = 09ч
HD
Инициализировать дисковый контроллер
AH = 0Ah
HD
Чтение длинных секторов с диска
AH = 0Bh
HD
Запись длинных секторов на диск
AH = 0Ch
HD
Переместить приводную головку к цилиндру
AH = 0Dh
HD
Сбросить диски
AH = 0Eh
PS / 2
Проверка чтения контроллера
AH = 0Fh
PS / 2
Тест записи контроллера
AH = 10ч
HD
Проверьте, готов ли диск
AH = 11ч
HD
Перекалибровать привод
AH = 12 часов
PS / 2
Тест ОЗУ контроллера
AH = 13ч
PS / 2
Тест драйв
AH = 14ч
HD
Диагностика контроллера
AH = 15 часов
Чтение типа привода
AH = 16ч
FD
Обнаружение смены носителя
AH = 17ч
FD
Установить тип носителя для формата (используется версиями DOS <= 3.1)
AH = 18ч
FD
Установить тип носителя для формата (используется версиями DOS> = 3.2)
AH = 19ч
Парковые головы
AH = 41ч
EXT
Проверьте, доступны ли расширения
AH = 42ч
EXT
Чтение секторов с диска
AH = 43ч
EXT
Запись секторов на диск
AH = 44ч
EXT
Проверить сектора
AH = 45 часов
EXT
Блокировать / разблокировать диск
AH = 46ч
EXT
Извлечь диск
AH = 47ч
EXT
Переместить привод в сектор
AH = 48ч
EXT
Чтение параметров привода
AH = 49ч
EXT
Обнаружение смены носителя
AH = 4Bh
EXT
Получить тип эмуляции диска
Если второй столбец пуст, функция может использоваться как для гибкого, так и для жесткого диска.
FD: только для гибких дисков.
HD: только для жесткого диска.
PS / 2: только для жесткого диска в системе PS / 2.
EXT: часть ИНТ 13ч Расширения, написанные в 1990-х годах для поддержки жестких дисков с более чем 8 ГБ.
ИНТ 13ч AH = 00ч: Сбросить дисковую систему
Параметры
AH
00ч
DL
Диск (установленный бит 7 означает сброс как жесткого, так и гибкого диска)
Полученные результаты
CF
Установить при ошибке
AH
Код возврата
ИНТ 13 ч AH = 01 ч: Получить статус последней операции диска
Параметры
AH
01ч
DL
Водить машину
Бит 7 = 0 для дисковода гибких дисков, бит 7 = 1 для фиксированного дисковода
Полученные результаты
AH
Код возврата
00ч
Успех
01ч
Неверная команда
02ч
Не удается найти адресную метку
03ч
Попытка записи на защищенный от записи диск
04ч
Сектор не найден
05ч
Сбросить сбой
06ч
Строка смены диска 'активна'
07ч
Ошибка действия параметра диска
08ч
DMA переполнение
09ч
Попытка DMA через границу 64 КБ
0Ач
Обнаружен плохой сектор
0Bh
Обнаружен неисправный цилиндр (гусеница)
0Ч
Тип носителя не найден
0Dh
Неверное количество секторов
0Eh
Обнаружена адресная метка управляющих данных
0Fh
DMA вне диапазона
10ч
Ошибка данных CRC / ECC
11ч
Ошибка данных с исправлением ECC
20ч
Сбой контроллера
40ч
Ищите неудачу
80ч
Время ожидания диска истекло, предполагается, что он не готов
AAh
Диск не готов
BBh
Неопределенная ошибка
CCh
Ошибка записи
E0h
Ошибка статуса
FFh
Ошибка операции Sense
CF
Установить при ошибке, очистить, если ошибок нет
ИНТ 13 ч AH = 02 ч: Чтение секторов с диска
Параметры
AH
02ч
AL
Секторы для считывания подсчета
CH
Цилиндр
CL
Сектор
DH
Голова
DL
Водить машину
ES: BX
Указатель адреса буфера
Полученные результаты
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
AL
Фактическое количество прочитанных секторов
Замечания
Зарегистрировать CX содержит как номер цилиндра (10 битывозможные значения от 0 до 1023) и номер сектора (6 битов, возможные значения от 1 до 63). Биты цилиндра и сектора пронумерованы ниже:
CX: = ((цилиндр и 255) shl 8) или ((цилиндр и 768) shr 2) или сектор; цилиндр: = ((CX и 0xFF00) shr 8) или ((CX и 0xC0) shl 2) сектор: = CX и 63;
Адресация буфера должна гарантировать, что полный буфер является внутри данного сегмента, т.е. (BX + size_of_buffer) <= 10000hВ противном случае прерывание может завершиться ошибкой с некоторыми версиями BIOS или оборудования.
Пример
Предположим, вы хотите прочитать 16 секторов (= 2000 ч. байты) и ваш буфер начинается с адреса памяти 4FF00h. Использование сегментация памяти, существуют разные способы вычисления значений регистров, например:
ES = сегмент = 4F00hBX = смещение = 0F00hsum = адрес памяти = 4FF00h было бы хорошим выбором, потому что 0F00h + 2000h = 2F00h <= 10000hES = сегмент = 4000hBX = смещение = FF00hsum = адрес памяти = 4FF00h нет будет хорошим выбором, потому что FF00h + 2000h = 11F00h> 10000h
Функция 02h прерывания 13h может читать только секторы первых 16 450 560 секторов вашего жесткого диска, для чтения секторов, превышающих предел в 8 ГБ, вы должны использовать функцию 42hof ИНТ 13ч Расширения. Другой альтернативой может быть прерывание DOS 25h, которое читает секторы.в перегородка.
ИНТ 13ч AH = 03ч: Запись секторов на диск
Параметры
AH
03ч
AL
Секторы для записи подсчета
CH
Отслеживать
CL
Сектор
DH
Голова
DL
Водить машину
ES: BX
Указатель адреса буфера
Полученные результаты
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
AL
Фактический письменный подсчет секторов
ИНТ 13 ч AH = 04 ч: Проверить сектора с диска
Параметры
AH
04ч
AL
Секторы для проверки количества
CH
Отслеживать
CL
Сектор
DH
Голова
DL
Водить машину
ES: BX
Указатель адреса буфера
Полученные результаты
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
AL
Фактическое количество проверенных секторов
ИНТ 13 ч AH = 05 ч: Форматировать дорожку
Параметры
AH
05ч
AL
Секторы для форматирования счетчика
CH
Отслеживать
CL
Сектор
DH
Голова
DL
Водить машину
ES: BX
Указатель адреса буфера
4-байтовое адресное поле (относится к PC / XT 286, AT, PS / 1 и PS / 2)
указатель на таблицу параметров привода (только для дискет)
Замечания
Логические значения функции 08h могут / должны отличаться от физических значений CHS функции 48h.
Регистр результатов CX содержит значения как для цилиндров, так и для секторов / дорожек, см. Примечание к функции 02h.
ИНТ 13 ч AH = 09 ч: Начальные характеристики пары приводов
Параметры
AH
09ч
DL
Водить машину
Полученные результаты
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
ИНТ 13ч AH = 0Ah: чтение длинных секторов с диска
Единственная разница между этой функцией и функцией 02h (см. Выше) состоит в том, что функция 0Ah считывает 516 байт на сектор вместо 512. Последние 4 байта содержат код исправления ошибок (ECC), контрольную сумму данных сектора.
количество секторов для чтения (некоторые BIOS Phoenix ограничены до 127 секторов)
04ч..07ч
4 байта
сегмент: указатель смещения на буфер памяти, в который будут перенесены секторы (обратите внимание, что x86 прямой порядок байтов: если объявляются сегмент и смещение отдельно, смещение должно быть объявлено перед сегментом)
08h..0Fh
8 байт
абсолютный номер начала секторов для чтения (1-й сектор диска имеет номер 0), используя логическая адресация блока (обратите внимание, что нижняя половина идет раньше верхней)[9]
Полученные результаты
Регистры
Описание
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
Как уже говорилось с int 13h AH = 02h, необходимо позаботиться о том, чтобы полный буфер находится внутри данного сегмента, то есть (BX + size_of_buffer) <= 10000h
ИНТ 13 ч AH = 43 ч: Расширенные секторы записи на диск
48h = номер функции для extended_read_drive_parameters
DL
индекс диска (например, 1-й жесткий диск = 80h)
DS: SI
сегмент: смещение указателя на буфер результатов, см. ниже
Буфер результатов
диапазон смещения
размер
описание
00ч..01ч
2 байта
размер буфера результатов (установите значение 1Eh)
02ч..03ч
2 байта
информационные флаги
04ч..07ч
4 байта
физическое количество цилиндров = последний индекс + 1 (поскольку индекс начинается с 0)
08h..0Bh
4 байта
физическое количество голов = последний индекс + 1 (поскольку индекс начинается с 0)
0Ch..0Fh
4 байта
физическое количество секторов на дорожку = последний индекс (потому что индекс начинается с 1)
10ч..17ч
8 байт
абсолютное количество секторов = последний индекс + 1 (поскольку индекс начинается с 0)
18ч..19ч
2 байта
байтов на сектор
1Ah..1Dh
4 байта
необязательный указатель на параметры конфигурации Enhanced Disk Drive (EDD), который может использоваться для последующих вызовов прерывания 13h Extension (если поддерживается)
Полученные результаты
Регистры
Описание
CF
Установить при ошибке, очистить, если ошибок нет
AH
Код возврата
Замечание
Физические значения CHS функции 48h могут / должны отличаться от логических значений функции 08h.
INT 13h AH = 4Bh: получить тип эмуляции привода
Параметры
Регистраторы
Описание
AH
4Bh = получить тип эмуляции диска
AL
01
DL
индекс диска (например, 1-й жесткий диск = 80h)
DS: SI
указывает на пустую структуру для результата. должен быть размером 13h
Полученные результаты
Регистры
Описание
CF
Установить при ошибке, очистить, если ошибок нет
ТОПОР
Код возврата
DS: SI
Указывает на структуру спецификации
Структура спецификации
Компенсировать
Размер (байт)
Описание
00ч
1
Размер пакетов в байтах (13h)
01ч
1
Тип загрузочного носителя:
Биты
0 - 3
0000b: без эмуляции
0001b: 1,2 МБ дискеты
0010b: дискета 1,44 МБ
0011b: дискета 2,88 МБ
0100b: жесткий диск
4-5
Зарезервированный
6
Изображение содержит драйвер ATAPI
7
Образ содержит драйвер SCSI
02ч
1
Номер диска (индекс диска)
03ч
1
Номер контроллера компакт-диска
04ч
4
Логический адрес блока (LBA) образа диска для эмуляции
08ч
2
Спецификация устройства:
бит 0: привод является ведомым, а не ведущим
биты 7-0: LUN и PUN
0Ач
2
Сегмент буфера размером 3К для кэширования чтения компакт-дисков
0Ч
2
Сегмент начального загрузочного образа, начиная с сегмента 7c0h
0Eh
2
Количество секторов (длиной 512 байт) для загрузки