Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2012, 19:22   #1
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию FPU в защищенном режиме

Здравствуйте. Сразу к делу. Имеется программа, написанная на BP с асм-вставками, переводящая в защищенный режим работы процессора и которая должна там сгенерировать седьмое исключение — отсутствие (в частности) FPU.
Проблема в том, что при попытке использовать в защищенном режиме какую-либо из команд FPU (за исключением fninit, она, как я понял, не инициирует прерывание), DoSBOX вылетает. Вот кусок кода, в котором я пытаюсь использовать FPU, предварительно установив бит TS регистра CR0 в единицу.
Код:
 
db 0fh,20h,0c0h                        { MOV EAX,CR0 }
or al,0008h
db 0fh,22h,0c0h                        { MOV CR0,EAX }
finit
Что самое интересное, даже попытка использования FPU без предварительного "подкручивания" CR0 приводит к вылету.
Прикрепил сам .pas файл и текст модуля PROT, который используется программой. В модуль особо лазить не стоит, его прикрепил лишь для обеспечения работы.
Вложения
Тип файла: rar PROT.rar (16.9 Кб, 11 просмотров)
RAZOR1703 вне форума Ответить с цитированием
Старый 26.12.2012, 19:39   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Вы в досбоксе запускаете прогу для перехода в защищенный режим ? о_0
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 26.12.2012, 20:03   #3
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Goodwin98
Да. И это работает, проверено двумя другими обработчиками. А по теме какие-нибудь конкретные мысли будут?
RAZOR1703 вне форума Ответить с цитированием
Старый 26.12.2012, 21:28   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Да. Воспользуйтесь VirtualBox'ом или иже с ним.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 26.12.2012, 23:41   #5
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Не сработало. Еще идеи?
RAZOR1703 вне форума Ответить с цитированием
Старый 27.12.2012, 00:00   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Что не сработало ?
Не вылетел же у вас виртуалбокс ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 27.12.2012, 00:09   #7
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Не вылетел, повис.

Скажите, вы попробовали закомпилировать программу, или это что-то из разряда советов "пропылесось кулер и сделай дефрагментацию"?
RAZOR1703 вне форума Ответить с цитированием
Старый 27.12.2012, 00:15   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Задача переключена (бит 3). Устанавливается процессором при каждом переключении задач, сбрасывается программно (загрузкой CR0 или специальной командой CLTS). Этот флаг влияет на выполнение команд сопроцессора, MMX и SSE по нижеследующим правилам:
Если флаг TS установлен, а EM (бит 2 регистра CR0) сброшен, при попытке выполнения любой из команд сопроцессора и наборов MMX и SSE возникает исключение #NM (вектор 7). Исключением из этого правила являются команды PAUSE, PREFETCHn, SFENCE, LFENCE, MFENCE, MOVNTI и CLFLUSH, игнорирующие состояние флага TS, а также WAIT/FWAIT (см. ниже).
Если флаг TS установлен, а флаги MP (бит 1 регистра CR0) и EM сброшены, исключение #NM при попытке выполнения команд WAIT/FWAIT не возникает. В противном случае эти команды также вызывают исключение #NM.
Если флаг EM установлен, установка TS не оказывает влияния на выполнение команд сопроцессора, MMX и SSE.
это раз.

второе, обработчик исключений то есть?

воспользуйтесь Bochs
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 27.12.2012 в 00:18.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.12.2012, 00:16   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

У меня нет компилятора паскаля. Но согласитесь, если вылетает эмулятор, а не программа работающая в нем, то это проблема эмулятора.
Выложите компилированный файл, мне интересно как изнутри можно повесить виртуальную машину.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 27.12.2012, 00:30   #10
RAZOR1703
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 74
По умолчанию

Пепел Феникса
Цитата:
or al,0008h
Третий бит, не?
Все правильно, седьмое исключение мне и нужно вызвать. В модуле prot описана заглушка, выводящая номер исключения и адрес команды, инициировавшей ее, после чего досрочно завершает работу программы. Собственно, моей задачей и есть разработать собственный обработчик, но споткнулся я на генерации исключения, как видите.
И акцент проблемы немного не там. Почему у меня происходит такая ерунда при попытке использовать FPU, даже без шаманства с CR0?
Goodwin98
Прошу.
http://rghost.ru/42539958
RAZOR1703 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В защищенном режиме вывести время sheff123 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.12.2012 11:27
Организация памяти в защищенном режиме. BigBong Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.09.2011 11:58
Как проверить что windows запущена в защищенном режиме vitol Win Api 8 21.05.2010 12:02
работа с подпрограммами в защищенном режиме x86 =termi= Помощь студентам 1 19.01.2010 12:22
Работа в защищенном режиме(TASM) adgam Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 11.11.2009 22:48