Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятки с адресацией


Страницы:   1 2

DMitryFox ©   (2005-08-24 15:31:00) 

Люди подскажите, почему может не работать нижеследующий код и как можно исправить ситуацию:

 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   ptest: pointer;
 end;

.....

procedure TForm1.FormCreate(Sender: TObject);
begin
 ptest := VirtualAlloc(0, $100, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 asm
         xorps   xmm0, xmm0
         mov     [eax], ptest
         movapd  [eax], xmm0 // ERROR !!! Access Violation!!!
 end;
end;


Причем, если  
ptest := VirtualAlloc.....
Перенести в процедуру Button1Click, то все работает нормально.
Иными словами, мне необходимо при создании объекта навыделять памяти через VirtualAlloc для дальнейшего использования в разных методах...

Спасибо


Digitman   (2005-08-24 16:17:00) [21]

особо радует перемещение сабжа в "WinAPI" - именно в WinAPI и следует искать ответ на вопрос.


Digitman   (2005-08-24 15:56:00) [22]


> не выровненные 16 значения адресов


эт чего такое ? что за галиматья ?

говори по-русски - выравнивание на границу "слова" КАКОЙ разрядности тебе нужно ? 32 ? 64 ?


DMitryFox   (2005-08-24 15:55:00) [23]

Пофигу, с GetMem всерно не пашет, даже без использования SEE
 asm
         mov     eax, ptest
         mov      [eax], ebx // Access Violation...
 end;


Посмотрел как делает компилятор, если прописать:

 asm
        mov     eax, [ebp-$04]
        mov     eax, [eax + ptest]
        xorps   xmm0, xmm0
        movapd  [eax], xmm0
 end;

Может кто-нибуть пояснить, плиз ?


DMitryFox   (2005-08-24 15:50:00) [24]

getmem не подходит для использования с SSE,т.к. возвращает не выровненные 16 значения адресов...


Digitman   (2005-08-24 15:40:00) [25]


> мне необходимо .. навыделять памяти через
> VirtualAlloc


чем тебе GetMem не угодил ?
что за велосипед ?


DMitryFox   (2005-08-24 15:39:00) [26]

сорри еах без скобок, но всерно не работает
mov    eax, ptest


begin...end   (2005-08-24 15:38:00) [27]

> DMitryFox   (24.08.05 15:31)

> mov     [eax], ptest

Поясните это. Разве перед выполнением этой строки содержимое EAX не равно нулю?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо