Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Kastaneda
Jesus loves me
Эксперт С++
4946 / 3023 / 346
Регистрация: 12.12.2009
Сообщений: 7,626
Записей в блоге: 2
Завершенные тесты: 1
1

Обработка исключений/прерываний в compatibility mode

13.12.2012, 14:30. Просмотров 813. Ответов 2
Метки нет (Все метки)

Привет!
Делаю обработку исключений для compatibility mode. Заметил странную вещь - если в дескрипторе шлюза прерывания писать селектор кода как для protected mode то в случае исключения происходит page fault (ну потом естественно double fault и проц перезагружается), хотя с этим же селектором код прекрасно работает в compatibility mode. А если указать селектор как для long mode, то все работает, но при этом процессор, естественно, переходит в long mode. А у меня код обработчика 32х битный (но это не проблема, его можно сделать и 64 битным).
Вопрос - это нормально, что обработка исключения/прерывания в compatibility mode реально происходит в long mode? Или я что-то не то делаю?

Вот вывод bochs'a при использовании селектора как в PM
Bash
1
2
3
4
5
6
7
8
CPU 0: Exception 0x00 - (#DE) divide by zero occured (error_code=0x0000)
CPU 0: Interrupt 0x00 occured (error_code=0x0000)
00000152552e[CPU0 ] interrupt(long mode): must be 64 bit segment
CPU 0: Exception 0x0d - (#GP) general protection fault occured (error_code=0x0008)
CPU 0: Exception 0x08 - (#DF) double fault occured (error_code=0x0000)
CPU 0: Interrupt 0x08 occured (error_code=0x0000)
00000152552e[CPU0 ] interrupt(long mode): must be 64 bit segment
CPU 0: Exception 0x0d - (#GP) general protection fault occured (error_code=0x0008)
Добавлено через 10 минут

Не по теме:

я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы я всегда буду читать манул перед созданием темы


AMD manual
Only long-mode interrupt and trap gates can be referenced in long mode (64-bit mode and
compatibility mode). The legacy 32-bit interrupt-gate and 32-bit trap-gate types (0Eh and 0Fh, as
described in “System Descriptors” on page 90) are redefined in long mode as 64-bit interrupt-gate and
64-bit trap-gate types. 32-bit and 16-bit interrupt-gate and trap-gate types do not exist in long mode,
and software is prohibited from using task gates. If a reference is made to any gate other than a 64-bit
interrupt gate or a 64-bit trap gate, a general-protection exception (#GP) occurs.
The long-mode gate types are 16 bytes (128 bits) long. They are an extension of the legacy-mode gate
Вопрос снят
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 14:30
Ответы с готовыми решениями:

Отладка своего обработчика исключений/прерываний
Привет! Хочу сделать свою обработку исключений/прерываний, вроде все сделал,...

Обработка стандартных прерываний
Прерывание должно выгружаться из памяти (восстановление стандартного вектора...

Обработка программных прерываний...
Всем привет! выполняем лабораторные работы на MASMe, преподаватель дал...

Перевод процессора в защищённый режим и обработка прерываний от таймера
Всем доброго времени суток. Дали лабу: Перевести процессор в защищённый режим...

Структурная обработка исключений
листинг проги структурной обработки исключений,на асме(masm)

2
Mikl___
Автор FAQ
11978 / 6247 / 594
Регистрация: 11.11.2010
Сообщений: 11,305
13.12.2012, 15:41 2
Kastaneda,

Не по теме:

всегда читай манул перед созданием темы всегда читай манул перед созданием темы всегда читай манул перед созданием темы всегда читай манул перед созданием темы всегда читай манул перед созданием темы всегда читай манул перед созданием темы всегда читай манул перед созданием темы

1
Kastaneda
13.12.2012, 15:56  [ТС]     Обработка исключений/прерываний в compatibility mode
  #3

Не по теме:

>манул
сначала подумал у тебя опечатка, потом смотрю, не все верно :)

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 15:56
Привет! Вот еще темы с ответами:

Обработка аппаратных прерываний по номеру IRQ
Здравствуйте! Подскажите пожалуйста ответ на вопрос:Как ОС различает когда...

Обработчик прерываний
Необходимо сделать так, чтобы каждое второе нажатие игнорировалось. Почему то...

Обработчик прерываний
Задача: написать обработчик прерываний, заменяющий вектор прерывания от часов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru