Delphi XE3中的64位内联汇编

jus*_*tyy 0 delphi 64-bit assembly x86-64 basm

我在Delphi XE3中使用64位内联汇编程序遇到了这个问题,我不明白.

我试过这个,它适用于32位和64位

function test(a, b: integer): integer; assembler; register;
asm
  mov eax, a
  add eax, edx
end;
Run Code Online (Sandbox Code Playgroud)

但是,这仅适用于32位而不是64位,在64位编译时,但没有返回两个整数之和的正确结果.

function test(a, b: integer): integer; assembler; register;
asm
  add eax, edx
end;
Run Code Online (Sandbox Code Playgroud)

我知道以前的FPU代码如FLD,STP工作在32位但它会在64位编译器上产生编译错误.知道如何处理64位浮点数吗?

MBo*_*MBo 7

这是因为64位系统使用自己的调用约定,这些参数位于RCX和RDX寄存器中.MSDN中有更多解释.

关于处理浮点数 - 阅读英特尔开发者文档.