Современные компьютеры оснащены как 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 с дозему , операционная система перехватывает вызов и передает его собственному дисковому механизму ввода-вывода операционной системы. Windows 9x и Windows for Workgroups 3.11 также обходят процедуры BIOS при использовании 32-битного доступа к диску . Помимо выполнения низкоуровневого доступа к диску, вызовы INT 13h и соответствующие структуры данных BIOS также предоставляют информацию о типах и емкости дисков (или других устройств DASD ), подключенных к системе; когда загружается ОС в защищенном режиме, она может использовать эту информацию из BIOS для перечисления дискового оборудования, чтобы она (ОС) могла загрузить и настроить соответствующие драйверы дискового ввода-вывода.
Исходный интерфейс реального режима INT 13h BIOS поддерживает диски размером примерно до 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 зарегистрировать ДХ.
Во всех версиях 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 путем прямой выдачи INT 13h из приложений. Фиктивное чтение через INT 13h может использоваться как один из нескольких методов принудительной очистки кэша для неизвестных кэшей (например, перед перезагрузкой). [1] [2]
Регистр CX содержит номер цилиндра (10 бит , возможные значения от 0 до 1023).
и номер сектора (6 бит, возможные значения от 1 до 63). Биты цилиндра и сектора пронумерованы ниже:
Адресация Buffer должна гарантировать, что весь буфер находится внутри данного сегмента .
т.е. ( BX + size_of_buffer ) <= 10000h.
В противном случае прерывание может завершиться неудачей в некоторых версиях BIOS или оборудования.
Предположим, вы хотите прочитать 16 секторов (= 2000 байт ), и ваш буфер запускается.
по адресу памяти 4FF00h. Используя сегментацию памяти , существуют разные способы вычисления значений регистров, например:
ES = segment = 4F00h
BX = offset = 0F00h
sum = memory address = 4FF00h
would be a good choice because 0F00h + 2000h = 2F00h <= 10000h
ES = segment = 4000h
BX = offset = FF00h
sum = memory address = 4FF00h
would not be a good choice because FF00h + 2000h = 11F00h > 10000h
Функция 02h прерывания 13h может читать только первые 16 450 560 секторов.
вашего жесткого диска, для чтения секторов за пределами 8 ГБ вам следует использовать функцию 42h
из INT 13h Расширения. Другой альтернативой может быть прерывание DOS 25h, которое считывает сектора.
внутри раздела.
[ORG7c00h]; code starts at 7c00hxorax,ax; make sure ds is set to 0movds,axcld; start putting in values:movah,2h; int13h function 2moval,63; we want to read 63 sectorsmovch,0; from cylinder number 0movcl,2; the sector number 2 - second sector (starts from 1, not 0)movdh,0; head number 0xorbx,bxmoves,bx; es should be 0movbx,7e00h; 512bytes from origin address 7c00hint13hjmp7e00h; jump to the next sector; to fill this sector and make it bootable:times510-($-$$)db0dw0AA55h
После этого раздела кода (с которого должен начинаться файл asm) вы можете написать код, и он будет загружен в память и выполнен.
Обратите внимание, что мы не изменили dl (диск). Это связано с тем, что при первой загрузке компьютера в dl устанавливается номер загрузившегося диска, поэтому, если мы хотим выполнить чтение с диска, с которого загрузились, нет необходимости изменять dl.
Единственная разница между этой функцией и функцией 02h (см. выше) заключается в том, что функция 0Ah считывает 516 байт на сектор.
вместо всего лишь 512. Последние 4 байта содержат код исправления ошибок (ECC), контрольную сумму данных сектора.
индекс диска (например, 1-й жесткий диск = 80 часов)
ДС: СИ
сегмент: указатель смещения на DAP, см. ниже.
DAP: пакет адреса диска.
диапазон смещения
размер
описание
00ч
1 байт
размер DAP (установите значение 10h)
01ч
1 байт
не используется, должно быть равно нулю
02ч..03ч
2 байта
количество секторов для чтения (некоторые BIOS Phoenix ограничены максимум 127 секторами)
04ч..07ч
4 байта
указатель сегмента:смещение на буфер памяти, в который будут перенесены сектора (обратите внимание, что x86 имеет прямой порядок байтов : если сегмент и смещение объявляются отдельно, смещение должно быть объявлено перед сегментом)
08ч..0Фч
8 байт
абсолютный номер начала считываемых секторов (1-й сектор накопителя имеет номер 0) с использованием адресации логических блоков (обратите внимание, что нижняя половина идет раньше верхней половины) [9]
Результаты
Регистры
Описание
CF
Установить при ошибке, очистить, если нет ошибок
АХ
Код возврата
Как уже говорилось для int 13h AH=02h, необходимо позаботиться о том, чтобы весь буфер находился внутри данного сегмента , т.е. (BX + size_of_buffer) <= 10000h
INT 13h AH=43h : Расширенные сектора записи на диск
48h = номер функции для расширенных_read_drive_parameters
ДЛ
индекс диска (например, 1-й жесткий диск = 80 часов)
ДС: СИ
сегмент: указатель смещения на буфер результатов, см. ниже.
Буфер результатов
диапазон смещения
размер
описание
00ч..01ч
2 байта
размер буфера результатов (установите значение 1Eh)
02ч..03ч
2 байта
информационные флаги
04ч..07ч
4 байта
физическое количество цилиндров = последний индекс + 1 (потому что индекс начинается с 0)
08ч..0Чч
4 байта
физическое количество голов = последний индекс + 1 (потому что индекс начинается с 0)
0Ch..0Fh
4 байта
физическое количество секторов на дорожке = последний индекс (поскольку индекс начинается с 1)
10ч..17ч
8 байт
абсолютное количество секторов = последний индекс + 1 (потому что индекс начинается с 0)
18ч..19ч
2 байта
байт на сектор
1Ах..1Дч
4 байта
необязательный указатель на параметры конфигурации Enhanced Disk Drive (EDD), который может использоваться для последующих вызовов расширения прерывания 13h (если поддерживается)
Arc.Ask3.Ru Номер скриншота №: 89fbffd0508df1d57923877327448cda__1684866000 URL1:https://arc.ask3.ru/arc/aa/89/da/89fbffd0508df1d57923877327448cda.html Заголовок, (Title) документа по адресу, URL1: INT 13H - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)