2

Sparc で「インライン」アセンブリ プログラミングを行いたいのですが、レジスタを渡す方法を考えています。

小さな例で私の問題を説明するのが最善です

int main()
{
   int a = 5;
   int b = 6;
   int res;

   asm_addition(a,b);

   printf("Result: %d\n", res);
   return(0);
}
  // My assembler addition

.global asm_addition            

.align  4   

    add rs1, rs2, rd
    restore

値aとbが追加されるように、どのレジスタを使用する必要があるか知っている人はいますか? 最後に、アセンブリ ルーチンに続く最後の printf ステートメントで結果が出力されるように、どのレジスタを rd に指定する必要がありますか。

いくつかの入力をありがとう!

4

2 に答える 2

0

呼び出し規約は OS によって異なる場合があります。ソラリスだと思います。Google for system v application binary interface sparc、PDF は簡単に見つかります。

完全なインライン アセンブラ ドキュメントは、SunStudio PDF のどこかに埋もれており、簡単に見つけることはできません。公式には からもアクセスできますman -s 1 inlineが、私のシステムでは手動でファイルを開く必要があります。man ページで、「SPARC システムのコーディング規則」を探します。

于 2010-07-15T14:51:49.870 に答える
0

Solaris では、パラメータはレジスタ %o0 を介して %o5 に渡され、スタックを介して渡されます。呼び出された関数がリーフ関数である (つまり、別の関数を呼び出さない) 場合、レジスタ ウィンドウは前方に移動せず、関数は %o0 から %o5 経由でそれらに直接アクセスします。レジスタ ウィンドウが移動すると、関数は %i0 ~ %i5 レジスタを介してパラメータにアクセスできます。戻り値は、呼び出し先で %o0 になる呼び出し先で %i0 を介して同じように進みます。浮動小数点パラメータの場合、それらは FP レジスタを介して処理されますが、Dummy00001 が指しているドキュメントを読む必要があります。

于 2010-08-04T10:33:09.890 に答える