Zaczynam od asemblera pod Linuksem. Mam zapisany następujący kod jako testasm.c
i skompilowałem go z: gcc testasm.c -otestasm
Kompilator odpowiada: "niemożliwe ograniczenie w" ASM "".Błąd asemblera systemu Linux "niemożliwe ograniczenie w '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;
}
Jak mogę rozwiązać ten problem? (mam skopiowane przykład z here.)
Debian Lenny, jądro 2.6.26-2-amd64
wersja gcc 4.3.2 (Debian 4.3.2-1.1)
Rozdzielczość:
Zobacz zaakceptowaną odpowiedź - wygląda na to, że klauzula "zmodyfikowana" nie jest już obsługiwana.
To działa, dziękuję. Wygląda na to, że nie podoba mi się już "zmodyfikowana" klauzula, więc domyślam się, że będę musiał naciskać i zmieniać, co zmienię. – slashmais
Zmodyfikowana klauzula nadal działa; Myślę, że problem polega na tym, że "wyjście" domyślnie określa również "zmodyfikowany", więc przyczyną problemu był eax reprezentowany w obu obszarach. –