![]() |
Assembler (schon wieder): laden eines records in register
na ja, nicht gerade den Ganzen record, aber ca so was:
Delphi-Quellcode:
Wenn ich im Record das Length z.B. auf l umbenenne (und überall wo ichs verwende auch, kennt er auch das nicht mehr!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. warum?? |
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:
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.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; Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz