![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятки с адресацией
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 не равно нулю?