2011-06-20 19 views
5

Tengo un problema para acceder a un elemento de un conjunto en el conjunto (delphi).Delphi + conjunto de montaje acceso

El código es:

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; 

Qué podría estar mal?

Gracias!

+2

¿Qué hay de contar algunos de los síntomas? –

+0

Veo basura en la variable Z. Esperaba ver el número 2 (DataIn [1]). –

+0

¿Estás seguro de que escribir esto en ensamblador es una buena idea? –

Respuesta

12

matriz dinámica es un puntero, por lo que debe utilizar en lugar de movlea:

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

GRACIAS MUCHO! Funciona... –