quinta-feira, 22 de dezembro de 2011

(Assembly) Swap para Pascal

Saudações!

Estudando Assembly descobri uma forma legal de se fazer swap (troca de valores nas variáveis) usando apenas asm em pascal

Segue o trecho do código:

procedure TForm1.Button1Click(Sender: TObject);

var X, Y: DWORD;
begin
// Valores antes do swap
X := 10;
Y := 05;

asm // Parte em Assembly

mov edx, [x]
mov ebx, [y]


mov dword ptr [x], edx
mov dword ptr [y], ebx

end;

// Valores trocados
ShowMessage('VALOR X ->' + IntToStr(X));
ShowMessage('VALOR Y ->' + IntToStr(Y));
end;

É uma forma padrão de swap, porém é usado em assembly que passa os valores para pascal.

O sistema usa endereços temporários, no caso são ebx e edx. Os endereços assumem os valores de Y e X que posteriormente são trocados passando o valor as variáveis em pascal.


Nenhum comentário:

Postar um comentário