![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Elandar |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 29.8.2008 Репутация: нет Всего: нет |
Доброго времени суток!
Пишу программу, которая строит график функции от трех переменных в неявном виде. Перед вычислением множества значений забиваю все в машинный код. Выглядит это так:
Как это работает? Где мне найти значения для других тригонометрических функций и операции "^"? Могут ли быть проблемы с переносимостью программы? OP_ADD,OP_SUB... - константы Уже в интернете третий день сижу сутками не смог ничего найти. Буду очень признателен за помощь! Программу пишу в образовательный целях. VS 2008 C++.[code=cpp] Прикрепил .cpp и .h Присоединённый файл ( Кол-во скачиваний: 3 )
Project.rar 2,88 Kb |
||||
|
|||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
Работает так:
в массив common_data[4096]; забивается машинный код для вычисления функции Затем у системы запрашивается сегмент памяти VirtualProtect(my_pointer, m_size, PAGE_EXECUTE_READWRITE, &ignore)) который может исполняться процессором и копируем туда весь код Теперь по адресу my_pointer находится функция, вычисляющая нужную нам формулу. Коды других функций смотри в любом справочнике по x86 процессорам ( а самое главное по сопроцессору). Или получить эксперементальным способом - напиши код, делающий то что тебе нужно и под отладчиком открой окно CPU там и увидишь коды нужных тебе операций. Но в дополнение лучше взять справочник - сэкономишь кучу времени, т.к код операции состоит из кода самой операции, адресов операндов и дополнительных флагов ЗЫ: Переносимость у такого кода минимальная. На других процах работать не будет, могут быть проблемы с моделью вызова (она определяет куда помещаются входные переменные, откуда берутся выходные, и кто ответсвенен за стек). Да и антивирусы такой код могут посчитать за подозрительный. |
|||
|
||||
| Elandar |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 29.8.2008 Репутация: нет Всего: нет |
Спасибо, RomanEEP за ответ!
Действительно, у друзей ругается антивирусы. Проблему с переносимостью как-то можно решить оптимально? |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture Volume 2A: Instruction Set Reference, A-M Volume 2B: Instruction Set Reference, N-Z Volume 3A: System Programming Guide Volume 3B: System Programming Guide |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: нет Всего: 8 |
оптимально эта проблему уже решена в .NET и Java
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |