#include <stdlib.h>
static inline uint
xchg(volatile unsigned int *addr, unsigned int newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" : "+m" (*addr), "=a" (result) : "1" (newval) : "cc");
return result;
}
Kann mir jemand sagen, was genau dieser Code tut? Ich meine, ich habe eine Idee oder die Teile dieses Befehls. "1" newval ist die Eingabe, "= a" ist, den vorherigen Wert auszuspülen und zu aktualisieren. "m" ist für die Speicheroperation, aber ich bin verwirrt über die Funktionalität dieser Funktion. Was macht das "+ m" -Zeichen? Funktioniert diese Funktion etwa wie m = a; m = Neuwert; return aAufruf der Baugruppe in GCC?
auch hier http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx