Версия для печати

Быстрый способ обмена значений двух переменных

Оцените материал
(0 голосов)

Быстрый способ обмена значений двух переменных

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, 
 

Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
 
 
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;
Прочитано 10009 раз