Dynamische Arrays sind Zeiger auf eine Array Struktur die dann wiederum einen dynamischen Zeiger enthält mit den Elementen. Ich persönlich versuche immer Assembler Zugriffe aus solche Arrays zu vermeiden.
Delphi-Quellcode:
type
PProcess = ^TProcess;
TProcess =
record
Length: integer;
Enters: integer;
end;
var
List:
array of TProcess
procedure DoWhatInAsm(List: PProcess; Count: Integer);
// EAX = @List[0]
// EDX = count of TProcess records
const
SizeOfTProcess = SizeOf(TProcess);
asm
@@1:
MOV ECX,[EAX].TProcess.Length
MOV ECX,[EAX].TProcess.Enters
ADD EAX,SizeOfTProcess
DEC EDX
JNZ @@1
end;
begin
DoWhatInAsm(@List[0], Length(List));
end;
Statt SizeOfTProcess = SizeOf(TProcess) könnte man auch den
ASM Makro TypeOf() benutzen. Mit diesem habe ich aber die Erfahrungen gemacht das er nicht immer korrekt arbeitet.
Gruß Hagen