Ich habe diese Prozedur, die die Bytes (niedrig / hoch) einer Word-Variable vertauscht (Es macht das gleiche Zeug wie System.Swap-Funktion). Die Prozedur funktioniert, wenn die Compileroptimierung ausgeschaltet ist, aber nicht, wenn sie aktiviert ist. Kann mir jemand dabei helfen?
%Vor% Ich bin ein bisschen überrascht, dass niemand den absolute
"hack" erwähnt, der seit mehr als einem Jahrzehnt existiert, aber nicht zu viel Rampenlicht bekommt ... wie auch immer, hier sind meine zwei Cent
Haben Sie darüber nachgedacht, die Funktion Swap
des Compilers zu verwenden?
Falls nicht, brauchen Sie dafür kein ASM (und ASM wird wahrscheinlich nicht in 64-Bit-Delphi verfügbar sein). Sie können einfach
tun %Vor%und natürlich gibt es "eine Million" Variationen zu diesem Thema.
%Vor%und, sehr kurz,
%Vor%oder
%Vor%Obwohl Sergs Antwort sicherlich richtig ist, wie in den Kommentaren zu Sergs Antwort ausgeführt, ist es nicht effizient. Der schnellste wäre eindeutig der in Gabrs Antwort angegebene Code, aber da Sie explizit eine Prozedur und keine Funktion wünschen, wäre die folgende Version von Sergs Routine die folgende:
%Vor% [Anmerkung1:] Sergs Version der Funktion wird aller Wahrscheinlichkeit nach nicht für den kommenden x64-Delphi-Compiler funktionieren. Unter der Annahme, dass Embarcadero bei ihrem Plan (der von Allen Bauer erwähnt wird) der Win64-Aufrufkonvention (wo @TwoBytes
über RCX
übergeben würde) bleiben würde, sollte die Version in dieser Antwort immer noch auf x64 funktionieren.