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ビットではコンパイルされますが、2つの整数の合計の正しい結果は返されませんでした。

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

FLDなどの以前のFPUコードは知っていますが、STPは32ビットで動作しますが、64ビットコンパイラではコンパイルエラーが発生します。64ビットで浮動小数点数を処理する方法はありますか?

4

1 に答える 1

7

これは、64ビットシステムが独自の呼び出し規約を使用しており、これらのパラメーターがRCXおよびRDXレジスタにあるためです。MSDNの詳細な説明

浮動小数点数の処理について-インテルの開発者向けドキュメントをお読みください。

于 2013-03-22T14:12:09.287 に答える