#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;
}
Qualcuno può dirmi cosa fa esattamente questo codice? Voglio dire, ho un'idea o parti di questo comando. "1" newval è l'input, "= a" è per eliminare il suo valore precedente e aggiornarlo. "m" è per l'operazione di memoria, ma sono confuso circa la funzionalità di questa funzione. Che cosa fa il segno "+ m"? Questa funzione fa qualcosa come m = a; m = newval; return aChiamare l'assemblaggio in GCC?
anche qui http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s6 – osgx