procedure SwapVars1(var u, v; Size: Integer);
var
x: Pointer;
begin
GetMem(x, Size);
try
System.move(u, x^, Size);
System.move(v, u, Size);
System.move(x^, v, Size);
finally
FreeMem(x);
end;
end;
procedure SwapVars2(var Source, Dest; Size: Integer);
// By Mike Heydon, mheydon@eoh.co.za
begin
asm
push edi
push esi
mov esi,Source
mov edi,Dest
mov ecx,Size
cld
@1:
mov al,[edi]
xchg [esi],al
inc si
stosb
loop @1
pop esi
pop edi
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SwapVars1(X1, X2, SizeOf(Integer));
end;
|