Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Assembler (schon wieder): laden eines records in registe

  Alt 15. Okt 2003, 19:21
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
  Mit Zitat antworten Zitat