Linuxではアセンブラを使い始めています。私はtestasm.cとして以下のコードを保存しました
コンパイルして:gcc testasm.c -otestasm
コンパイラは次のように答えます: "asmの不可能な制約"。Linuxアセンブラのエラー「asmの不可能な制約」
#include <stdio.h>
int main(void)
{
int foo=10,bar=15;
__asm__ __volatile__ ("addl %%ebx,%%eax"
: "=eax"(foo)
: "eax"(foo), "ebx"(bar)
: "eax"
);
printf("foo = %d", foo);
return 0;
}
この問題を解決するにはどうすればよいですか? (私はhereから例をコピーした。)
Debianのレニー、カーネル2.6.26-2-amd64の
gccのバージョン4.3.2(Debianの4.3.2-1.1)
解像度:
受け入れられた回答を参照してください - それは '修正'句がもうサポートされていないようです。
それは、ありがとう、働いています。それはもう '変更された'節が好きではないと思われますので、変更したものをプッシュ&ポップする必要があります。 – slashmais
変更された句はまだ動作します。私は問題は "出力"が暗黙的に "変更された"ことを指定していることだと思うので、両方のフィールドでeaxを表現することが問題を引き起こしていました。 –