Inizio con l'assemblatore sotto Linux. Ho salvato il seguente codice come testasm.c
e lo ho compilato con: gcc testasm.c -otestasm
Il compilatore risponde: "impossibile vincolo in 'asm'".Errore di assemblatore Linux "vincolo impossibile in '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;
}
Come posso risolvere questo problema? (Ho copiato l'esempio da here.)
Debian Lenny, kernel 2.6.26-2-amd64
versione di gcc 4.3.2 (Debian 4.3.2-1.1)
Risoluzione:
Vedere la risposta accettata - sembra che la clausola 'modificata' non sia più supportata.
Funziona, grazie. Sembra che non piaccia più la clausola 'modificata', quindi suppongo che dovrò spingere e popl qualunque cosa cambi. – slashmais
La clausola modificata funziona ancora; Penso che il problema sia che "output" specifica implicitamente anche "modificato", quindi avere il eax rappresentato in entrambi i campi stava causando il problema. –