Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Inline Assembler in Methoden

  Alt 21. Jun 2007, 14:38
*von hinten aushol*

Also:
Bei der Aufrufkonvention "register" (= Delphi Standard) landen die ersten 3 Übergabeparameter in EAX, EDX, ECX, der Rest im Stack. Wenn du eine Methode hast, ist der erste Parameter immer "self", ansonsten eben nicht und in EAX steht der erste "reguläre" Übergabeparameter (wenn es ihn denn gibt), der dann bei einer Methode wie gesagt auf Position 2 (also nach EDX) geht.

In einer Funktion/Methode kannst du mit EAX, EDX und ECX machen was du willst. Alle anderen Register müssen erhalten bleiben. Umgekehrt kannst du, wenn du eine Funktion aufrufst nicht erwarten, dass EAX, EDX und ECX am Ende der Funktion mit den gleichen Werten gefüllt sind

32-Bit Rückgabewerte (Boolean, integer, smallint, byte, ...) landen immer in EAX. Fließkommawerte werden in der FPU zurückgegeben. Bei records wird als letzter Parameter ein Pointer auf das record übergeben.
Was heisst dass für dich? Den Normalfall hast du in "cpuidAvailiable". Unabhängig ob "normale" Funktion oder Methode. In EAX landet das Ergebnis.
Bei getSerial passt das Record allerdings nicht vollständig in EAX. Deswegen schafft die aufrufende Funktion etwas Platz auf dem Stack (für den record) und übergibt einen Pointer darauf als zusätzlichen Parameter. In dem Fall ist es der einzige und er landet deswegen gleich hinter self in EDX.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat