2011-06-20 14 views
5

Mam problem z uzyskaniem dostępu do elementu tablicy w złożeniu (delphi).Delphi + Dostęp do tablicy zespołu

Kod jest:

procedure TMaskBit.AllocBuffer; 
begin 
    SetLength(DataIn, 6); //array of integer 
    DataIn[0] := 1 ; 
    DataIn[1] := 2 ; 
    DataIn[2] := 3 ; 
    DataIn[3] := 4 ; 
    DataIn[4] :=5 ; 
    DataIn[5] := 6 ; 
end; 

procedure TMaskBit.SetValue(); 
asm 
    lea edx, [eax].TMaskBit.DataIn  //indice 
    mov ecx, [edx+8]     //second ement 
    mov [EAX].TMaskBit.Z, ecx 
end; 

Co może być nie tak?

Dzięki!

+2

Jak opowiadać o jakieś objawy? –

+0

Widzę kosz na zmiennej Z. Spodziewałem się zobaczyć numer 2 (DataIn [1]). –

+0

Czy jesteś pewien, że napisanie tego w asemblerze jest dobrym pomysłem? –

Odpowiedz

12

dynamicznej tablicy jest wskaźnikiem, więc należy użyć mov zamiast lea:

type 
    TIntArray = array of Integer; 

    TMaskBit = class 
    Z: Integer; 
    DataIn: TIntArray; 
    procedure AllocBuffer; 
    procedure SetValue(); 
    end; 

procedure TMaskBit.AllocBuffer; 
begin 
    SetLength(DataIn, 6); //array of integer 
    DataIn[0] := 1 ; 
    DataIn[1] := 2 ; 
    DataIn[2] := 3 ; 
    DataIn[3] := 4 ; 
    DataIn[4] :=5 ; 
    DataIn[5] := 6 ; 
end; 

procedure TMaskBit.SetValue(); 
asm 
    mov edx, [eax].TMaskBit.DataIn  // edx references DataIn[0] !!! 
    mov ecx, [edx+8]     // DataIn[2] 
    mov [EAX].TMaskBit.Z, ecx 
end; 

procedure TForm7.Button3Click(Sender: TObject); 
var 
    MB: TMaskBit; 

begin 
    MB:= TMaskBit.Create; 
    MB.AllocBuffer; 
    MB.SetValue; 
    ShowMessage(IntToStr(MB.Z)); 
end; 
+0

DZIĘKI DUŻO! To działa... –

Powiązane problemy