Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Assembler (schon wieder): laden eines records in register (https://www.delphipraxis.net/10295-assembler-schon-wieder-laden-eines-records-register.html)

Illuminator-23-5 15. Okt 2003 14:02


Assembler (schon wieder): laden eines records in register
 
na ja, nicht gerade den Ganzen record, aber ca so was:

Delphi-Quellcode:

type
  TProcess = record
    Length: integer;
    Enters: integer;
  end;

var
  List: array of TProcess

begin
//Länge der Liste setzen usw...
asm
  ...
  MOV EDX, List[0].Length  //<=das geht
  MOV EBX, List[0].Enters  //<=und hier kennt er 'Enters' plötzlich nicht mehr!
  ...
end;
...
end.
Wenn ich im Record das Length z.B. auf l umbenenne (und überall wo ichs verwende auch, kennt er auch das nicht mehr!
warum??

negaH 15. Okt 2003 18:21

Re: Assembler (schon wieder): laden eines records in registe
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz