Prozedur, die die Bytes (niedrig / hoch) einer Word-Variablen tauscht

7

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%     
Sahara 27.02.2011, 15:09
quelle

5 Antworten

8

Schnellste:

%Vor%

Falls Sie auch DWORD umkehren wollen:

%Vor%     
gabr 27.02.2011, 17:41
quelle
8

Sie können das EBX-Register nicht in ASM-Code verwenden, ohne es zu speichern / wiederherzustellen. Die korrigierte Version Ihres Codes ist

%Vor%     
kludg 27.02.2011 15:33
quelle
7

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

%Vor%     
ComputerSaysNo 28.02.2011 01:01
quelle
5

Haben Sie darüber nachgedacht, die Funktion Swap des Compilers zu verwenden?

%Vor%

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%     
Andreas Rejbrand 27.02.2011 15:20
quelle
1

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.

    
PhiS 20.06.2011 06:51
quelle

Tags und Links