скалогрыз Спасибо...
- Код: Выделить всё
- TIntArray = array [0..4] of integer;
Данный метод не пойдет.. нужно как раз для динамических.. но благодаря фразе:
скалогрыз писал(а):наверное, потому-что массив динамический, который сам по себе указатель на хитрую структуру.
Вы мне открыли глаза... я сам же и забыл что динамический массив это указатель не на первый элемент а именно указатель.. а вот туда куда указывает этот указатель лежит указатель на первый элемент...  

 ... Бывает и такое  
 Теперь все работает:
 Теперь все работает:- Код: Выделить всё
-    TIntArray1 = array [0..4] of integer;
 TIntArray2 = array  of integer;
Тест и функции для типа:  TIntArray1Асм процедура- Код: Выделить всё
-  procedure CreateAr1(var D:TIntArray1); register;assembler;
 {$ASMMODE intel}
 asm
 mov dword ptr[EAX],0
 mov dword ptr[EAX+4],1
 mov dword ptr[EAX+8],2
 end;
 
Тест:- Код: Выделить всё
- procedure TForm1.Button1Click(Sender: TObject);
 var D1:TIntArray1;
 i:Integer;
 begin
 CreateAr1(D1);
 for i:=0 to High(D1) do
 memo1.Lines.Add(IntToStr(D1[I]));
 end;
 
Тест и функции для типа:  TIntArray2Асм процедура- Код: Выделить всё
- procedure CreateAr2(var D:TIntArray2); register;assembler;
 {$ASMMODE intel}
 asm
 //push EBX
 mov ECX,[EAX]
 mov dword ptr[ECX],0
 mov dword ptr[ECX+4],1
 mov dword ptr[ECX+8],2
 mov dword ptr[ECX+12],3
 end;
 
Т.е мы сохраняем в ECX значение ячейки памяти на которую указывает (указатель динамического массива)
И тепрь ECX и есть память с которой расположен первый элемент... 
Тест:- Код: Выделить всё
- procedure TForm1.Button2Click(Sender: TObject);
 var D1:TIntArray2;
 i:Integer;
 begin
 SetLength(D1,5);
 CreateAr2(D1);
 for i:=0 to High(D1) do
 memo1.Lines.Add(IntToStr(D1[I]));
 end;
 
PS. Всем Спасибо