Je commence avec assembleur sous Linux. J'ai enregistré le code suivant comme testasm.c
et l'a compilé avec: gcc testasm.c -otestasm
Le compilateur répond: "impossible contrainte dans 'asm'".Erreur d'assembleur Linux "contrainte impossible dans '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;
}
Comment puis-je résoudre ce problème? (je l'ai copié l'exemple de here.)
Debian Lenny, noyau 2.6.26-2-amd64
version gcc 4.3.2 (Debian 4.3.2-1.1)
Résolution:
Voir la réponse acceptée - il semble que la clause 'modified' n'est plus supportée.
Cela fonctionne, merci. On dirait qu'il n'aime plus la clause 'modified', donc je suppose que je vais devoir pousser et popl ce que je change. – slashmais
La clause modifiée fonctionne toujours; Je pense que le problème est que "output" spécifie implicitement "modified", donc avoir eax représenté dans les deux champs était à l'origine du problème. –