ИНТ 13H - INT 13H

ИНТ 13ч сокращение для Вызов прерывания BIOS 13шестнадцатеричный, 20-е вектор прерывания в x86 компьютерная система на базе (потомка IBM PC). В BIOS обычно создает реальный режим обработчик прерывания в этом векторе, который предоставляет услуги чтения и записи секторных жестких дисков и гибких дисков с использованием сектор головки блока цилиндров (CHS) адресация. BIOS современных ПК также включает функции расширения INT 13h, разработанные IBM и Microsoft в 1992 году, которые предоставляют те же услуги доступа к диску с использованием 64-разрядных систем. LBA адресация; с небольшими дополнениями, они были квазистандартизированы Phoenix Technologies и другими как EDD (Расширенный дисковый накопитель ) Расширения BIOS.

INT это x86 инструкция это вызывает программное прерывание, и 13шестнадцатеричный номер прерывания (как шестнадцатеричный значение) вызывается.

Современные компьютеры поставляются с 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]

Список ИНТ 13ч Сервисы

Приводной стол
DL = 00ч1-я дискета ("дисковод A:")
DL = 01ч2-я дискета ("дисковод B:")
DL = 02ч3-я дискета ("дисковод B:")
. . .
DL = 7Fh128-я дискета)
DL = 80ч1-й жесткий диск
DL = 81 ч2-й жесткий диск
DL = 82 ч3-й жесткий диск
. . .
DL = E0hCD / DVD[нужна цитата ], или 97-й жесткий диск
. . .
DL = FFh128-й жесткий диск
Таблица функций
AH = 00ч Сбросить дисковую систему
AH = 01ч Получить статус последней операции диска
AH = 02ч Чтение секторов с диска
AH = 03ч Запись секторов на диск
AH = 04ч Проверить сектора
AH = 05ч Форматировать трек
AH = 06ч Форматировать дорожку Установить флаги плохого сектора
AH = 07ч Форматировать диск, начиная с дорожки
AH = 08ч Чтение параметров привода
AH = 09чHDИнициализировать дисковый контроллер
AH = 0AhHDЧтение длинных секторов с диска
AH = 0BhHDЗапись длинных секторов на диск
AH = 0ChHDПереместить приводную головку к цилиндру
AH = 0DhHDСбросить диски
AH = 0EhPS / 2Проверка чтения контроллера
AH = 0FhPS / 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 = 4BhEXTПолучить тип эмуляции диска

Если второй столбец пуст, функция может использоваться как для гибкого, так и для жесткого диска.

  • FD: только для гибких дисков.
  • HD: только для жесткого диска.
  • PS / 2: только для жесткого диска в системе PS / 2.
  • EXT: часть ИНТ 13ч Расширения, написанные в 1990-х годах для поддержки жестких дисков с более чем 8 ГБ.

ИНТ 13ч AH = 00ч: Сбросить дисковую систему

Параметры
AH00ч
DLДиск (установленный бит 7 означает сброс как жесткого, так и гибкого диска)
Полученные результаты
CFУстановить при ошибке
AHКод возврата

ИНТ 13 ч AH = 01 ч: Получить статус последней операции диска

Параметры
AH01ч
DLВодить машину

Бит 7 = 0 для дисковода гибких дисков, бит 7 = 1 для фиксированного дисковода

Полученные результаты
AH
Код возврата
00чУспех
01чНеверная команда
02чНе удается найти адресную метку
03чПопытка записи на защищенный от записи диск
04чСектор не найден
05чСбросить сбой
06чСтрока смены диска 'активна'
07чОшибка действия параметра диска
08чDMA переполнение
09чПопытка DMA через границу 64 КБ
0АчОбнаружен плохой сектор
0BhОбнаружен неисправный цилиндр (гусеница)
Тип носителя не найден
0DhНеверное количество секторов
0EhОбнаружена адресная метка управляющих данных
0FhDMA вне диапазона
10чОшибка данных CRC / ECC
11чОшибка данных с исправлением ECC
20чСбой контроллера
40чИщите неудачу
80чВремя ожидания диска истекло, предполагается, что он не готов
AAhДиск не готов
BBhНеопределенная ошибка
CChОшибка записи
E0hОшибка статуса
FFhОшибка операции Sense
CFУстановить при ошибке, очистить, если ошибок нет

ИНТ 13 ч AH = 02 ч: Чтение секторов с диска

Параметры
AH02ч
ALСекторы для считывания подсчета
CHЦилиндр
CLСектор
DHГолова
DLВодить машину
ES: BXУказатель адреса буфера
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата
ALФактическое количество прочитанных секторов

Замечания

Зарегистрировать CX содержит как номер цилиндра (10 биты возможные значения от 0 до 1023) и номер сектора (6 битов, возможные значения от 1 до 63). Биты цилиндра и сектора пронумерованы ниже:

CX = --- CH --- --- CL --- цилиндр: 76543210 98 сектор: 543210

Примеры перевода:

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ч: Запись секторов на диск

Параметры
AH03ч
ALСекторы для записи подсчета
CHОтслеживать
CLСектор
DHГолова
DLВодить машину
ES: BXУказатель адреса буфера
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата
ALФактический письменный подсчет секторов

ИНТ 13 ч AH = 04 ч: Проверить сектора с диска

Параметры
AH04ч
ALСекторы для проверки количества
CHОтслеживать
CLСектор
DHГолова
DLВодить машину
ES: BXУказатель адреса буфера
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата
ALФактическое количество проверенных секторов

ИНТ 13 ч AH = 05 ч: Форматировать дорожку

Параметры
AH05ч
ALСекторы для форматирования счетчика
CHОтслеживать
CLСектор
DHГолова
DLВодить машину
ES: BXУказатель адреса буфера
4-байтовое адресное поле
(относится к PC / XT 286, AT, PS / 1 и PS / 2)
БайтСмыслДопустимые значения
1Отслеживать
2Голова
3Сектор
4Байт / сектор0=128, 1-256, 2-512, 3-1024
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

ИНТ 13 ч AH = 06 ч: Форматировать дорожку Установить флаги плохого сектора

Параметры
AH06ч
ALЧередование
CHОтслеживать
CLСектор
DHГолова
DLВодить машину
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

ИНТ 13 ч AH = 07 ч: Форматировать диск, начиная с дорожки

Параметры
AH07ч
ALЧередование
CHОтслеживать
CLСектор
DHГолова
DLВодить машину
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

ИНТ 13 ч AH = 08 ч: Чтение параметров привода

Параметры
Регистры
AH08h = номер функции для read_drive_parameters
DLиндекс диска (например, 1-й жесткий диск = 80h)
ES: DI[7]установите значение 0000h: 0000h, чтобы обойти некоторые ошибки в BIOS
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата
DLколичество жестких дисков
DH[7]логический последний индекс голов = number_of - 1 (потому что индекс начинается с 0)
CX[7:6] [15:8][7] логический последний индекс цилиндров = number_of - 1 (потому что индекс начинается с 0)

[5:0][7] логический последний индекс секторов на дорожку = number_of (поскольку индекс начинается с 1)

BL[7]тип привода (только дискеты AT / PS2)
ES: DI[7]указатель на таблицу параметров привода (только для дискет)

Замечания

  • Логические значения функции 08h могут / должны отличаться от физических значений CHS функции 48h.
  • Регистр результатов CX содержит значения как для цилиндров, так и для секторов / дорожек, см. Примечание к функции 02h.

ИНТ 13 ч AH = 09 ч: Начальные характеристики пары приводов

Параметры
AH09ч
DLВодить машину
Полученные результаты
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

ИНТ 13ч AH = 0Ah: чтение длинных секторов с диска

Единственная разница между этой функцией и функцией 02h (см. Выше) состоит в том, что функция 0Ah считывает 516 байт на сектор вместо 512. Последние 4 байта содержат код исправления ошибок (ECC), контрольную сумму данных сектора.

ИНТ 13 ч AH = 41 ч: Проверить наличие расширений

Параметры
РегистрыОписание
AH41h = номер функции для проверки расширений[8]
DLиндекс диска (например, 1-й жесткий диск = 80h)
BX55ААч
Полученные результаты
РегистрыОписание
CFУстановить на "Нет", "Удалить", если есть
AHКод ошибки или основной номер версии
BXAA55h
CXБитовая маска поддержки интерфейса:
  • 1 - Доступ к устройству с использованием структуры пакета
  • 2 - Блокировка и извлечение диска
  • 4 - Расширенная поддержка дисковых накопителей (EDD)

ИНТ 13 ч AH = 42 ч: Расширенные секторы чтения с диска

Параметры
РегистрыОписание
AH42h = номер функции для расширенного чтения
DLиндекс диска (например, 1-й жесткий диск = 80h)
DS: SIсегмент: смещение указателя на DAP, см. ниже
DAP: пакет адреса диска
диапазон смещенияразмерописание
00ч1 байтразмер DAP (установите значение 10h)
01ч1 байтнеиспользованный, должен быть нулевым
02ч..03ч2 байтаколичество секторов для чтения (некоторые BIOS Phoenix ограничены до 127 секторов)
04ч..07ч4 байтасегмент: указатель смещения на буфер памяти, в который будут перенесены секторы (обратите внимание, что x86 прямой порядок байтов: если объявляются сегмент и смещение отдельно, смещение должно быть объявлено перед сегментом)
08h..0Fh8 байтабсолютный номер начала секторов для чтения (1-й сектор диска имеет номер 0), используя логическая адресация блока (обратите внимание, что нижняя половина идет раньше верхней)[9]
Полученные результаты
РегистрыОписание
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

Как уже говорилось с int 13h AH = 02h, необходимо позаботиться о том, чтобы полный буфер находится внутри данного сегмента, то есть (BX + size_of_buffer) <= 10000h

ИНТ 13 ч AH = 43 ч: Расширенные секторы записи на диск

Параметры
РегистрыОписание
AH43h = номер функции для расширенной записи
AL
  • бит 0 = 0: закрыть проверку записи,
  • бит 0 = 1: открытая проверка записи,
  • бит 1-7: зарезервирован, установлен в 0
DLиндекс диска (например, 1-й жесткий диск = 80h)
DS: SIсегмент: смещение указателя на DAP
Полученные результаты
РегистрыОписание
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

ИНТ 13 ч AH = 48 ч: Расширенные параметры чтения привода

Параметры
РегистрыОписание
AH48h = номер функции для extended_read_drive_parameters
DLиндекс диска (например, 1-й жесткий диск = 80h)
DS: SIсегмент: смещение указателя на буфер результатов, см. ниже
Буфер результатов
диапазон смещенияразмерописание
00ч..01ч2 байтаразмер буфера результатов (установите значение 1Eh)
02ч..03ч2 байтаинформационные флаги
04ч..07ч4 байтафизическое количество цилиндров = последний индекс + 1
(поскольку индекс начинается с 0)
08h..0Bh4 байтафизическое количество голов = последний индекс + 1
(поскольку индекс начинается с 0)
0Ch..0Fh4 байтафизическое количество секторов на дорожку = последний индекс
(потому что индекс начинается с 1)
10ч..17ч8 байтабсолютное количество секторов = последний индекс + 1
(поскольку индекс начинается с 0)
18ч..19ч2 байтабайтов на сектор
1Ah..1Dh4 байтанеобязательный указатель на параметры конфигурации Enhanced Disk Drive (EDD), который может использоваться для последующих вызовов прерывания 13h Extension (если поддерживается)
Полученные результаты
РегистрыОписание
CFУстановить при ошибке, очистить, если ошибок нет
AHКод возврата

Замечание

Физические значения CHS функции 48h могут / должны отличаться от логических значений функции 08h.

INT 13h AH = 4Bh: получить тип эмуляции привода

Параметры
РегистраторыОписание
AH4Bh = получить тип эмуляции диска
AL01
DLиндекс диска (например, 1-й жесткий диск = 80h)
DS: SIуказывает на пустую структуру для результата. должен быть размером 13h
Полученные результаты
РегистрыОписание
CFУстановить при ошибке, очистить, если ошибок нет
ТОПОРКод возврата
DS: SIУказывает на структуру спецификации
Структура спецификации
КомпенсироватьРазмер (байт)Описание
00ч1Размер пакетов в байтах (13h)
01ч1Тип загрузочного носителя:
Биты
0 - 30000b: без эмуляции

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К для кэширования чтения компакт-дисков
2Сегмент начального загрузочного образа, начиная с сегмента 7c0h
0Eh2Количество секторов (длиной 512 байт) для загрузки
10ч1Младший байт счетчика цилиндров (от int 8h)
11ч1Счетчик секторов (от int 8h)
12ч1Подсчет головы (от int 8h)

Смотрите также

Рекомендации

  1. ^ а б Браун, Ральф Д. (2000-07-16). "Список прерываний Ральфа Брауна (v61 html)". Получено 2016-11-03.
  2. ^ а б Браун, Ральф Д. (2000-07-16). «Архив списка прерываний x86 (исходный текст v61):« inter61a.zip », субфайл:« INTERRUP.B », заголовок:« B-1302 »(INT13, 02 Чтение), Примечания». Получено 2016-11-03.
  3. ^ Ограничения размера диска, ограничение 8,4 ГБ (и другие)
  4. ^ Стивенс, Кертис (1995-01-26). «Enhanced Disk Drive Specification 1.1 -DRAFT- Phoenix Technologies, см. 3.0 BIOS Extensions (требуется регистрация)» (PDF). Получено 2016-11-03.
  5. ^ Лэндис, Хейл (1995-02-11). «Типы BIOS, трансляция CHS, LBA и другие полезные вещи, см. BIOS Type 6, спецификация расширенного диска Phoenix. (Требуется регистрация)» (PDF). Получено 2016-11-03.
  6. ^ ctyme.com - Список прерываний Ральфа Брауна, индексированный html, ДИСК - ЧИТАТЬ СЕКТОРЫ В ПАМЯТЬ
  7. ^ а б c d е ж ctyme.com - ДИСК - ПОЛУЧИТЕ ПАРАМЕТРЫ ДИСКА (ПК, XT286, CONV, PS, ESDI, SCSI)
  8. ^ ctyme.com - Расширения IBM / MS INT 13 - ПРОВЕРКА УСТАНОВКИ
  9. ^ - LBA в расширенном режиме

внешняя ссылка