hier eine C-Funktion, die in ihm Assembler-Code verwendet erweitern:Ich verstehe nicht, diese Baugruppe Inline-Code in C erweitern
static inline uint
xchg(volatile uint *addr, uint newval)
{
uint result;
asm volatile("lock; xchgl %0, %1" :
"+m" (*addr), "=a" (result) :
"1" (newval) :
"cc");
return result;
}
Ich las this codeproject link für lernen, wie Assembler-Code in C Erweiterte zu benutzen, aber ich verwirrt bei diesem Code. Ich verstehe etwas in diesem Code nicht:
1) Wo wird (newval)
als Eingabe in Assembler-Code verwendet? (%0
auf (*addr)
beziehen und %1
auf (result)
Recht beziehen? Dann "1" (newval)
nie im Code verwendet (wir nie %2
in Code sehen). Oder irre ich mich?)
2) Was ist "1"
in "1" (newval)
in Eingangsoperanden?
3) was ist "+m"
zeichen bedeutet in "+m" (*addr)
?
Sie haben meistens Recht. Lesen Sie mehr [hier] (http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) – egur
Ich werde das lesen. Danke – mojibuntu
Viel besser Tutorial [hier] (http://locklessinc.com/articles/gcc_asm/). –