Рассматривали ли вы использование функции Swap
компилятора?
procedure TForm1.FormCreate(Sender: TObject);
var
a: word;
begin
a := $1234;
a := Swap(a);
Caption := IntToHex(a, 4)
end;
Если нет, то для этого вам не нужен ASM (и ASM, вероятно, не будет доступен в 64Бит Дельфи).Вы можете просто сделать
procedure MySwap(var a: word);
var
tmp: byte;
begin
tmp := PByte(@a)^;
PByte(@a)^ := PByte(NativeUInt(@a) + sizeof(byte))^;
PByte(NativeUInt(@a) + sizeof(byte))^ := tmp;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
a: word;
begin
a := $123456;
MySwap(a);
Caption := IntToHex(a, 4)
end;
и, конечно, существует «миллион» вариантов этой темы.
procedure MySwap(var a: word);
var
tmp: byte;
type
PWordRec = ^TWordRec;
TWordRec = packed record
byte1, byte2: byte;
end;
begin
with PWordRec(@a)^ do
begin
tmp := byte1;
byte1 := byte2;
byte2 := tmp;
end;
end;
и, очень кратко,
procedure MySwap(var a: word);
begin
a := word(a shl 8) + byte(a shr 8);
end;
или
procedure MySwap(var a: word);
begin
a := lo(a) shl 8 + hi(a);
end;