Soma em assembler não funciona...
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???
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
Curtidas 0
Respostas
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.
O problema é que vc não indicou o tipo dados(qword: Double), então (dword: Single) foi assumido, o que gerou o resultado errado.
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
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...
já tinha tentado desse modo que vc passou, mas não funciona também...
GOSTEI 0
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