Ich beginne mit Assembler unter Linux. Ich habe den folgenden Code als testasm.c
gespeichert und kompilierte es mit: gcc testasm.c -otestasm
Der Compiler antwortet: "unmögliche Einschränkung in 'asm'".Linux Assembler Fehler "unmögliche Einschränkung 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;
}
Wie kann ich dieses Problem lösen? (ich das Beispiel von here kopiert haben.)
Debian Lenny, kernel 2.6.26-2-amd64
gcc Version 4.3.2 (Debian 4.3.2-1.1)
Auflösung:
Siehe die akzeptierte Antwort - es scheint, die 'modifizierte' Klausel wird nicht mehr unterstützt.
Das funktioniert, danke. Scheint, dass es den "modifizierten" Teil nicht mehr mag, also denke ich, dass ich pushen muss, was auch immer ich ändere. – slashmais
Die modifizierte Klausel funktioniert immer noch; Ich denke, das Problem ist, dass "output" implizit auch "modified" ("modifiziert") angibt, also verursachte das Vorhandensein von eax in beiden Feldern das Problem. –