Einzelnen Beitrag anzeigen

Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: [Assembler]: 2 Variabeln austauschen

  Alt 10. Aug 2006, 21:22
Wenn du es in eine Prozedur auslagerst, musst du auf Delphis CallingConventions achten. D.h. es wird nicht wie beim stdcall alles auf den Stack gepusht, sondern zuerst wird eax, edx und ecx gefuellt.
D.h. mit diesem Prozedurkopfprocedure Switch(a, b: integer); wird dir a in eax, und b in edx geschoben. Allerdings musst du die Parameter per Call by Reference uebergeben, da die veraenderung auch uebernommen werden soll, also so:
procedure Switch(var a, b: integer); Das aendert nur so viel, dass nicht der Wert, sondern die Adressen der Variablen mitgegeben werden.
Zu deutsch wuerde deine Prozedur dann so aussehn:
Delphi-Quellcode:
procedure Switch(var a, b: integer);
asm
  mov ecx, [eax]
  xchg [edx], ecx
  mov [eax], ecx
end;
Du musst vorher den Wert von a ([eax]) in ecx schreiben, da du nicht 2 Parameter gleichzeitig dereferenzieren kannst.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat