インテル® Fortran では、すべてのデータ・オブジェクトに対してアライメントを指定することができます。アライメントを要求すると、オブジェクトとそのデータが自然境界から開始するように、バイトがパディングとして追加されます。MASM のデフォルト設定はバイト境界なので、MASM の構造体に対しては 4 のアライメントを指定するか、または Fortran コンパイラー・オプションの /alignment:keyword を使用する必要があります。
関数としてプロトタイプされている MASM プロシージャーは、Fortran ルーチンに値を返すことができます。4 バイト以下の戻り値は (浮動小数点値を除いて) すべて EAX レジスターに返されます。
浮動小数点値を返すプロシージャーは、結果を浮動小数点プロセッサー・スタックに返します。これが可能なのは、32 ビット・コンパイラーで常にコプロセッサーまたはエミュレーターが利用可能だからです。
アセンブリー言語から Fortran に、REAL および COMPLEX 浮動小数点値を返す場合、または 4 バイトよりも大きいレコード、配列、および値を返す場合、あるいは 8 バイトよりも大きいユーザー定義型を返す場合、特殊な規則を使用する必要があります。Fortran は、スタックセグメントに実際の戻り値を保持するための領域を作成し、スタックにプッシュされる最後のパラメーターとして追加パラメーターを渡します。この追加パラメーターには、戻り値が格納されているスタック領域のアドレスが含まれています。ユーザー定義型の場合、4 バイト以下の値は EAX に、5 ~ 8 バイトの値は EAX:EDX に返されます。
アセンブリー・プロシージャーでは、戻り値オフセットで指定された位置に、戻り値のデータを格納します。その後、戻り値オフセット (アセンブリー・コードでスタックフレームを作成した場合、EBP+8 の位置にあります) を EAX にコピーします。これは、呼び出し側のモジュールで EAX に戻り値のアドレスが格納されていると想定しているために必要です。
次の表は、値を返す方法をまとめたものです。
返す値の型 |
値を返す方法 |
---|---|
4 バイト以下の整数、論理変数、またはユーザー定義型 |
EAX レジスターに値を返します |
浮動小数点変数 |
FPU スタックに値を返します |
4 バイト以上の変数 (文字列、複素数値) または 8 バイト以上のユーザー定義型 |
スタック (EAX レジスターの値のアドレス) に値を返します |
5 ~ 8 バイトのユーザー定義の構造体 |
EAX:EDX レジスターに値を返します |
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。