Entwickler-Ecke

Algorithmen, Optimierung und Assembler - swap / bytes tauschen


uall@ogc - So 23.01.05 22:57
Titel: swap / bytes tauschen

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
function swapbytes(c: cardinal): cardinal; cdecl;
asm
  MOV ECX,DWORD PTR SS:[c]
  MOV EAX,ECX
  MOV EDX,ECX
  SAR EAX,$8
  AND EDX,$FF
  AND EAX,$FF
  SHL EDX,$8
  ADD EAX,EDX
  MOV EDX,ECX
  SAR EDX,$10
  SHL EAX,$8
  AND EDX,$FF
  ADD EAX,EDX
  SAR ECX,$18
  SHL EAX,$8
  AND ECX,$FF
  ADD EAX,ECX
end;


wiekann ich das in delphi lösen

bytes tauschen bei 4 bytes

aus $12345678 soll $78563412 werden

wenns mit ner assemböer anweisung in weniger zeilen geht oder es nen delphi code gibt plz posten es kann ruhig langsamer sein


BenBE - So 23.01.05 23:24


Delphi-Quelltext
1:
Result := A and $FF shl 24 + A and $FF00 shl 8 + A and $FF0000 shr 8 + A and $FF000000 shr 24;                    


tommie-lie - So 23.01.05 23:27


Delphi-Quelltext
1:
2:
3:
4:
function SwapLong(aValue: LongWord): LongWord; assembler
asm
  BSWAP EAX;
end;
oder

Delphi-Quelltext
1:
2:
3:
4:
function SwapLong(aValue: LongWord): LongWord;
begin
  Result := ((aValue shr 24and $FFor ((aValue shr 8and $FF00or ((aValue shl 8and $FF0000or ((aValue shl 24and $FF000000);
end;


uall@ogc - So 23.01.05 23:35

danke euch beiden BSWAP hab ich genommen ist schön kurz :)