0

我在 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 位浮点数吗?

4

1 回答 1

7

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

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

于 2013-03-22T14:12:09.287 回答