Delphi XE3中的64位内联汇编

时间:2013-03-22 14:05:46

标签: delphi assembly 64-bit x86-64 basm

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

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

function test(a, b: integer): integer; assembler; register;
asm
  mov eax, a
  add eax, edx
end;

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

function test(a, b: integer): integer; assembler; register;
asm
  add eax, edx
end;

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

1 个答案:

答案 0 :(得分:7)

这是因为64位系统使用自己的calling convention,这些参数位于RCX和RDX寄存器中。 More explanations in MSDN

关于处理浮点数 - 请阅读Intel developer documentation