stringtranslate.com

ИНТ 13H

INT 13h — это сокращение от BIOS interrupt call 13 hex , 20-го вектора прерывания в компьютерной системе на базе x86 (наследника IBM PC). BIOS обычно устанавливает обработчик прерываний реального режима в этом векторе, который обеспечивает секторные службы чтения и записи жесткого диска и гибкого диска с использованием адресации цилиндр-головка-сектор (CHS). Современные BIOS ПК также включают функции расширения INT 13h, созданные IBM и Microsoft в 1992 году, которые обеспечивают те же службы доступа к диску с использованием 64-битной адресации LBA ; с небольшими дополнениями они были квазистандартизированы Phoenix Technologies и другими как расширения BIOS EDD ( Enhanced Disk Drive ).

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

Современные компьютеры поставляются с функционалом BIOS INT 13h и UEFI , который предоставляет те же самые услуги и даже больше, за исключением UEFI Class 3, который полностью удаляет CSM , поэтому не имеет INT 13h и других прерываний. Обычно драйверы UEFI используют LBA -адресацию вместо CHS-адресации.

Обзор

В операционных системах реального режима , таких как DOS , вызов INT 13h перейдет в код ROM-BIOS компьютера для низкоуровневых дисковых служб , которые будут выполнять операции чтения или записи на физическом секторе диска для программы. В DOS он служит низкоуровневым интерфейсом для встроенных драйверов блочных устройств для жестких дисков и гибких дисков . Это позволяет INT 25h и INT 26h предоставлять абсолютные функции чтения/записи диска для логических секторов драйверу файловой системы FAT в ядре DOS, который обрабатывает запросы, связанные с файлами, через функции DOS API ( INT 21h ).

В операционных системах защищенного режима , таких как производные Microsoft Windows NT (например, NT4, 2000, XP и Server 2003) и Linux с dosemu , ОС перехватывает вызов и передает его собственному механизму ввода-вывода диска операционной системы. Windows 9x и Windows for Workgroups 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, предлагавших несовместимые версии этого интерфейса — например, BIOS AWARD AT и AMI 386sx были расширены для обработки до 4096 цилиндров путем помещения битов 10 и 11 номера цилиндра в биты 6 и 7 регистра DH.

Все версии MS-DOS (включая MS-DOS 7 и Windows 95 ) имеют ошибку, которая не позволяет загружать дисководы с 256 головками (значение регистра 0xFF), поэтому многие современные BIOS предоставляют сопоставления трансляции CHS с максимум 255 (0xFE) головками , [1] [2] таким образом уменьшая общее адресуемое пространство ровно до 8032,5 МиБ (приблизительно 7,844 ГиБ). [3]

Для поддержки адресации даже больших дисков IBM и Microsoft представили интерфейс, известный как INT 13h Extensions , который позже был переиздан и немного расширен Phoenix Technologies как часть BIOS Enhanced Disk Drive Services (EDD). [4] [5] Он определяет новые функции в службе INT 13h, все из которых имеют номера функций больше 40h, которые используют 64-битную логическую адресацию блоков (LBA), что позволяет адресовать до 8 ЗиБ . (Диск ATA также может поддерживать 28-битную или 48-битную LBA, что позволяет адресовать до 128 ГиБ или 128 ПиБ соответственно, предполагая размер сектора/блока 512 байт). Это «пакетный» интерфейс, поскольку он использует указатель на пакет информации, а не соглашение о вызовах на основе регистров исходного интерфейса INT 13h. Этот пакет представляет собой очень простую структуру данных, которая содержит версию интерфейса, размер данных и LBA. Для обеспечения обратной совместимости программного обеспечения расширенные функции реализованы наряду с исходными функциями CHS, и вызовы функций из обоих наборов могут быть смешаны даже для одного и того же диска, с оговоркой, что функции CHS не могут выйти за пределы первых 8064 МБ диска.

Некоторые драйверы кэша очищают свои буферы, когда обнаруживают, что DOS обходит DOS, напрямую выдавая INT 13h из приложений. Фиктивное чтение через INT 13h может использоваться как один из нескольких методов принудительной очистки кэша для неизвестных кэшей (например, перед перезагрузкой). [1] [2]

BIOS AMI примерно 1990–1991 годов засоряют невыровненные буферы слов. Некоторые программы DOS и резидентные программы terminate-and-stay затирают включение прерываний и регистры, поэтому PC DOS и MS-DOS устанавливают собственные фильтры для предотвращения этого. [6]

Список.mw-parser-output .monospaced{font-family:monospace,monospace}ИНТ 13чуслуги

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

INT 13h AH=00h: Сброс дисковой системы

INT 13h AH=01h: Получить статус последней операции привода

Бит 7=0 для дисковода, бит 7=1 для жесткого диска

INT 13h AH=02h: Чтение секторов с диска

Замечания

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

СХ = ---СН--- ---КЛ---цилиндр: 76543210 98сектор: 543210

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

 CX := ( ( цилиндр и 255 ) shl 8 ) или ( ( цилиндр и 768 ) shr 2 ) или сектор ; цилиндр := ( ( CX и $FF00 ) shr 8 ) или ( ( CX и $C0 ) shl 2 ) сектор := CX и 63 ;                                           

Адресация буфера должна гарантировать, что весь буфер находится внутри заданного сегмента , т.е. ( BX + size_of_buffer ) <= 10000hВ противном случае прерывание может завершиться ошибкой в ​​некоторых версиях BIOS или оборудования.

Пример

Предположим, вы хотите прочитать 16 секторов (= 2000h байтов ), и ваш буфер начинается с адреса памяти 4FF00h. Используя сегментацию памяти , есть разные способы расчета значений регистров, например:

ES = сегмент = 4F00hBX = смещение = 0F00hсумма = адрес памяти = 4FF00hбудет хорошим выбором, поскольку 0F00h + 2000h = 2F00h <= 10000hES = сегмент = 4000hBX = смещение = FF00hсумма = адрес памяти = 4FF00hне
будет хорошим выбором, потому что FF00h + 2000h = 11F00h > 10000h

Функция 02h прерывания 13h может считывать только сектора первых 16 450 560 секторов вашего жесткого диска, для считывания секторов за пределами 8 ГБ следует использовать функцию 42h INT 13h Extensions. Другой альтернативой может быть прерывание DOS 25h, которое считывает сектора внутри раздела.

Пример кода

 [ ORG 7c00h ] ; код начинается с 7c00h xor ax , ax ; убедитесь, что ds установлен в 0 mov ds , ax cld ; начните вводить значения: mov ah , 2h ; int13h function 2 mov al , 63 ; мы хотим прочитать 63 сектора mov ch , 0 ; с цилиндра номер 0 mov cl , 2 ; номер сектора 2 - второй сектор (начинается с 1, а не с 0) mov dh , 0 ; номер головки 0 xor bx , bx mov es , bx ; es должен быть равен 0 mov bx , 7e00h ; 512 байт от исходного адреса 7c00h int 13h jmp 7e00h ; переход к следующему сектору ; чтобы заполнить этот сектор и сделать его загрузочным: times 510 - ( $ - $$ ) db 0 dw 0AA55h                                                         

После этого раздела кода (с которого должен начинаться asm-файл) вы можете написать код, и он будет загружен в память и выполнен.

Обратите внимание, что мы не изменили dl (диск). Это потому, что при первой загрузке компьютера dl устанавливается на номер диска, с которого была произведена загрузка, поэтому, если мы хотим читать с диска, с которого мы загрузились, нет необходимости менять dl.

INT 13h AH=03h: Запись секторов на диск

INT 13h AH=04h: Проверка секторов на диске

INT 13h AH=05h: Форматировать дорожку

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

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

INT 13h AH=08h: Чтение параметров привода

Замечания

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

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

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

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

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

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

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

INT 13ч AH=48ч: Расширенные параметры чтения диска

Замечание

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

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

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

Ссылки

  1. ^ ab Brown, Ralf D. (2000-07-16). "Список прерываний Ральфа Брауна (v61 html)" . Получено 2016-11-03 .
  2. ^ ab Brown, Ralf D. (2000-07-16). "Архив списка прерываний x86 (исходный текст v61): "inter61a.zip", подфайл: "INTERRUP.B", заголовок: "B-1302" (INT13, 02 Read), Примечания" . Получено 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. ^ Лэндис, Хейл (11.02.1995). «Типы BIOS, трансляция CHS, LBA и другие полезные вещи, см. BIOS Type 6 The Phoenix Enhanced Disk Drive Specification. (требуется регистрация)» (PDF) . Получено 03.11.2016 .
  6. ^ ctyme.com - Список прерываний Ральфа Брауна, индексированный html, ДИСК - ЧТЕНИЕ СЕКТОРА(ОВ) В ПАМЯТЬ
  7. ^ abcdef ctyme.com - ДИСК - ПОЛУЧИТЬ ПАРАМЕТРЫ ДИСКА (PC,XT286,CONV,PS,ESDI,SCSI)
  8. ^ ctyme.com - Расширения IBM/MS INT 13 - ПРОВЕРКА УСТАНОВКИ
  9. ^ - LBA в расширенном режиме

Внешние ссылки