![]() |
2 Variablen vertauschen
Ich hab mir mal den Kopf darüber zerbrochen warum es nötig sein muss beim Tauschen der Werte zweier Variablen eine Hilfsvariable heranzuziehen.
:arrow: z.B.:
Code:
:coder: ich hab ein wenig herumgecoded und bin schließlich auf einen grünen zweig gekommen.
h:=x;
x:=y; y:=h; :arrow: hier der code:
Code:
x:=x xor y;
y:=x xor y; x:=x xor y; |
Re: 2 Variablen vertauschen
Zitat:
Delphi-Quellcode:
Dann doch lieber gleich so
asm
mov EAX, Y xor X, EAX mov EAX, X xor Y, EAX mov EAX, Y xor X, EAX end;
Delphi-Quellcode:
...:cat:...
asm
mov EAX, Y mov EBX, X mov Y, EBX mov X, EAX end; |
Re: 2 Variablen vertauschen
Delphi-Quellcode:
Das erinnert mich an die C-Programmierer, die auch in einer einzigen Zeile gleich ganz viel codieren können.
Code:
x:=x xor y; y:=x xor y; x:=x xor y; Damit gewinnst du vielleicht 1 Nanosekunde Ausführungszeit, dafür kann den Code in zwei Wochen keiner mehr verstehen. |
Re: 2 Variablen vertauschen
Zitat:
gerade bei der Arbeit mit der begrenzten Anzahl von Registern hat sich dieser alte ASM-Trick schon häufig bewähren können, ohne zusätzlich mit dem Stack oder einer Variablen arbeiten zu müssen, falls zwei GP-Register ausgetauscht werden sollten (hier EAX und EBX), was wesentlich (zeit-)aufwendiger wäre:
Code:
xor EAX, EBX
xor EBX, EAX xor EAX, EBX |
Re: 2 Variablen vertauschen
Der Kontrast zwischen dieser Lösung und deiner Signatur könnte kaum größer sein... :roll:
|
Re: 2 Variablen vertauschen
könnte das einer für mich nichtassembler mal erklären?
was soll dieses y:= x xor y und so? imn voraus: ich weiss was xor ist!!! |
Re: 2 Variablen vertauschen
Dann solltest du auch deine Frage selber beantworten können ;)
Gruß Hagen |
Re: 2 Variablen vertauschen
hä?
das heisst für mich:
Delphi-Quellcode:
also oder heisst jetzt xor
x:= x oder y;
y:= x oder y; x:= x oder y; aber wqarum sollte das vertauschen; zb x:=x xor y, woher soller wissen ob jetzt x:=x oder x:=y????? :gruebel: |
Re: 2 Variablen vertauschen
xor ist kein normales oder (or), sondern ein exklusives oder (macht nen unterschied ;))
|
Re: 2 Variablen vertauschen
Mal dir einfach die Bitmuster auf ein Blatt und vollzieh den Tauschvorgang nach.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 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