5

これは非常に基本的な質問であることは知っていますが、本当に行き詰まっています。実際、私は GCC 構文の初心者です。

拡張インライン アセンブリを使用せずに、ローカル変数 (ラベル付きのスタック アドレス) を使用したい。Intel 構文の次のコードのようなもの:

DATA1  DB  100 
MOV AL, DATA1

これは、GCC で代用できると思われるコードです。

int someFunction(int x)
{
    __asm__ volatile(
                     "function1:"
                     ".data;"
                     ".2byte $4 data1   ;"

                     ".text;"
                     "pushq %rbp;"
                     "movq %rsp , %rbp ;"

                     "movl var , %eax;"  // this is source of error

                     "popq %rbp;"
                     "leaveq;"
                     "retq ; "
                    ); 
}

しかし、このコードでは次のエラーが発生します。

アーキテクチャ x86_64 のシンボルが見つかりません

x86 でグローバル変数を使用できますが、x64 または x86_x64 でも同じ結果になります。

設定: LLVM 4.1; Xcode 4 で使用されるココア

正しい構文は何ですか?

4

1 に答える 1

7

GCC インライン アセンブラーはローカル変数をサポートしていません。GCC の拡張構文を使用してください。

AT&T 構文に慣れていない場合は、GCC で Intel 構文を使用する方法があります。

これは、GCC asm に関する優れたハウツーです。

于 2013-01-10T07:54:43.523 に答える