Delphi-Quellcode:
function SwapDWord(DW: DWord): DWord;
asm
bswap eax
// Byte-Swap durchführen
end;
Viel Spaß
Und wenn wir schon dabei sind: [DW] wäre die Adresse auf welche DW zeigt. Und zwar das DWORD an dieser Stelle, weil der Zieloperand die Größe vorgibt
Ach ja und Delphi 4 kennt z.B. noch nicht BSWAP. Da heißt es dann:
Delphi-Quellcode:
function SwapDWord(DW: DWord): DWord;
asm
db 0Fh, 0C8h
// "bswap EAX" can only be executed on 486+!!!
end;
So habe ich es bei der Native
API-
Unit der JEDIs gelöst:
Delphi-Quellcode:
(* Own function to swap bytes in 32bit values
The RtlUlongByteSwap routine converts a ULONG from little-endian to
big-endian, and vice versa. *)
function RtlUlongByteSwap(Source:ULONG):ULONG;
asm
// This is not written as mnemonics to be compatible with D4!
db 0Fh, 0C8h
// "bswap EAX" can only be executed on 486+!!!
(*
// Does the same but perhaps slower ...
// Source = $11223344
rol AX, 08h // Source = $11224433
rol EAX, 0Fh // Source = $44331122
rol AX, 08h // Source = $44332211
*)
end;