Поиск:

Ответ в темуСоздание новой темы Создание опроса
> быстрая передача членов C++ класса в ASM, EBP = THIS и относительное смещение +- 
:(
    Опции темы
Hiehachi
Дата 23.9.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.12.2005
Где: Ukraine->Odess a

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



Здравствуйте .

 Вкратце... -  занимаюсь оптимизацией разработаного класса для отрисовки графики. 
 Стоит задача в оптимизации по скорости графических вычислений, с использованием ассемблера. С совместным использованием 'C' и ассемблера проблем невидел, до тех пор, когда не захотел быстро получить содержимое переменных обьявленных в теле самого класса, а не локальных - в функциях.
 Проблема состоит в неудобстве использования переменных обьявленных в теле класса. С локальными переменными обьявлеными в функциях-членах класса неудобных проблем нет, все они адресуются при помощи обычных имен переменных:
 Например:

Код

void Funct ()
 {
  int value1=30;
  int value2=50;
  int value3;
  asm
     {
      mov  eax,value1
      add  eax,value2
      mov value3,eax
         // ассемблерная вставка может еще раскрыться компилятором как:
         // mov eax,[ebp-04]
         // add eax,[ebp-08]
         // mov [ebp-0c],eax
     }
 }


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

 Вот пример проблемы:
Код

class TestClass{
public:

    int *lpRawData;  - пример переменной к которой хочу получить доступ

    void Funct1 ();

};

void TestClass::Funct1 ()
 {
 int datas=10;
 asm 
      {
      mov eax,datas            // в этом случае проблем нет (переменная локальная)
      mov edx,lpRawData    // В этом случае ПРОБЛЕМА (переменная обьявлена в теле класса, почему-то с 
      // ассемблера до нее не достать)
      //         ---- Компиляция: [C++ Error] myfile.cpp(номер строки): E2188 Expression syntax  ----------
      // Компилятор не хочет ее искать из ассемблерной вставки, а если  например на 'C'  
      // написать            datas=(int)lpRawData - то оно без проблем раскроется так: mov edx,[ebp+04]
      //  mov edx,lpRawData  - должен раскрываться так же:        mov edx,[ebp+04]
      }
 }

 Существует ли, какие-нибудь, директивы со стороны Borland C++ или его ассемблера для открытия области видимости переменных обьявленных в классе для ассемблерного кода. Очень хотелось бы решить эту проблему. Поможите.
 (хочется найти что-то, по типу вот так: mov eax,TestClass::lpRawData - в Борланде это не работает, в Визуал C - работает, ищу разгадку проблемы... )
((Сейчас для доступа к переменным класса из ассемблера я создаю локальную переменную и туда просто копирую необходимую переменную класса, а потом эту локальную переменную использую на ассемблере. Зачем спрашивается создавать эти перевалочные переменные ?))
 Раньше, до Borland C++ v6 ассемблер ихний работал по другому, любая обьявленная адресная метка в ассемблерной функции была видна из другой ассемблерной функции и можно было творить маленький беспредел - прыгать из одной функции в середину другой и т.д. Сейчас поведения ассемблера изменились, уже все ассемблерные метки видны только локально в той 'C' функции в которой определены.

   

Это сообщение отредактировал(а) Hiehachi - 23.9.2007, 23:30
PM MAIL WWW ICQ   Вверх
dumb
Дата 24.9.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



Код

  mov eax,this
  mov edx,[eax].lpRawData


Добавлено через 4 минуты
Цитата(Hiehachi @  24.9.2007,  00:13 Найти цитируемый пост)
datas=(int)lpRawData - то оно без проблем раскроется так: mov edx,[ebp+04]
это только получение this. дальше должно быть еще две строки - получение значения и запись его в стековую переменную.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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