1

私は非常に単純な問題を抱えています。%o1 と呼ばれる単一のレジスタを直接操作する (SPARC 用の) アセンブラ コードを書きたいと思います。私がしたいのは、このレジスタをゼロで初期化し、いくつかの即値でインクリメントすることだけです。問題は、C アプリケーションから %o1 に結果を出力するにはどうすればよいかということです。私が持っているスケルトンは次のようになります。

  void main()
  {
    int a;  

    asm volatile (
        ".text\n\t"
          "mov 0, %o1                   \n\t"
        "add %o1, 1,  %o1             \n\t"
        "add %o1, 2,  %o1             \n\t"
        "add %o1, 3,  %o1             \n\t"
    );    

    // assign content of register %o1 somehow to variable a (a = %o1);

    printf("%i\n", a);
  }

問題は、%o1 の値 (計算の最後には 6 になるはずです) を変数 a に割り当てて、コンソールに出力できるようにする方法です。

4

2 に答える 2

0

これはコンパイラに大きく依存します(あなたが私たちに教えてくれませんでした)。そのドキュメントを調べてください。gcc の場合、構文は次のようになります。

int a __asm("%o1")__ = 78;
于 2011-03-10T16:02:06.180 に答える