...den Inhalt zweier Variablen auf schnelle Weise vertauschen?
Autor: Wellington Lima dos Santos
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;
printed from
  www.swissdelphicenter.ch
  developers knowledge base