delphi - FLD指令x64位

标签 delphi assembly x86-64 fpu basm

我在 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/

相关文章:

delphi - 如何区分 UI 关闭和使用 Delphi 强制关闭

delphi - CreateProcessAsUser 如何添加权限?

assembly - 引导加载程序错误 : Help in assembly

assembly - 将用户输入放入 CX

assembly - 如何使用存储在 x64 位置的 x64 内存地址进行跳转?

assembly - 为什么编译器不使用 ENTER 和 LEAVE 指令?

ruby-on-rails - 在 Mac OS X 上的 Ruby on Rails 中使用 Delphi

delphi - 如何排列 TPopupMenu 以使其准确地将自己定位在按钮上方?

rust - 128bit由64bit原生划分

c - PADDD 指令的操作数