во-первых, поймите, что x86 оборудование имеет Таблица Дескрипторов Прерываний который живет в оперативной памяти. На оригинальном процессоре 8086 это было исправлено в месте памяти 0, первое место оперативной памяти, но его можно переместить в более поздние и современные процессоры. BIOS первоначально устанавливает это в ячейку памяти 0.
IDT представляет собой список 32-разрядных указателей на подпрограммы в другом месте памяти (которые могут быть ROM или RAM), пронумерованных от 0x00 до 0xFF.
в эти дни, первые 32 из них зарезервированы для использования самого процессора. Например, общая ошибка защиты вызовет процедуру, на которую указывает вектор 0x0D.
любая подпрограмма, указанная в одном из этих векторов, может быть "вызвана" инструкцией программного прерывания INT
. Так INT 0x0D
вызовет ту же процедуру, что и при вызове общей ошибки защиты.
BIOS DOS-эпохи использует многие из них, чтобы представить стандартный интерфейс для вызовы BIOS. Некоторые из те, BIOS традиционно использует перекрывается с тем, что использует процессор.
сам DOS также использовал одно прерывание,0x21
, чтобы разрешить программам стандартный способ вызова функции DOS.
теперь хорошо известное прерывание BIOS 0x13
,что позволяет читать или записывать сектор на дисковое устройство.
во время процесса загрузки область памяти ПЗУ сканируется и вызывается код инициализации любого ПЗУ. ISA и PCI устройства могут иметь ПЗУ на них, которые появляются, и которые будут вызываться во время загрузки. ПЗУ устройства могут изменять векторы, расширяя или заменяя функциональность BIOS. RAID-карты, предназначенные для работы с DOS и 9x версиями Windows, могут это сделать.
процедура BIOS инициализирует видеодисплей и позволяет установить режим отображения. Очень часто видеокарты имеют ПЗУ, которое переопределяет это прерывание, чтобы графическая карта могла использоваться во время процесса загрузки BIOS (и DOS, если вы очень этого хотели).
ничто не мешает после всего, что инициализирует изменять эти векторы, чтобы augument или заменить функцию в BIOS. Путь назад, когда некоторые BIOS не могли получить доступ к секторам жесткого диска через барьер 8 Гбайт, некоторые поставщики предоставили загрузочный диск, который предоставил утилиту, подключенную к Int 0x13, минуя ограничение BIOS.
так что все это было очень распространено, когда DOS была распространенной операционной системой. В эти дни BIOS, Если это все еще вокруг (UEFI является его преемником), в значительной степени используется только для инициализации и экрана загрузки, а операционная система напрямую обращается к аппаратному обеспечению - исключением являются вещи, связанные с управлением питанием.