我在 x64 位中使用 FLD 指令时遇到了一些问题... 想将Double值加载到st0寄存器中的堆栈指针FPU,但这似乎是不可能的。 在 Delphi x32 中,我可以使用以下代码:
function DoSomething(X:Double):Double;
asm
FLD X
// Do Something ..
FST Result
end;
不幸的是,在 x64 中,相同的代码不起作用。
最佳答案
Delphi继承Microsoft x64 Calling Convention 。 因此,如果函数/过程的参数是 float/double,它们将在 XMM0L、XMM1L、XMM2L 和 XMM3L 寄存器中传递。
但是您可以在参数之前使用 var
作为解决方法,例如:
function DoSomething(var X:Double):Double;
asm
FLD qword ptr [X]
// Do Something ..
FST Result
end;
关于delphi - FLD指令x64位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15786404/