OSDev http://osdev.su/ |
|
Разница между int 10h в BIOS и исключением #16 http://osdev.su/viewtopic.php?f=5&t=695 |
Страница 1 из 3 |
Автор: | Zealint [ 17 фев 2013, 17:00 ] |
Заголовок сообщения: | Разница между int 10h в BIOS и исключением #16 |
Читая документацию Intel, не могу понять, казалось бы, простую вещь. Есть прерывание (исключение) Interrupt 16 — x87 FPU Floating-Point Error (#MF). Есть прерывание 10h, которое использует BIOS. В чём разница, если у них один и тот же номер? Какой механизм позволяет различать прерывание и исключение. Вот цитата из документации: Цитата: The allowable range for vector numbers is 0 to 255. Vector numbers in the range 0 through 31 are reserved by the Intel 64 and IA-32 architectures for architecture defined exceptions and interrupts. Каким образом и зачем BIOS забирает зарезервированные номера прерываний? Если переходить в защищённый режим, сохраняется ли прерывание 10h за функцией BIOS? Или я не о том думаю, смешивая разные понятия? |
Автор: | phantom-84 [ 17 фев 2013, 17:11 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Вы не о том думаете. Сервис BIOS не работает в защищенном режиме. Первые 32 вектора (0-31) используются для обработки NMI и исключений (часть векторов зарезервирована). Маскируемые аппаратные прерывания перенаправляются на вектора 32+. В этом же диапазоне размещаются и обработчики программных прерываний защищенного режима (если они вообще используются). |
Автор: | Zealint [ 17 фев 2013, 17:25 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Не очень понял. В реальном режиме у нас есть исключение #16? Если есть, то куда оно перенаправляется, когда его место занимает функция BIOS 10h? И как оно вызывается тогда, если оно аппаратное и как бы "зашито" под этим номером? Когда включается защищенный режим, то как исключение #16 заменяет собой функции BIOS 10h? Это происходит аппаратно или нужно делать вручную? Я знаю, что при переходе в защищенный режим нужно определять свою таблицу прерываний, но если этого не сделать, куда будет смотреть вектор 10h? На не работающие уже функции BIOS? |
Автор: | 418ImATeapot [ 17 фев 2013, 17:39 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Вы путаете источник и обработчик прерывания. БИОС - обработчик. В защищенном режиме он не работает и можно вешать свой обработчик. ФПУ - источник. Он не работает в реальном режиме. Единственный споспоб получить 0x10 в реальном режиме - инструкция INT. |
Автор: | Zealint [ 17 фев 2013, 17:46 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Так уже более понятно, спасибо. А есть у кого-то возможность показать конкретное место в документации Intel или AMD, где написано, какие из младших прерываний в реальном режиме задействованы аппаратурой, а какие (типа #16) - нет? |
Автор: | SII [ 17 фев 2013, 18:00 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Интел с самого начала объявила, что первые 32 номера прерываний зарезервированы для нужд процессора. Однако разработчики БИОСа в ИБМ на это забили большой и железный и реализовали с теми же номерами целую кучу сервисов. А теперь эта глупость тянется для совместимости. В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво). |
Автор: | Himik [ 17 фев 2013, 18:13 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
По моим наблюдениям, в реальном режиме используются только исключения с 0 по 7. |
Автор: | Zealint [ 17 фев 2013, 18:48 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
SII писал(а): Интел с самого начала объявила, что первые 32 номера прерываний зарезервированы для нужд процессора. Однако разработчики БИОСа в ИБМ на это забили большой и железный и реализовали с теми же номерами целую кучу сервисов. А теперь эта глупость тянется для совместимости. Это печально. А я думал, что чего-то не понимаю в этом великом замысле. Цитата: В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво). В том-то и дело, что читал. Взял, например, Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals. Раздел 6.4. Там, во-первых, таблица всех исключений и прерываний без указаний того, что в реальном режиме, а что в защищенном. А во-вторых, написано Цитата: Vectors 0 through 8, 10 through 14, and 16 through 19 are the predefined interrupts and exceptions, and vectors 32 through 255 are the user-defined interrupts, called maskable interrupts. Что никак не объясняет то, что я хочу узнать: какие прерывания на самом деле могут быть вызваны аппаратурой в реальном режиме, а какие не могут. Читал и главу 20 про 8086 emulation в Intel® 64 and IA-32 Architectures Software Developer’s Manual, там вообще ни слова. Также открывал техническую документацию по процессорам. Конечно, там ничего не нашёл. Я могу всё перечитать, но на это уйдет несколько недель. Поэтому спрашиваю, кто сейчас помнит, где всё написано. Не обязательно специально искать, просто может у кого-то под рукой как раз. |
Автор: | pavia [ 17 фев 2013, 19:21 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Цитата: Каким образом и зачем BIOS забирает зарезервированные номера прерываний? Если переходить в защищённый режим, сохраняется ли прерывание 10h за функцией BIOS? Или я не о том думаю, смешивая разные понятия? Вначале был процессор 8086. Для него был BIOS. И он честно взяли и использовали прерывание Int 10h Потом intel выпустила i286 процессор. И добавила исключения и зарезервированных исключений. Для совместимости разделили так в реальном режиме свои прерывания в защищенном свои. Всё бы было хорошё, но некоторые моменты не доработали в реальном режиме могут просочится исключения 14 и ещё парочка (переполнение стека, и ..). Непомню номера а документациб лень смотреть Цитата: В чём разница, если у них один и тот же номер? Какой механизм позволяет различать прерывание и исключение. Вот цитата из документации: Тебе заботиться не надо. В защищенном режиме прерывания биоса не работают так что смело вешаешь свои обработчики исключений. В реальном это уже проблемы БИОСа как отличить первое от второго. Но в документации на интел есть пара советов как это сделать. |
Автор: | pavia [ 17 фев 2013, 19:25 ] |
Заголовок сообщения: | Re: Разница между int 10h в BIOS и исключением #16 |
Цитата: В документации на процессоры перечислены все реально используемые исключения. Читайте разделы, посвящённые исключениям (самому смотреть и тыкать носом лениво). В документации описаны исключения и прерывания только на защищенный режим. Для реального режима табличек не приводится. Так что по большей части это недокументированная информация. Хотя кое какие сведения в документации всё же приведены. Плюс по реальному режиму надо читать документацию на 8086 |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |