我在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位浮点数吗?
答案 0 :(得分:7)
这是因为64位系统使用自己的calling convention,这些参数位于RCX和RDX寄存器中。 More explanations in MSDN
关于处理浮点数 - 请阅读Intel developer documentation。