stringtranslate.com

ИНТ 13Ч

INT 13h — это сокращение для вызова прерывания BIOS 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 с дозему , операционная система перехватывает вызов и передает его собственному дисковому механизму ввода-вывода операционной системы. 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 МБ.

The 504 MB limit was overcome using CHS translation, a technique by which the BIOS would simulate a fictitious CHS geometry at the INT 13h interface, while communicating with the ATA drive using its native logical CHS geometry. (By the time the 504 MB barrier was being approached, ATA disks had long before ceased to present their real physical geometry parameters at the external ATA interface.) Translation allows the BIOS, still using CHS addressing, to effectively address ATA disks with sizes up to 8064 MB, the native capacity of the BIOS CHS interface alone. (The ATA interface has a much larger native CHS addressing capacity, so once the "interference" of the CHS limits of BIOS and ATA was resolved by addressing, only the smaller limitation of the BIOS was significant.) CHS translation is sometimes referred to as logical CHS addressing, but that is actually a misnomer since by the time of this BIOS development, ATA CHS addresses were already logical, not physical. The 8064 MB limit originates from a combination of the register value based calling convention used in the INT 13h interface and the goal of maintaining backward compatibility—dictating that the format or size of CHS addresses passed to INT 13h could not be changed to add more bits to one of the fields, e.g. the Cylinder-number field. This limit uses 1024 cylinders, 256 heads, 63 sectors, and 512 byte blocks, allowing exactly 7.875 GiB of addressing (1024 × 256 × 63 × 512 bytes). There were briefly a number of BIOSes that offered incompatible versions of this interface—for example, AWARD AT BIOS and AMI 386sx BIOS have been extended to handle up to 4096 cylinders by placing bits 10 and 11 of the cylinder number into bits 6 and 7 of register DH.

All versions of MS-DOS, (including MS-DOS 7 and Windows 95) have a bug which prevents booting disk drives with 256 heads (register value 0xFF), so many modern BIOSes provide CHS translation mappings with at most 255 (0xFE) heads,[1][2] thus reducing the total addressable space to exactly 8032.5 MiB (approx 7.844 GiB).[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]

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

Список услуг .mw-parser-output .monospaced{font-family:monospace,monospace}INT 13h

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

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

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

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

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

Примечания

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

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

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

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

Адресация Buffer должна гарантировать, что весь буфер находится внутри данного сегмента , ( 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, которое считывает сектора внутри раздела.

Пример кода

 [ ОРГ 7c00h ] ; код начинается с 7c00h xor ax , ax ; убедитесь, что для ds установлено значение 0 mov ds , ax cld ; начните вводить значения: mov ah , 2h ; int13h функция 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 : Инициализация характеристик пары приводов

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

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

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

INT 13h AH=42h : расширенное чтение секторов с диска

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

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

INT 13h AH=48h : Расширенное чтение параметров привода

Примечание

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

INT 13h AH=4Bh: Получить тип эмуляции накопителя

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

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

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

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