AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Assembler (schon wieder): laden eines records in register
Thema durchsuchen
Ansicht
Themen-Optionen

Assembler (schon wieder): laden eines records in register

Ein Thema von Illuminator-23-5 · begonnen am 15. Okt 2003 · letzter Beitrag vom 15. Okt 2003
Antwort Antwort
Illuminator-23-5
(Gast)

n/a Beiträge
 
#1

Assembler (schon wieder): laden eines records in register

  Alt 15. Okt 2003, 14:02
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??
  Mit Zitat antworten Zitat
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, 18: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 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