0

私はIDEとしてWindows7のnetbeansを使用しました。そして、以下は私のアセンブリコードです:

/* Atomic exchange (of various sizes) */
inline void *xchg_64(void *ptr, void *x)
{
    __asm__ __volatile__("xchgq %0,%1"
                :"=r" ((unsigned long long) x)
                :"m" (*(volatile long long *)ptr), "0" ((unsigned long long) x)
                :"memory");

    return x;
}

プロジェクトをコンパイルすると、次の1つのエラーが発生します。

tklock.h:29:15: error: lvalue required in asm statement

15行目は次のとおりです。

:"memory");

問題を解決する方法は?

4

1 に答える 1

1

2つのメモリ位置の値を直接交換する方法はありません。Intelはそのような指示を提供していません。

レジスターを仲介として使用して、load-exchange-storeとしてコーディングする必要があります。

その場合は、Cでコーディングすることもできます...

于 2012-12-28T09:53:43.407 に答える