Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SSE НЕ РАБОТАЕТ!!! 
:(
    Опции темы
chyapay
Дата 22.9.2006, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

Репутация: нет
Всего: нет



Уважаемые программисты!

Помогите пожалуйста! 
Я работаю в Фри Паскаль на встроенном ассемблере, под досом.
У меня не получается запустить программу, в которой я юзаю инструкции ССЕ.
Она выдает мне ран-тайм эррор. Почему Это? Как Это ИСПРАВИТЬ???
Я полагаю, что это из-за того, что мой дпми расширятель очень стар и не поддерживает этих инструкций 
(но разве он их интерпретирует??? он же вроде только кидает исполняемый файл 
процессору "на тарелку", а последний уже его кушает как хочет... но - возможно я неправ, тогда обьясните, если не впадло... )  Но доказательством того может быть то, что эта программа под виндовсом ХР работает без ошибок.
Кстати, я пробовал писать ее на фасме, но и это не помогло. 
Выручите, если можете!
Заранее благодарен...


---
пример строчки, которая делает в дос эту ошибку:

     movups xmm1, xmm0

в виндовсе все ОК.
PM MAIL ICQ YIM   Вверх
sgi1981
Дата 23.9.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 1
Всего: 10



Уважаемый друг !
Дело заключается в том, что среди системных регистров управления микропроцессором (cr0, cr2, cr3, cr4) 
существует так называемый регистр...
Цитата

CR4 — Contains a group of flags that enable several architectural extensions, and indicate operating system or executive support for specific processor capabilities.

Это цитата из документа 
http://developer.intel.ru/download/design/...ls/25366817.pdf

То есть этот регистр содержит флаги(биты) разрешительного характера, значения которых запрещает-разрешает использование некоторых особенностей работы микропроцессора и расширений ALU (MMX, SSE, SSE2, SSE3).

9 бит CR4 (флаг OSFXSR) запрещает-разрешает 
1) автоматическое сохранение значений всех регистров расширений ALU процессора при выполнении команд FXSAVE и FXSTOR (если бит = 1 - разрешено)
2) возможность выполнения инструкций SSE, SSE2, SSE3 (если бит = 1 - разрешено).

ДОС не устанавливает этот бит.
Поэтому установите его сами в своей программе.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
chyapay
Дата 27.9.2006, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

Репутация: нет
Всего: нет



Пробовал.. К сожалению, не работает.
Дело в том, что глупый cwsdpmi.exe напрочь отказывается дать мне доступ к регистру 
CR4.  Наверное, у моей проги не тот уровень привилегий. 
Но как его поменять? (возможно ли это из нее самой?)

Меня интересует еще один вопрос:
я пишу бутлоадер. он уже считывает с винчестера в память по некоторому определенному адресу код ядра моей ОС. Но как он может загрузить ее, установя пред этим 32битный протэктэд-мод? Как это реализовать? может, подскажете какой н-ть исходник?
Я б хотел чтобы у меня этот участок памяти оформлялся под селектор кода, с максимально 
управительскими привилегиями, и чтобы сразу же лоудался. 

Подскажите мне пожалуйста как это сделать.
PM MAIL ICQ YIM   Вверх
sgi1981
Дата 27.9.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 1
Всего: 10



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

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

Цитата

Наверное, у моей проги не тот уровень привилегий. 

Я не понимаю что делает программа cwsdpmi.exe.
Возможно она работала в защищенном режиме работы процессора и её коду был присвоен наинизший уровень привилегий.
Но вы же сами понимаете или должны вообще понимать, если вам нужно написать собственную ОС, так системными регистрами и регистрами управления должен заниматься высоко привилегированный код !
Цитата

Но как его поменять? (возможно ли это из нее самой?)

Как правило.
Поменять уровень привилегий собственного сегмента кода или страницы памяти кода может только самый высоко привилегированный код. Таблица дескрипторов сегментов кода и данных должна как правило храниться в сегменте данных с наивысшим уровнем привилегий. Менять данные в таком сегменте памяти может только высоко привилегированный код.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
chyapay
Дата 1.10.2006, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

Репутация: нет
Всего: нет



Ясно. Перехожу в реальный режим. Только еще вот вопрос: как бы мне сделать чтобы загруженный 32(!!!)-битный код с винчестера по адресу 00D0h:0000h код запустить, перейдя перед этим в защищенный режим. Как мне корректно сделать главную таблицу дескрипторов, сделать дескриптор для данных и для кода, и припустим где код я уже писал выше, а данные припустим по адресу 00E0h:0000h, как тогда это сделать, загрузить ds, cs и т.п. чтобы просто джампануть на код и чтобы он смог нормально работать со своими переменными. Если можно, сурс...
PM MAIL ICQ YIM   Вверх
dumb
Дата 1.10.2006, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 2
Всего: 158



Цитата(chyapay @  1.10.2006,  16:11 Найти цитируемый пост)
Если можно, сурс...

[offtop]никогда не понимал людей, которые вместо "hello world" начинают писать ОС... user posted image[/offtop]

PM MAIL   Вверх
sgi1981
Дата 1.10.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 1
Всего: 10



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

Кроме того, возможно перед этим нужно перепрограммировать контроллер прерываний (если он так еще называется).
У меня есть пример программирования контроллера прерываний в книге Юрова. Но тот пример работает для контроллеров i8259A соединенных каскадом (два контроллера - ведущий и ведомый, выход ведомого соединен со входом ведущего, выход INT ведущего соединен со входом INTR микропроцессора, выход INTA ведущего соединен со входом INTA микропроцессора), и кроме всего этого еще есть так называемые немаскируемые прерывания и для них предназначен выход NMI микропроцессора.

ЭТО тебе дружок нужно сначала сходить на рынок по компьютерной литературе или как хочешь... и там посмотреть где есть книга Виктора Юрова по ассемблеру. Купить "Учебник".

Без подобной книги вариться в собственном котле ты будешь долго.

Добавлено @ 18:48 
Да и еще забыл написать...
Я уверен, ты знаешь что такое аппаратное прерывание.
После перехода в защищенный режим, если ты не запретил аппаратные прерывания (ну в смысле их обработку), для каждого аппаратного прерывания должен быть код, который бы мог работать в защищенном режиме. В ДОС есть коды подпрограмм прерываний. Но они для реального режима работают. А вот если там в тех кодах будут участки, которые не смогут выполниться правильно в защищенном режиме, то это значит, что код ДОСовских подпрограмм-обработчиков прерываний не годится. И поэтому нужно писать собственные функции для обработки прерываний от клавиатуры, мыши, видеоадаптера, НЖМД, НГМД, таймера, системных часов, параллельного порта, последовательного порта, возможно ты еще и сетевой адаптер обеспечишь обработчиком прерывания от него, и других устройств...

Удачи !


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
chyapay
Дата 2.10.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

Репутация: нет
Всего: нет



Да... Книга Юрова у меня есть. У меня вообще по асму 3 книги. Две - Юрова и одна - Зубкова.
Только-вот у них не очень хорошие эти все сурсы: не хотят работать нормально. 
Возможно, это через то что там все под масм и тасм , а уменя фасм. 
А вообще-то возможно ли мой код на асмо-паскале в середе Фри Паскаль компильнуть и выжать из него в бинарном плоском формате процедуры? Может следует разобраться в структуре ЕХЕ-файла?
А по поводу прерываний - то может по этому и у меня комп перегружается когда я захожу в виртуальны режим? Может мне сделать какую-то фишку чтобы все прерывания, мною не измененные, работали в режиме V86?

Я пока что почитаю об особенностях таблиц дескрипторов и т.п. и потренируюсь делать это из-под реального режима ДОС, чтобы постоянно не перегружать ПК и не лазить в биос. А вообще-то: DPMI случайно не работает с этим всем выше перечисленным? (прерывания, исключения , работа с таблицами дескрипторов и т.п.)
PM MAIL ICQ YIM   Вверх
sgi1981
Дата 3.10.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 1
Всего: 10



В первой своей тренировке перед входом в защищенный режим советую запретить обработку аппаратных прерываний командой 
Код

cli

Если так не сделать, то после 1/18 секунды могут происходить непредсказуемые вещи - потому что так регулярно происходит прерывание от таймера.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
chyapay
Дата 18.10.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 6.2.2006
Где: UA, Lviv

Репутация: нет
Всего: нет



да, это число я знал давно... и прерывания как-раз меня интересуют. 
Но не мог бы ты мне обьяснить, вот когда я сделал вручную два дескриптора - кода и данных для защищенного режима, как мне для них сделать все прерывания адресами на мою ничего не делающую процедуру-заглушку? Это делать нужно в реальном или защищенном режиме?
И где хранятся адреса процедур обработки прерываний? В первых 256 двордах физической памяти или локально для каждого дескриптора: в первых 256 двордах его начала? 
Это меня сильно интересует. 

И есть ли какие-то исключительные значения для адресов входа в такие процедуры? например, чтобы проц не дергался туда-сюда дла пустого прерывания могли б изобрести например чтоби адрес был 0, тогда проц бы его просто не трогал...

PM MAIL ICQ YIM   Вверх
sgi1981
Дата 18.10.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: 1
Всего: 10



Цитата
Да... Книга Юрова у меня есть. У меня вообще по асму 3 книги. Две - Юрова....


Из книги Юрова цитата [Assembler / В. Юров. - СПб.: Питер, 2001. страница 407]
Цитата

Ключевыми компонентами в этой схеме являются дескрипторная таблица прерываний IDT и системный регистр idtr. ...

Далее на 408...409 страницах описывается три типа прерываний: сбой, ловушка, аварийное завершение.
В 8-ми байтных дескрипторах ловушки, сбоя, аварийного завершения биты с 16 по 31 - это так называемый indicator - селектор одной из таблиц GDT или LDT в зависимости от состояния бита TI в нем. Поля offset_1 (биты 0...15) и offset_2 (биты 48...63) - это две части одного 32-разрядного смещения в том сегменте, который описывается дескриптором с номером indicator.

Ну у тебя же есть учебник Юрова. Ты там можешь все это найти.
Цитата

Только-вот у них не очень хорошие эти все сурсы: не хотят работать нормально. 
Возможно, это через то что там все под масм и тасм , а уменя фасм. 

Работать или компилироваться ?
Если ты в WINDOWS - твой комп уже находится в защищенном режиме, ясен пень, что твои коды имеют самый низкий уровень привилегий и могут не работать.


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0860 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.