6

このコードをXcodeのAppleLLVM4.1でコンパイルすると、エラーが発生します。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    int a = 1;
    printf("a = %d\n", a);

    asm volatile(".intel_syntax noprefix;"
        "mov [%0], 2;"
        :
        : "r" (&a)
        );

    printf("a = %d\n", a);
    return 0;
}

エラーはUnknown token in expressionです。

AT&T構文を使用すると、正常に機能します。

asm volatile("movl $0x2, (%0);"
                 :
                 : "r" (&a)
                 : "memory"
                 );

最初のコードの何が問題になっていますか?

4

1 に答える 1

6

コンパイラが(私のマシン上で)変換%0しているように見えますが、アセンブラは(Intelモードであるため)を好みません。%reg%rcx%

まだ例を見たことがないので、自動レジスタ割り当て機能(拡張asm )をIntel構文と組み合わせることが可能かどうかはわかりません。

gccインラインアセンブリに関する優れたドキュメントは通常入手が困難であり、clangはそのドキュメントで、この領域のgccとほとんど互換性があると述べています...

于 2012-12-30T17:39:41.653 に答える