Здравствуйте, Серж, Вы писали:
С>Есть необходимость в 32-bits слове сделать перестановку байт.
| | код |
| | {$IFDEF CPU386}
function Swap16(AValue: Word): Word;
asm
xchg al, ah;
end;
{$ELSE}
function Swap16(AValue: Word): Word; inline;
begin
Result := ((AValue shr 8) and $FF) or ((AValue shl 8) and $FF00);
end;
{$ENDIF}
{$IFDEF CPU386}
function Swap32(AValue: DWORD): DWORD;
asm
bswap eax;
end;
{$ELSE}
function Swap32(AValue: DWORD): DWORD; inline;
begin
Result := (Swap16(AValue shr 16) and $FFFF) or ((Swap16(AValue) shl 16) and $FFFF0000);
end;
{$ENDIF}
type
Int64Rec = packed record
Lo, Hi: LongWord;
end;
{$IFDEF CPU386}
function Swap64(const AValue: int64): Int64;
asm
mov edx,dword ptr [AValue];
mov eax,dword ptr [AValue+4];
bswap edx;
bswap eax;
end;
{$ELSE}
function Swap64(const AValue: int64): Int64; inline;
begin
Int64Rec(Result).Lo := Swap32(Int64Rec(AValue).Hi);
Int64Rec(Result).Hi := Swap32(Int64Rec(AValue).Lo);
end;
{$ENDIF}
|
| | |
Update: чет я затупил, прочел техзадание через строку.