Soma em assembler não funciona...

Delphi

01/07/2004

Tenho a seguinte rotina:

function Sum(var X, Y: real): real;
begin

asm
fld x
fld y
fADD
fstp @Result
end;
end;

no entanto ela não retorna o valor correto. Só funciona sem o var.
Alguém sabe por que???


Ertai

Ertai

Curtidas 0

Respostas

Beppe

Beppe

01/07/2004

Quando um parâmetro é var, o endereço para ele é passado, naum o conteúdo. O Delphi mascara um pouco os modos, por isso pode ser complicado pra assimilar.

function Sum(var X, Y: Double): Double;
asm
// a notação xword ptr [mem], é comum para var e não-var
        fld     qword ptr [X]
        fadd    qword ptr [Y]
end;


O problema é que vc não indicou o tipo dados(qword: Double), então (dword: Single) foi assumido, o que gerou o resultado errado.


GOSTEI 0
Ertai

Ertai

01/07/2004

esse lance de passagem por parametro e por endereço eu já sabia...
já tinha tentado desse modo que vc passou, mas não funciona também...


GOSTEI 0
Beppe

Beppe

01/07/2004

esse lance de passagem por parametro e por endereço eu já sabia... já tinha tentado desse modo que vc passou, mas não funciona também...

Eu naum costumo testar o que posto :oops: ...mas este sim, funcionou perfeito pra mim...Que versão do Delphi?


GOSTEI 0
POSTAR