#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 dieser Code genau bewirkt? Ich meine, ich habe eine Idee oder die Teile dieses Befehls. "1" newval ist die Eingabe, "=a" löscht den vorherigen Wert und aktualisiert ihn. "m" ist für die Speicheroperation, aber ich bin verwirrt über die Funktionalität dieser Funktion. Was bewirkt das Zeichen "+m"? Tut diese Funktion etwas wie m=a; m = newval; return a